Kontrolowanie ruchu wychodzącego przy użyciu Azure Firewall w usłudze Azure Kubernetes Service (AKS)
Ten artykuł zawiera wskazówki dotyczące używania reguł sieci wychodzącej i nazw FQDN dla klastrów usługi AKS do kontrolowania ruchu wychodzącego przy użyciu Azure Firewall w usłudze AKS. Aby uprościć tę konfigurację, Azure Firewall udostępnia Azure Kubernetes Service (AzureKubernetesService
) nazwę FQDN, która ogranicza ruch wychodzący z klastra usługi AKS. Ten artykuł zawiera również przykład konfigurowania publicznego ruchu przychodzącego za pośrednictwem zapory.
Uwaga
Tag nazwy FQDN zawiera wszystkie nazwy FQDN wymienione w regułach sieci wychodzącej i nazwy FQDN dla klastrów usługi AKS i są automatycznie aktualizowane.
W przypadku scenariuszy produkcyjnych zalecamy posiadanie co najmniej 20 adresów IP frontonu na Azure Firewall, aby uniknąć problemów z wyczerpaniem portów SNAT.
Poniższe informacje zawierają przykładową architekturę wdrożenia:
- Publiczny ruch przychodzący jest zmuszony do przepływu przez filtry zapory
- Węzły agenta usługi AKS są izolowane w dedykowanej podsieci
- Azure Firewall jest wdrażana we własnej podsieci
- Reguła DNAT tłumaczy publiczny adres IP zapory na adres IP frontonu modułu równoważenia obciążenia
- Żądania wychodzące rozpoczynają się od węzłów agenta do wewnętrznego adresu IP Azure Firewall przy użyciu trasy zdefiniowanej przez użytkownika (UDR)
- Żądania z węzłów agenta usługi AKS są zgodne z trasę zdefiniowaną przez użytkownika, która została umieszczona w podsieci, w której wdrożono klaster usługi AKS
- Azure Firewall wychodzące z sieci wirtualnej z frontonu publicznego adresu IP
- Dostęp do publicznego Internetu lub innych usług platformy Azure przepływa do i z adresu IP frontonu zapory
- Dostęp do płaszczyzny sterowania usługi AKS może być chroniony przez autoryzowane zakresy adresów IP serwera interfejsu API, w tym publiczny adres IP frontonu zapory
- Ruch wewnętrzny
- Możesz użyć wewnętrznego modułu równoważenia obciążenia dla ruchu wewnętrznego , który można odizolować we własnej podsieci, zamiast lub obok publicznego modułu równoważenia obciążenia
Ustawianie konfiguracji przy użyciu zmiennych środowiskowych
Zdefiniuj zestaw zmiennych środowiskowych, które mają być używane podczas tworzenia zasobów.
PREFIX="aks-egress"
RG="${PREFIX}-rg"
LOC="eastus"
PLUGIN=azure
AKSNAME="${PREFIX}"
VNET_NAME="${PREFIX}-vnet"
AKSSUBNET_NAME="aks-subnet"
# DO NOT CHANGE FWSUBNET_NAME - This is currently a requirement for Azure Firewall.
FWSUBNET_NAME="AzureFirewallSubnet"
FWNAME="${PREFIX}-fw"
FWPUBLICIP_NAME="${PREFIX}-fwpublicip"
FWIPCONFIG_NAME="${PREFIX}-fwconfig"
FWROUTE_TABLE_NAME="${PREFIX}-fwrt"
FWROUTE_NAME="${PREFIX}-fwrn"
FWROUTE_NAME_INTERNET="${PREFIX}-fwinternet"
Tworzenie sieci wirtualnej z wieloma podsieciami
Aprowizuj sieć wirtualną z dwiema oddzielnymi podsieciami: jedną dla klastra i jedną dla zapory. Opcjonalnie możesz utworzyć go dla ruchu przychodzącego usługi wewnętrznej.
Utwórz grupę zasobów przy użyciu
az group create
polecenia .az group create --name $RG --location $LOC
Utwórz sieć wirtualną z dwiema podsieciami do hostowania klastra usługi AKS i Azure Firewall przy użyciu
az network vnet create
poleceń iaz network vnet subnet create
.# Dedicated virtual network with AKS subnet az network vnet create \ --resource-group $RG \ --name $VNET_NAME \ --location $LOC \ --address-prefixes 10.42.0.0/16 \ --subnet-name $AKSSUBNET_NAME \ --subnet-prefix 10.42.1.0/24 # Dedicated subnet for Azure Firewall (Firewall name can't be changed) az network vnet subnet create \ --resource-group $RG \ --vnet-name $VNET_NAME \ --name $FWSUBNET_NAME \ --address-prefix 10.42.2.0/24
Tworzenie i konfigurowanie Azure Firewall przy użyciu trasy zdefiniowanej przez użytkownika
Należy skonfigurować reguły ruchu przychodzącego i wychodzącego Azure Firewall. Głównym celem zapory jest umożliwienie organizacjom konfigurowania szczegółowych reguł ruchu przychodzącego i wychodzącego do i z klastra usługi AKS.
Ważne
Jeśli klaster lub aplikacja tworzy dużą liczbę połączeń wychodzących kierowanych do tego samego lub małego podzbioru miejsc docelowych, może być konieczne użycie większej liczby adresów IP frontonu zapory, aby uniknąć maksymalnego limitu portów na adres IP frontonu.
Aby uzyskać więcej informacji na temat tworzenia Azure Firewall z wieloma adresami IP, zobacz Tworzenie Azure Firewall z wieloma publicznymi adresami IP przy użyciu Bicep.
Utwórz zasób publicznego adresu IP standardowej jednostki SKU przy użyciu
az network public-ip create
polecenia . Ten zasób będzie używany jako adres frontonu Azure Firewall.az network public-ip create -g $RG -n $FWPUBLICIP_NAME -l $LOC --sku "Standard"
Zarejestruj rozszerzenie interfejsu wiersza polecenia Azure Firewall w wersji zapoznawczej, aby utworzyć Azure Firewall przy użyciu
az extension add
polecenia .az extension add --name azure-firewall
Utwórz Azure Firewall i włącz serwer proxy DNS przy użyciu
az network firewall create
polecenia i ustawienie wartości--enable-dns-proxy
.true
az network firewall create -g $RG -n $FWNAME -l $LOC --enable-dns-proxy true
Skonfigurowanie publicznego adresu IP Azure Firewall może potrwać kilka minut. Po uzyskaniu gotowości adres IP utworzony wcześniej można przypisać do frontonu zapory.
Uwaga
Aby korzystać z nazwy FQDN w regułach sieciowych, musimy włączyć serwer proxy DNS. Po włączeniu serwera proxy DNS zapora nasłuchuje na porcie 53 i przekazuje żądania DNS do serwera DNS określonego powyżej. Dzięki temu zapora może automatycznie tłumaczyć nazwę FQDN.
Utwórz konfigurację adresu IP Azure Firewall przy użyciu
az network firewall ip-config create
polecenia .az network firewall ip-config create -g $RG -f $FWNAME -n $FWIPCONFIG_NAME --public-ip-address $FWPUBLICIP_NAME --vnet-name $VNET_NAME
Po pomyślnym zakończeniu poprzedniego polecenia zapisz adres IP frontonu zapory na potrzeby konfiguracji później.
FWPUBLIC_IP=$(az network public-ip show -g $RG -n $FWPUBLICIP_NAME --query "ipAddress" -o tsv) FWPRIVATE_IP=$(az network firewall show -g $RG -n $FWNAME --query "ipConfigurations[0].privateIpAddress" -o tsv)
Uwaga
Jeśli używasz bezpiecznego dostępu do serwera interfejsu API usługi AKS z autoryzowanymi zakresami adresów IP, musisz dodać publiczny adres IP zapory do autoryzowanego zakresu adresów IP.
Tworzenie trasy zdefiniowanej przez użytkownika z przeskokiem do Azure Firewall
Platforma Azure automatycznie kieruje ruchem między podsieciami platformy Azure, sieciami wirtualnymi i sieciami lokalnymi. Jeśli chcesz zmienić domyślny routing platformy Azure, możesz utworzyć tabelę tras.
Utwórz pustą tabelę tras, która ma być skojarzona z daną podsiecią
az network route-table create
za pomocą polecenia . Tabela tras zdefiniuje następny przeskok jako utworzony powyżej Azure Firewall. Każda podsieć może mieć skojarzoną ze sobą żadną lub jedną tabelę tras.az network route-table create -g $RG -l $LOC --name $FWROUTE_TABLE_NAME
Utwórz trasy w tabeli tras dla podsieci przy użyciu
az network route-table route create
polecenia .az network route-table route create -g $RG --name $FWROUTE_NAME --route-table-name $FWROUTE_TABLE_NAME --address-prefix 0.0.0.0/0 --next-hop-type VirtualAppliance --next-hop-ip-address $FWPRIVATE_IP az network route-table route create -g $RG --name $FWROUTE_NAME_INTERNET --route-table-name $FWROUTE_TABLE_NAME --address-prefix $FWPUBLIC_IP/32 --next-hop-type Internet
Aby uzyskać informacje na temat zastępowania domyślnych tras systemowych platformy Azure lub dodawania dodatkowych tras do tabeli tras podsieci, zobacz dokumentację tabeli tras sieci wirtualnej.
Dodawanie reguł zapory
Uwaga
W przypadku aplikacji spoza przestrzeni nazw kube-system lub gatekeeper-system, które muszą komunikować się z serwerem interfejsu API, wymagana jest dodatkowa reguła sieci umożliwiająca komunikację TCP z portem 443 dla adresu IP serwera interfejsu API oprócz dodawania reguły aplikacji dla tagu fqdn-tag AzureKubernetesService
.
W tej sekcji opisano trzy reguły sieci i regułę aplikacji, których można użyć do skonfigurowania zapory. Może być konieczne dostosowanie tych reguł na podstawie wdrożenia.
- Pierwsza reguła sieci umożliwia dostęp do portu 9000 za pośrednictwem protokołu TCP.
- Druga reguła sieci umożliwia dostęp do portu 1194 i 123 za pośrednictwem protokołu UDP. Jeśli wdrażasz na platformie Azure (Chiny) 21Vianet, zapoznaj się z regułami sieci wymaganymi przez platformę Azure (Chiny 21Vianet). Obie te reguły zezwalają tylko na ruch kierowany do trasy CIDR w regionie świadczenia usługi Azure w tym artykule, czyli Wschodnie stany USA.
- Trzecia reguła sieci otwiera port 123 do
ntp.ubuntu.com
nazwy FQDN za pośrednictwem protokołu UDP. Dodanie nazwy FQDN jako reguły sieci jest jedną z określonych funkcji Azure Firewall, dlatego należy dostosować ją podczas korzystania z własnych opcji. - Reguła aplikacji obejmuje wszystkie potrzebne nazwy FQDN dostępne za pośrednictwem portu TCP 443 i portu 80.
Utwórz reguły sieci przy
az network firewall network-rule create
użyciu polecenia .az network firewall network-rule create -g $RG -f $FWNAME --collection-name 'aksfwnr' -n 'apiudp' --protocols 'UDP' --source-addresses '*' --destination-addresses "AzureCloud.$LOC" --destination-ports 1194 --action allow --priority 100 az network firewall network-rule create -g $RG -f $FWNAME --collection-name 'aksfwnr' -n 'apitcp' --protocols 'TCP' --source-addresses '*' --destination-addresses "AzureCloud.$LOC" --destination-ports 9000 az network firewall network-rule create -g $RG -f $FWNAME --collection-name 'aksfwnr' -n 'time' --protocols 'UDP' --source-addresses '*' --destination-fqdns 'ntp.ubuntu.com' --destination-ports 123
Utwórz regułę aplikacji przy użyciu
az network firewall application-rule create
polecenia .az network firewall application-rule create -g $RG -f $FWNAME --collection-name 'aksfwar' -n 'fqdn' --source-addresses '*' --protocols 'http=80' 'https=443' --fqdn-tags "AzureKubernetesService" --action allow --priority 100
Aby dowiedzieć się więcej na temat Azure Firewall, zobacz dokumentację Azure Firewall.
Kojarzenie tabeli tras z usługą AKS
Aby skojarzyć klaster z zaporą, dedykowana podsieć dla podsieci klastra musi odwoływać się do tabeli tras utworzonej powyżej. az network vnet subnet update
Użyj polecenia , aby skojarzyć tabelę tras z usługą AKS.
az network vnet subnet update -g $RG --vnet-name $VNET_NAME --name $AKSSUBNET_NAME --route-table $FWROUTE_TABLE_NAME
Wdrażanie klastra usługi AKS z typem wychodzącym trasy zdefiniowanej przez użytkownika w istniejącej sieci
Teraz możesz wdrożyć klaster usługi AKS w istniejącej sieci wirtualnej. Użyjesz typu ruchu wychodzącegouserDefinedRouting
, co gwarantuje, że cały ruch wychodzący jest wymuszany przez zaporę i nie będą istnieć żadne inne ścieżki ruchu wychodzącego. Można również użyć typu ruchu wychodzącego.loadBalancer
Docelowa podsieć do wdrożenia jest definiowana za pomocą zmiennej środowiskowej $SUBNETID
. Ustaw wartość identyfikatora podsieci przy użyciu następującego polecenia:
SUBNETID=$(az network vnet subnet show -g $RG --vnet-name $VNET_NAME --name $AKSSUBNET_NAME --query id -o tsv)
Zdefiniujesz typ ruchu wychodzącego, aby użyć trasy zdefiniowanej przez użytkownika, która już istnieje w podsieci. Ta konfiguracja umożliwi usłudze AKS pominięcie konfiguracji i aprowizowania adresów IP dla modułu równoważenia obciążenia.
Porada
Do wdrożenia klastra można dodać dodatkowe funkcje, takie jak klastry prywatne.
Możesz dodać funkcję AKS dla autoryzowanych zakresów adresów IP serwera interfejsu API , aby ograniczyć dostęp serwera interfejsu API tylko do publicznego punktu końcowego zapory. Funkcja autoryzowanych zakresów adresów IP jest oznaczona na diagramie jako opcjonalna. Po włączeniu funkcji autoryzowanego zakresu adresów IP w celu ograniczenia dostępu do serwera interfejsu API narzędzia deweloperskie muszą używać serwera przesiadkowego z sieci wirtualnej zapory lub dodać wszystkie punkty końcowe deweloperów do autoryzowanego zakresu adresów IP.
Tworzenie klastra usługi AKS z tożsamościami przypisanymi przez system
Uwaga
Usługa AKS utworzy tożsamość kubelet przypisaną przez system w grupie zasobów węzła, jeśli nie określisz własnej tożsamości zarządzanej kubelet.
W przypadku routingu zdefiniowanego przez użytkownika tożsamość przypisana przez system obsługuje tylko wtyczkę sieci CNI.
Utwórz klaster usługi AKS przy użyciu przypisanej przez system tożsamości zarządzanej z wtyczką sieci CNI az aks create
za pomocą polecenia .
az aks create -g $RG -n $AKSNAME -l $LOC \
--node-count 3 \
--network-plugin azure \
--outbound-type userDefinedRouting \
--vnet-subnet-id $SUBNETID \
--api-server-authorized-ip-ranges $FWPUBLIC_IP
Tworzenie tożsamości przypisanych przez użytkownika
Jeśli nie masz tożsamości przypisanych przez użytkownika, wykonaj kroki opisane w tej sekcji. Jeśli masz już tożsamości przypisane przez użytkownika, przejdź do sekcji Tworzenie klastra usługi AKS z tożsamościami przypisanymi przez użytkownika.
Utwórz tożsamość zarządzaną płaszczyzny sterowania przy użyciu
az identity create
polecenia .az identity create --name myIdentity --resource-group myResourceGroup
Dane wyjściowe powinny przypominać następujące przykładowe dane wyjściowe:
{ "clientId": "<client-id>", "clientSecretUrl": "<clientSecretUrl>", "id": "/subscriptions/<subscriptionid>/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myIdentity", "location": "westus2", "name": "myIdentity", "principalId": "<principal-id>", "resourceGroup": "myResourceGroup", "tags": {}, "tenantId": "<tenant-id>", "type": "Microsoft.ManagedIdentity/userAssignedIdentities" }
Utwórz tożsamość zarządzaną kubelet przy
az identity create
użyciu polecenia .az identity create --name myKubeletIdentity --resource-group myResourceGroup
Dane wyjściowe powinny przypominać następujące przykładowe dane wyjściowe:
{ "clientId": "<client-id>", "clientSecretUrl": "<clientSecretUrl>", "id": "/subscriptions/<subscriptionid>/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myKubeletIdentity", "location": "westus2", "name": "myKubeletIdentity", "principalId": "<principal-id>", "resourceGroup": "myResourceGroup", "tags": {}, "tenantId": "<tenant-id>", "type": "Microsoft.ManagedIdentity/userAssignedIdentities" }
Uwaga
Jeśli tworzysz własną sieć wirtualną i tabelę tras, w której zasoby znajdują się poza grupą zasobów węzła procesu roboczego, interfejs wiersza polecenia automatycznie doda przypisanie roli. Jeśli używasz szablonu usługi ARM lub innego klienta, musisz użyć identyfikatora głównego tożsamości zarządzanej klastra do wykonania przypisania roli.
Tworzenie klastra usługi AKS przy użyciu tożsamości przypisanych przez użytkownika
Utwórz klaster usługi AKS z istniejącymi tożsamościami w podsieci za pomocą az aks create
polecenia i podaj identyfikator zasobu tożsamości płaszczyzny sterowania kubelet tożsamości zarządzanej.
az aks create -g $RG -n $AKSNAME -l $LOC \
--node-count 3 \
--network-plugin kubenet \
--outbound-type userDefinedRouting \
--vnet-subnet-id $SUBNETID \
--api-server-authorized-ip-ranges $FWPUBLIC_IP
--enable-managed-identity \
--assign-identity <identity-resource-id> \
--assign-kubelet-identity <kubelet-identity-resource-id>
Włączanie dostępu dewelopera do serwera interfejsu API
Jeśli w poprzednim kroku użyto autoryzowanych zakresów adresów IP dla klastra, należy dodać adresy IP narzędzi deweloperskich do listy zatwierdzonych zakresów adresów IP klastra usługi AKS, aby uzyskać dostęp do serwera interfejsu API. Możesz również skonfigurować skrzynkę przesiadkową z wymaganymi narzędziami wewnątrz oddzielnej podsieci w sieci wirtualnej zapory.
Pobierz swój adres IP przy użyciu następującego polecenia:
CURRENT_IP=$(dig @resolver1.opendns.com ANY myip.opendns.com +short)
Dodaj adres IP do zatwierdzonych zakresów przy użyciu
az aks update
polecenia .az aks update -g $RG -n $AKSNAME --api-server-authorized-ip-ranges $CURRENT_IP/32
Skonfiguruj
kubectl
, aby nawiązać połączenie z klastremaz aks get-credentials
usługi AKS przy użyciu polecenia .az aks get-credentials -g $RG -n $AKSNAME
Wdrażanie usługi publicznej
Teraz możesz rozpocząć udostępnianie usług i wdrażanie aplikacji w tym klastrze. W tym przykładzie udostępnimy usługę publiczną, ale możesz również udostępnić usługę wewnętrzną przy użyciu wewnętrznego modułu równoważenia obciążenia.
Skopiuj następujący kod YAML i zapisz go jako plik o nazwie
example.yaml
.# voting-storage-deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: name: voting-storage spec: replicas: 1 selector: matchLabels: app: voting-storage template: metadata: labels: app: voting-storage spec: containers: - name: voting-storage image: mcr.microsoft.com/aks/samples/voting/storage:2.0 args: ["--ignore-db-dir=lost+found"] resources: requests: cpu: 100m memory: 128Mi limits: cpu: 250m memory: 256Mi ports: - containerPort: 3306 name: mysql volumeMounts: - name: mysql-persistent-storage mountPath: /var/lib/mysql env: - name: MYSQL_ROOT_PASSWORD valueFrom: secretKeyRef: name: voting-storage-secret key: MYSQL_ROOT_PASSWORD - name: MYSQL_USER valueFrom: secretKeyRef: name: voting-storage-secret key: MYSQL_USER - name: MYSQL_PASSWORD valueFrom: secretKeyRef: name: voting-storage-secret key: MYSQL_PASSWORD - name: MYSQL_DATABASE valueFrom: secretKeyRef: name: voting-storage-secret key: MYSQL_DATABASE volumes: - name: mysql-persistent-storage persistentVolumeClaim: claimName: mysql-pv-claim --- # voting-storage-secret.yaml apiVersion: v1 kind: Secret metadata: name: voting-storage-secret type: Opaque data: MYSQL_USER: ZGJ1c2Vy MYSQL_PASSWORD: UGFzc3dvcmQxMg== MYSQL_DATABASE: YXp1cmV2b3Rl MYSQL_ROOT_PASSWORD: UGFzc3dvcmQxMg== --- # voting-storage-pv-claim.yaml apiVersion: v1 kind: PersistentVolumeClaim metadata: name: mysql-pv-claim spec: accessModes: - ReadWriteOnce resources: requests: storage: 1Gi --- # voting-storage-service.yaml apiVersion: v1 kind: Service metadata: name: voting-storage labels: app: voting-storage spec: ports: - port: 3306 name: mysql selector: app: voting-storage --- # voting-app-deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: name: voting-app spec: replicas: 1 selector: matchLabels: app: voting-app template: metadata: labels: app: voting-app spec: containers: - name: voting-app image: mcr.microsoft.com/aks/samples/voting/app:2.0 imagePullPolicy: Always ports: - containerPort: 8080 name: http env: - name: MYSQL_HOST value: "voting-storage" - name: MYSQL_USER valueFrom: secretKeyRef: name: voting-storage-secret key: MYSQL_USER - name: MYSQL_PASSWORD valueFrom: secretKeyRef: name: voting-storage-secret key: MYSQL_PASSWORD - name: MYSQL_DATABASE valueFrom: secretKeyRef: name: voting-storage-secret key: MYSQL_DATABASE - name: ANALYTICS_HOST value: "voting-analytics" --- # voting-app-service.yaml apiVersion: v1 kind: Service metadata: name: voting-app labels: app: voting-app spec: type: LoadBalancer ports: - port: 80 targetPort: 8080 name: http selector: app: voting-app --- # voting-analytics-deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: name: voting-analytics spec: replicas: 1 selector: matchLabels: app: voting-analytics version: "2.0" template: metadata: labels: app: voting-analytics version: "2.0" spec: containers: - name: voting-analytics image: mcr.microsoft.com/aks/samples/voting/analytics:2.0 imagePullPolicy: Always ports: - containerPort: 8080 name: http env: - name: MYSQL_HOST value: "voting-storage" - name: MYSQL_USER valueFrom: secretKeyRef: name: voting-storage-secret key: MYSQL_USER - name: MYSQL_PASSWORD valueFrom: secretKeyRef: name: voting-storage-secret key: MYSQL_PASSWORD - name: MYSQL_DATABASE valueFrom: secretKeyRef: name: voting-storage-secret key: MYSQL_DATABASE --- # voting-analytics-service.yaml apiVersion: v1 kind: Service metadata: name: voting-analytics labels: app: voting-analytics spec: ports: - port: 8080 name: http selector: app: voting-analytics
Wdróż usługę
kubectl apply
przy użyciu polecenia .kubectl apply -f example.yaml
Dodawanie reguły DNAT do Azure Firewall
Ważne
Jeśli używasz Azure Firewall do ograniczania ruchu wychodzącego i tworzenia trasy zdefiniowanej przez użytkownika w celu wymuszenia całego ruchu wychodzącego, upewnij się, że utworzono odpowiednią regułę DNAT w Azure Firewall, aby poprawnie zezwalać na ruch przychodzący. Użycie Azure Firewall z trasą zdefiniowaną przez użytkownika powoduje przerwanie konfiguracji ruchu przychodzącego z powodu routingu asymetrycznego. Problem występuje, jeśli podsieć usługi AKS ma trasę domyślną, która przechodzi do prywatnego adresu IP zapory, ale używasz publicznego modułu równoważenia obciążenia — ruchu przychodzącego lub usługi Kubernetes typu loadBalancer
. W takim przypadku przychodzący ruch modułu równoważenia obciążenia jest odbierany za pośrednictwem publicznego adresu IP, ale ścieżka powrotna przechodzi przez prywatny adres IP zapory. Ponieważ zapora jest stanowa, odrzuca zwracany pakiet, ponieważ zapora nie jest świadoma ustalonej sesji. Aby dowiedzieć się, jak zintegrować Azure Firewall z przychodzącym lub modułem równoważenia obciążenia usługi, zobacz Integrowanie Azure Firewall z usługą Azure usługa Load Balancer w warstwie Standardowa.
Aby skonfigurować łączność przychodzącą, należy napisać regułę DNAT do Azure Firewall. Aby przetestować łączność z klastrem, reguła jest zdefiniowana dla publicznego adresu IP frontonu zapory w celu kierowania do wewnętrznego adresu IP uwidocznionego przez usługę wewnętrzną. Adres docelowy można dostosować. Przetłumaczony adres musi być adresem IP wewnętrznego modułu równoważenia obciążenia. Przetłumaczony port musi być uwidoczniony port dla usługi Kubernetes. Należy również określić wewnętrzny adres IP przypisany do modułu równoważenia obciążenia utworzonego przez usługę Kubernetes.
Pobierz wewnętrzny adres IP przypisany do modułu
kubectl get services
równoważenia obciążenia przy użyciu polecenia .kubectl get services
Adres IP zostanie wyświetlony w kolumnie
EXTERNAL-IP
, jak pokazano w poniższych przykładowych danych wyjściowych:NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.41.0.1 <none> 443/TCP 10h voting-analytics ClusterIP 10.41.88.129 <none> 8080/TCP 9m voting-app LoadBalancer 10.41.185.82 20.39.18.6 80:32718/TCP 9m voting-storage ClusterIP 10.41.221.201 <none> 3306/TCP 9m
Pobierz adres IP usługi przy użyciu
kubectl get svc voting-app
polecenia .SERVICE_IP=$(kubectl get svc voting-app -o jsonpath='{.status.loadBalancer.ingress[*].ip}')
Dodaj regułę translatora adresów sieciowych
az network firewall nat-rule create
przy użyciu polecenia .az network firewall nat-rule create --collection-name exampleset --destination-addresses $FWPUBLIC_IP --destination-ports 80 --firewall-name $FWNAME --name inboundrule --protocols Any --resource-group $RG --source-addresses '*' --translated-port 80 --action Dnat --priority 100 --translated-address $SERVICE_IP
Weryfikowanie łączności
Przejdź do adresu IP frontonu Azure Firewall w przeglądarce, aby zweryfikować łączność.
Powinna zostać wyświetlona aplikacja do głosowania w usłudze AKS. W tym przykładzie publiczny adres IP zapory to 52.253.228.132
.
Czyszczenie zasobów
Aby wyczyścić zasoby platformy Azure, usuń grupę zasobów usługi AKS przy użyciu az group delete
polecenia .
az group delete -g $RG
Następne kroki
W tym artykule przedstawiono sposób zabezpieczania ruchu wychodzącego przy użyciu Azure Firewall. W razie potrzeby możesz uogólnić powyższe kroki, aby przekazać ruch do preferowanego rozwiązania wychodzącego zgodnie z dokumentacją Typ userDefinedRoute
ruchu wychodzącego.