Delen via


Azure Firewall gebruiken om AKS-clusters (Azure Kubernetes Service) te beveiligen

In dit artikel wordt beschreven hoe u AKS-clusters (Azure Kubernetes Service) kunt beveiligen met behulp van Azure Firewall om uitgaand en binnenkomend verkeer te beveiligen.

Achtergrond

Azure Kubernetes Service (AKS) biedt een beheerd Kubernetes-cluster in Azure. Zie Azure Kubernetes Service voor meer informatie.

Ondanks dat AKS een volledig beheerde oplossing is, biedt het geen ingebouwde oplossing om inkomend en uitgaand verkeer tussen het cluster en externe netwerken te beveiligen. Azure Firewall biedt hiervoor een oplossing.

AKS-clusters worden geïmplementeerd in een virtueel netwerk. Dit netwerk kan worden beheerd (gemaakt door AKS) of aangepast (vooraf geconfigureerd door de gebruiker). In beide gevallen heeft het cluster uitgaande afhankelijkheden van services buiten dat virtuele netwerk (de service heeft geen binnenkomende afhankelijkheden). Voor beheer- en operationele doeleinden moeten knooppunten in een AKS-cluster toegang hebben tot bepaalde poorten en FQDN's (Fully Qualified Domain Names) die deze uitgaande afhankelijkheden beschrijven. Dit is vereist voor verschillende functies, waaronder, maar niet beperkt tot, de knooppunten die communiceren met de Kubernetes-API-server. Ze downloaden en installeren kernonderdelen van Kubernetes-cluster en beveiligingsupdates voor knooppunten, of halen installatiekopieën van basissysteemcontainers op uit Microsoft Container Registry (MCR), enzovoort. Deze uitgaande afhankelijkheden zijn bijna volledig gedefinieerd met FQDN's, die geen statische adressen hebben. Het ontbreken van statische adressen betekent dat netwerkbeveiligingsgroepen niet kunnen worden gebruikt om uitgaand verkeer van een AKS-cluster te vergrendelen. Daarom hebben AKS-clusters standaard onbeperkte toegang tot uitgaand (uitgaand) internet. Met dit netwerktoegangsniveau kunnen knooppunten en services die u uitvoert toegang krijgen tot externe resources, indien nodig.

In een productieomgeving moet communicatie met een Kubernetes-cluster echter worden beveiligd om te voorkomen dat gegevens exfiltratie samen met andere beveiligingsproblemen worden voorkomen. Al het binnenkomende en uitgaande netwerkverkeer moet worden bewaakt en beheerd op basis van een set beveiligingsregels. Als u dit wilt doen, moet u uitgaand verkeer beperken, maar een beperkt aantal poorten en adressen moet toegankelijk blijven om goede clusteronderhoudstaken te onderhouden en te voldoen aan deze uitgaande afhankelijkheden die eerder zijn vermeld.

De eenvoudigste oplossing maakt gebruik van een firewallapparaat dat uitgaand verkeer kan beheren op basis van domeinnamen. Een firewall brengt doorgaans een barrière tot stand tussen een vertrouwd netwerk en een niet-vertrouwd netwerk, zoals internet. Azure Firewall kan bijvoorbeeld uitgaand HTTP- en HTTPS-verkeer beperken op basis van de FQDN-naam van de bestemming, zodat u nauwkeurig uitgaand verkeer kunt beheren, maar tegelijkertijd kunt u toegang bieden tot de FQDN's die de uitgaande afhankelijkheden van een AKS-cluster omvatten (iets dat NSG's niet kunnen doen). Op dezelfde manier kunt u inkomend verkeer beheren en de beveiliging verbeteren door filteren op basis van bedreigingsinformatie in te schakelen op een Azure Firewall die is geïmplementeerd in een gedeeld perimeternetwerk. Deze filtering kan waarschuwingen bieden en verkeer naar en van bekende schadelijke IP-adressen en domeinen weigeren.

Bekijk de volgende video van Abhinav Sriram voor een kort overzicht van hoe dit werkt in de praktijk op een voorbeeldomgeving:

U kunt een zip-bestand downloaden vanuit het Microsoft Downloadcentrum dat een bash-scriptbestand en een YAML-bestand bevat om automatisch de voorbeeldomgeving te configureren die in de video wordt gebruikt. Azure Firewall wordt geconfigureerd om inkomend en uitgaand verkeer te beveiligen. In de volgende handleidingen wordt elke stap van het script uitgebreider beschreven, zodat u een aangepaste configuratie kunt instellen.

In het volgende diagram ziet u de voorbeeldomgeving uit de video die het script en de handleiding configureren:

Diagram van een K S-cluster met Azure Firewall voor inkomend uitgaand filteren.

Er is één verschil tussen het script en de volgende handleiding. Het script maakt gebruik van beheerde identiteiten, maar in de handleiding wordt een service-principal gebruikt. Hier ziet u twee verschillende manieren om een identiteit te maken voor het beheren en maken van clusterbronnen.

Uitgaand verkeer beperken met behulp van Azure Firewall

Configuratie instellen via omgevingsvariabelen

Definieer een set omgevingsvariabelen die moeten worden gebruikt bij het maken van resources.

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"

Een virtueel netwerk met meerdere subnetten maken

Maak een virtueel netwerk met twee afzonderlijke subnetten, één voor het cluster, één voor de firewall. U kunt er desgewenst ook een maken voor inkomend verkeer van interne services.

Lege netwerktopologie

Maak een resourcegroep om alle resources op te slaan.

# Create Resource Group

az group create --name $RG --location $LOC

Maak een virtueel netwerk met twee subnetten om het AKS-cluster en de Azure Firewall te hosten. Elk heeft een eigen subnet. Laten we beginnen met het AKS-netwerk.

# 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 cannot be changed)

az network vnet subnet create \
    --resource-group $RG \
    --vnet-name $VNET_NAME \
    --name $FWSUBNET_NAME \
    --address-prefix 10.42.2.0/24

Een Azure Firewall maken en instellen met een UDR

Regels voor binnenkomend en uitgaand verkeer van Azure Firewall moeten worden geconfigureerd. Het belangrijkste doel van de firewall is om organisaties in staat te stellen gedetailleerde regels voor inkomend en uitgaand verkeer van en naar het AKS-cluster te configureren.

Firewall en UDR

Belangrijk

Als uw cluster of toepassing een groot aantal uitgaande verbindingen maakt die zijn omgeleid naar dezelfde of kleine subset van bestemmingen, hebt u mogelijk meer front-end-IP-adressen van de firewall nodig om te voorkomen dat de poorten per front-end-IP worden beperkt. Zie hier voor meer informatie over het maken van een Azure-firewall met meerdere IP-adressen

Maak een standaard-SKU openbare IP-resource die wordt gebruikt als het front-endadres van Azure Firewall.

az network public-ip create -g $RG -n $FWPUBLICIP_NAME -l $LOC --sku "Standard"

Registreer de preview cli-extensie om een Azure Firewall te maken.

# Install Azure Firewall preview CLI extension

az extension add --name azure-firewall

# Deploy Azure Firewall

az network firewall create -g $RG -n $FWNAME -l $LOC --enable-dns-proxy true

Het EERDER gemaakte IP-adres kan nu worden toegewezen aan de front-end van de firewall.

Notitie

Het instellen van het openbare IP-adres naar de Azure Firewall kan enkele minuten duren. Als u de FQDN wilt gebruiken voor netwerkregels, moet de DNS-proxy zijn ingeschakeld. Als de firewall is ingeschakeld, luistert de firewall op poort 53 en worden DNS-aanvragen doorgestuurd naar de DNS-server die u eerder hebt opgegeven. Hierdoor kan de firewall die FQDN automatisch vertalen.

# Configure Firewall IP Config

az network firewall ip-config create -g $RG -f $FWNAME -n $FWIPCONFIG_NAME --public-ip-address $FWPUBLICIP_NAME --vnet-name $VNET_NAME

Wanneer de vorige opdracht is geslaagd, slaat u het front-end-IP-adres van de firewall op voor de configuratie later.

# Capture Firewall IP Address for Later Use

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)

Notitie

Als u beveiligde toegang gebruikt tot de AKS-API-server met geautoriseerde IP-adresbereiken, moet u het openbare IP-adres van de firewall toevoegen aan het geautoriseerde IP-bereik.

Een UDR maken met een hop naar Azure Firewall

Azure routeert automatisch verkeer tussen Azure-subnetten, virtuele netwerken en on-premises netwerken. Als u een van de standaardroutering van Azure wilt wijzigen, doet u dit door een routetabel te maken.

Maak een lege routetabel die moet worden gekoppeld aan een bepaald subnet. In de routetabel wordt de volgende hop gedefinieerd als de Azure Firewall die u eerder hebt gemaakt. Elk subnet kan zijn gekoppeld aan geen enkele of één routetabel.

# Create UDR and add a route for Azure Firewall

az network route-table create -g $RG -l $LOC --name $FWROUTE_TABLE_NAME
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

Zie de documentatie voor routetabellen voor virtuele netwerken over hoe u de standaardsysteemroutes van Azure kunt overschrijven of meer routes kunt toevoegen aan de routetabel van een subnet.

Firewallregels toevoegen

Notitie

Voor toepassingen buiten de kube-system- of gatekeeper-system-naamruimten die met de API-server moeten communiceren, is een extra netwerkregel vereist om TCP-communicatie met poort 443 toe te staan voor het IP-adres van de API-server, naast het toevoegen van een toepassingsregel voor fqdn-tag AzureKubernetesService.

U kunt de volgende drie netwerkregels gebruiken om uw firewall te configureren. Mogelijk moet u deze regels aanpassen op basis van uw implementatie. Met de eerste regel is toegang tot poort 9000 via TCP toegestaan. De tweede regel biedt toegang tot poort 1194 en 123 via UDP. Beide regels staan alleen verkeer toe dat is bestemd voor de Azure Region CIDR die we gebruiken, in dit geval VS - oost.

Ten slotte voegen we een derde netwerkregel toe die poort 123 opent naar een FQDN van een internettijdserver (bijvoorbeeld:ntp.ubuntu.com) via UDP. Het toevoegen van een FQDN als netwerkregel is een van de specifieke functies van Azure Firewall en u moet deze aanpassen wanneer u uw eigen opties gebruikt.

Na het instellen van de netwerkregels voegen we ook een toepassingsregel toe met behulp van de AzureKubernetesService benodigde FQDN's die toegankelijk zijn via TCP-poort 443 en poort 80. Daarnaast moet u mogelijk meer netwerk- en toepassingsregels configureren op basis van uw implementatie. Zie Regels voor uitgaand netwerk en FQDN voor AKS-clusters (Azure Kubernetes Service) voor meer informatie.

FW-netwerkregels toevoegen

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

FW-toepassingsregels toevoegen

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

Raadpleeg de documentatie van Azure Firewall voor meer informatie over de Azure Firewall-service.

De routetabel koppelen aan AKS

Als u het cluster aan de firewall wilt koppelen, moet het toegewezen subnet voor het subnet van het cluster verwijzen naar de routetabel die u eerder hebt gemaakt. U kunt een koppeling uitvoeren door een opdracht uit te geven aan het virtuele netwerk met zowel het cluster als de firewall om de routetabel van het subnet van het cluster bij te werken.

# Associate route table with next hop to Firewall to the AKS subnet

az network vnet subnet update -g $RG --vnet-name $VNET_NAME --name $AKSSUBNET_NAME --route-table $FWROUTE_TABLE_NAME

AKS implementeren met uitgaand type UDR in het bestaande netwerk

Nu kan een AKS-cluster worden geïmplementeerd in het bestaande virtuele netwerk. U gebruikt ook uitgaand type userDefinedRouting, deze functie zorgt ervoor dat uitgaand verkeer wordt gedwongen via de firewall en er geen andere uitgaande paden bestaan (standaard kan het uitgaande type load balancer worden gebruikt).

aks-deploy

Het doelsubnet waarmee moet worden geïmplementeerd, wordt gedefinieerd met de omgevingsvariabele. $SUBNETID In de vorige stappen hebben we de $SUBNETID variabele niet gedefinieerd. Als u de waarde voor de subnet-id wilt instellen, kunt u de volgende opdracht gebruiken:

SUBNETID=$(az network vnet subnet show -g $RG --vnet-name $VNET_NAME --name $AKSSUBNET_NAME --query id -o tsv)

U definieert het uitgaande type voor het gebruik van de UDR die al bestaat op het subnet. Met deze configuratie kan AKS de installatie en IP-inrichting voor de load balancer overslaan.

Belangrijk

Zie uitgaand type UDR voor meer informatie over uitgaande type UDR, inclusief beperkingen.

Tip

Aanvullende functies kunnen worden toegevoegd aan de clusterimplementatie, zoals een privécluster of het wijzigen van de SKU van het besturingssysteem.

De AKS-functie voor geautoriseerde IP-adresbereiken van de API-server kan worden toegevoegd om de toegang van de API-server tot alleen het openbare eindpunt van de firewall te beperken. De functie geautoriseerde IP-bereiken wordt in het diagram aangeduid als optioneel. Wanneer u de functie geautoriseerd IP-bereik inschakelt om de toegang tot DE API-server te beperken, moeten uw ontwikkelhulpprogramma's een jumpbox van het virtuele netwerk van de firewall gebruiken of moet u alle eindpunten voor ontwikkelaars toevoegen aan het geautoriseerde IP-bereik.

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

Notitie

Als u uw eigen VNet en routetabel met kubenet de netwerkinvoegtoepassing wilt maken en gebruiken, moet u een door de gebruiker toegewezen beheerde identiteit gebruiken. Voor een door het systeem toegewezen beheerde identiteit kunnen we de id-id niet ophalen voordat we een cluster maken, waardoor een vertraging in de roltoewijzing van kracht wordt.

Voor het maken en gebruiken van uw eigen VNet en routetabel met azure netwerkinvoegtoepassing worden zowel door het systeem toegewezen als door de gebruiker toegewezen beheerde identiteiten ondersteund.

Ontwikkelaarstoegang tot de API-server inschakelen

Als u geautoriseerde IP-bereiken voor het cluster in de vorige stap hebt gebruikt, moet u de IP-adressen voor ontwikkelaarshulpprogramma's toevoegen aan de AKS-clusterlijst met goedgekeurde IP-bereiken om vanaf daar toegang te krijgen tot de API-server. Een andere optie is het configureren van een jumpbox met de benodigde hulpprogramma's in een afzonderlijk subnet in het virtuele netwerk van de firewall.

Voeg nog een IP-adres toe aan de goedgekeurde bereiken met de volgende opdracht

# Retrieve your IP address
CURRENT_IP=$(dig @resolver1.opendns.com ANY myip.opendns.com +short)

# Add to AKS approved list
az aks update -g $RG -n $AKSNAME --api-server-authorized-ip-ranges $CURRENT_IP/32

Gebruik de opdracht az aks get-credentials om verbinding te maken kubectl met uw zojuist gemaakte Kubernetes-cluster.

az aks get-credentials -g $RG -n $AKSNAME

Inkomend verkeer beperken met behulp van Azure Firewall

U kunt nu beginnen met het beschikbaar maken van services en het implementeren van toepassingen in dit cluster. In dit voorbeeld maken we een openbare service beschikbaar, maar u kunt er ook voor kiezen om een interne service beschikbaar te maken via een interne load balancer.

DNAT van openbare dienst

Implementeer de Toepassing van de Azure-stem-app door de volgende yaml te kopiëren naar een bestand met de naam 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/azuredocs/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/azuredocs/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/azuredocs/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

Implementeer de service door het volgende uit te voeren:

kubectl apply -f example.yaml

Een DNAT-regel toevoegen aan Azure Firewall

Belangrijk

Wanneer u Azure Firewall gebruikt om uitgaand verkeer te beperken en een door de gebruiker gedefinieerde route (UDR) te maken om al het uitgaand verkeer af te dwingen, moet u ervoor zorgen dat u een geschikte DNAT-regel in Firewall maakt om inkomend verkeer correct toe te staan. Als u Azure Firewall met een UDR gebruikt, wordt de installatie van inkomend verkeer verbroken vanwege asymmetrische routering. (Het probleem treedt op als het AKS-subnet een standaardroute heeft die naar het privé-IP-adres van de firewall gaat, maar u een openbare load balancer gebruikt: inkomend verkeer of kubernetes-service van het type: LoadBalancer). In dit geval wordt het binnenkomende load balancer-verkeer ontvangen via het openbare IP-adres, maar het retourpad gaat via het privé-IP-adres van de firewall. Omdat de firewall stateful is, wordt het geretourneerde pakket verwijderd omdat de firewall niet op de hoogte is van een bestaande sessie. Zie Azure Firewall integreren met Azure Standard Load Balancer voor meer informatie over het integreren van Azure Firewall met uw inkomend verkeer of service load balancer.

Als u binnenkomende connectiviteit wilt configureren, moet een DNAT-regel worden geschreven naar de Azure Firewall. Als u de connectiviteit met uw cluster wilt testen, wordt er een regel gedefinieerd voor het openbare IP-adres van de firewall om te routeren naar het interne IP-adres dat wordt weergegeven door de interne service.

Het doeladres kan worden aangepast omdat het de poort op de firewall is die moet worden geopend. Het vertaalde adres moet het IP-adres van de interne load balancer zijn. De vertaalde poort moet de weergegeven poort voor uw Kubernetes-service zijn.

U moet het interne IP-adres opgeven dat is toegewezen aan de load balancer die is gemaakt door de Kubernetes-service. Haal het adres op door het volgende uit te voeren:

kubectl get services

Het benodigde IP-adres wordt vermeld in de kolom EXTERNAL-IP, vergelijkbaar met de volgende.

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

Haal het IP-adres van de service op door het volgende uit te voeren:

SERVICE_IP=$(kubectl get svc voting-app -o jsonpath='{.status.loadBalancer.ingress[*].ip}')

Voeg de NAT-regel toe door het volgende uit te voeren:

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

Connectiviteit valideren

Navigeer naar het front-end-IP-adres van de Azure Firewall in een browser om de connectiviteit te valideren.

U ziet nu de AKS-stem-app. In dit voorbeeld was 52.253.228.132het openbare IP-adres van de firewall.

Schermopname van de A K S Voting App met knoppen voor Katten, Honden en Opnieuw instellen en totalen.

Resources opschonen

Als u Azure-resources wilt opschonen, verwijdert u de AKS-resourcegroep.

az group delete -g $RG

Volgende stappen