Beheer het verkeer van het verkeer voor het verkeer voor clusterknooppunten in Azure Kubernetes Service (AKS)

Dit artikel bevat de benodigde details waarmee u uitgaand verkeer van uw Azure Kubernetes Service (AKS) kunt beveiligen. Het bevat de clustervereisten voor een basis-AKS-implementatie en aanvullende vereisten voor optionele addons en functies. Er wordt aan het einde een voorbeeld gegeven voor het configureren vandeze vereisten met Azure Firewall. U kunt deze informatie echter toepassen op elke uitgaande beperkingsmethode of elk apparaat.

Achtergrond

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). Deze eindpunten zijn vereist om de knooppunten te laten communiceren met de API-server of om kernonderdelen van kubernetes-clusters en beveiligingsupdates voor knooppunten te downloaden en installeren. Het cluster moet bijvoorbeeld installatie van basissysteemcontainers uit Microsoft Container Registry (MCR).

De uitgaande AKS-afhankelijkheden worden bijna volledig gedefinieerd met FQDN's, die geen statische adressen achter zich hebben. Het ontbreken van statische adressen betekent dat netwerkbeveiligingsgroepen niet kunnen worden gebruikt om uitgaand verkeer van een AKS-cluster te vergrendelen.

Standaard hebben AKS-clusters onbeperkte uitgaande (uitgaande) internettoegang. Met dit niveau van netwerktoegang kunnen knooppunten en services die u hebt uitgevoerd, naar behoefte toegang krijgen tot externe resources. Als u het toegangsverkeer wilt beperken, moet een beperkt aantal poorten en adressen toegankelijk zijn voor het onderhouden van goede clusteronderhoudstaken. De eenvoudigste oplossing voor het beveiligen van uitgaande adressen is het gebruik van een firewallapparaat dat uitgaand verkeer kan beheren op basis van domeinnamen. Azure Firewall kan bijvoorbeeld uitgaand HTTP- en HTTPS-verkeer beperken op basis van de FQDN van de bestemming. U kunt ook de firewall en beveiligingsregels van uw voorkeur configureren om deze vereiste poorten en adressen toe te staan.

Belangrijk

Dit document bevat alleen informatie over het vergrendelen van het verkeer dat het AKS-subnet verlaat. AKS heeft standaard geen vereisten voor ingress. Het blokkeren van intern subnetverkeer met behulp van netwerkbeveiligingsgroepen (NSG's) en firewalls wordt niet ondersteund. Gebruik Netwerkbeleid om het verkeer binnen het cluster te controleren en te blokkeren.

Vereiste uitgaande netwerkregels en FQDN's voor AKS-clusters

De volgende netwerk- en FQDN-/toepassingsregels zijn vereist voor een AKS-cluster. U kunt deze gebruiken als u een andere oplossing dan een Azure Firewall.

  • IP-adresafhankelijkheden zijn voor niet-HTTP/S-verkeer (zowel TCP- als UDP-verkeer)
  • FQDN HTTP/HTTPS-eindpunten kunnen in uw firewallapparaat worden geplaatst.
  • HTTP/HTTPS-eindpunten met jokertekens zijn afhankelijkheden die met uw AKS-cluster kunnen variëren op basis van een aantal kwalificaties.
  • AKS maakt gebruik van een toegangscontroller om de FQDN als een omgevingsvariabele te injecteren in alle implementaties onder kube-system en gatekeeper-system, die ervoor zorgt dat alle systeemcommunicatie tussen knooppunten en DE API-server gebruikmaakt van de API-server-FQDN en niet het IP-adres van de API-server.
  • Als u een app of oplossing hebt die moet communiceren met de API-server, moet u een extra netwerkregel toevoegen om TCP-communicatie met poort 443 van het IP-adres van uw API-server toe te staan.
  • In zeldzame gevallen kan het IP-adres van uw API-server worden gewijzigd als er een onderhoudsbewerking wordt uitgevoerd. Geplande onderhoudsbewerkingen die het IP-adres van de API-server kunnen wijzigen, worden altijd vooraf gecommuniceerd.

Wereldwijd vereiste netwerkregels voor Azure

De vereiste netwerkregels en IP-adresafhankelijkheden zijn:

Doel-eindpunt Protocol Poort Gebruik
*:1194
Of
ServiceTag - AzureCloud.<Region>:1194
Of
Regionale CIDR's - RegionCIDRs:1194
Of
APIServerPublicIP:1194 (only known after cluster creation)
UDP 1194 Voor beveiligde communicatie via tunneling tussen de knooppunten en het besturingsvlak. Dit is niet vereist voor privéclusters
*:9000
Of
ServiceTag - AzureCloud.<Region>:9000
Of
Regionale CIDR's - RegionCIDRs:9000
Of
APIServerPublicIP:9000 (only known after cluster creation)
TCP 9000 Voor beveiligde communicatie via tunneling tussen de knooppunten en het besturingsvlak. Dit is niet vereist voor privéclusters
*:123 of ntp.ubuntu.com:123 (als u Azure Firewall netwerkregels) UDP 123 Vereist voor NTP-tijdsynchronisatie (Network Time Protocol) op Linux-knooppunten.
CustomDNSIP:53 (if using custom DNS servers) UDP 53 Als u aangepaste DNS-servers gebruikt, moet u ervoor zorgen dat ze toegankelijk zijn voor de clusterknooppunten.
APIServerPublicIP:443 (if running pods/deployments that access the API Server) TCP 443 Vereist als pods/implementaties worden uitgevoerd die toegang hebben tot de API-server, gebruiken deze pods/implementaties het API-IP-adres. Dit is niet vereist voor privéclusters

Azure Global required FQDN /application rules (Wereldwijd vereiste FQDN-FQDN van Azure/ toepassingsregels)

De volgende FQDN-/toepassingsregels zijn vereist:

Doel-FQDN Poort Gebruik
*.hcp.<location>.azmk8s.io HTTPS:443 Vereist voor communicatie tussen knooppunt<-> API-server. Vervang <location> door de regio waarin uw AKS-cluster is geïmplementeerd.
mcr.microsoft.com HTTPS:443 Vereist voor toegang tot afbeeldingen in Microsoft Container Registry (MCR). Dit register bevat eigen afbeeldingen/grafieken (bijvoorbeeld coreDNS, enzovoort). Deze afbeeldingen zijn vereist voor het correct maken en functioneren van het cluster, inclusief schaal- en upgradebewerkingen.
*.data.mcr.microsoft.com HTTPS:443 Vereist voor MCR opslag die wordt uitgevoerd door het Azure-netwerk voor contentlevering (CDN).
management.azure.com HTTPS:443 Vereist voor Kubernetes-bewerkingen met de Azure-API.
login.microsoftonline.com HTTPS:443 Vereist voor Azure Active Directory verificatie.
packages.microsoft.com HTTPS:443 Dit adres is de opslagplaats voor Microsoft-pakketten die wordt gebruikt voor apt-get-bewerkingen in de cache. Voorbeeldpakketten zijn Moby, PowerShell en Azure CLI.
acs-mirror.azureedge.net HTTPS:443 Dit adres is voor de opslagplaats die vereist is voor het downloaden en installeren van vereiste binaire bestanden, zoals kubenet en Azure CNI.

Azure China 21Vianet netwerkregels maken

De vereiste netwerkregels en IP-adresafhankelijkheden zijn:

Doel-eindpunt Protocol Poort Gebruik
*:1194
Of
ServiceTag - AzureCloud.Region:1194
Of
Regionale CIDR's - RegionCIDRs:1194
Of
APIServerPublicIP:1194 (only known after cluster creation)
UDP 1194 Voor beveiligde communicatie via tunneling tussen de knooppunten en het besturingsvlak.
*:9000
Of
ServiceTag - AzureCloud.<Region>:9000
Of
Regionale CIDR's - RegionCIDRs:9000
Of
APIServerPublicIP:9000 (only known after cluster creation)
TCP 9000 Voor beveiligde communicatie via tunneling tussen de knooppunten en het besturingsvlak.
*:22
Of
ServiceTag - AzureCloud.<Region>:22
Of
Regionale CIDR's - RegionCIDRs:22
Of
APIServerPublicIP:22 (only known after cluster creation)
TCP 22 Voor beveiligde communicatie via tunneling tussen de knooppunten en het besturingsvlak.
*:123 of ntp.ubuntu.com:123 (als u Azure Firewall netwerkregels) UDP 123 Vereist voor NTP-tijdsynchronisatie (Network Time Protocol) op Linux-knooppunten.
CustomDNSIP:53 (if using custom DNS servers) UDP 53 Als u aangepaste DNS-servers gebruikt, moet u ervoor zorgen dat ze toegankelijk zijn voor de clusterknooppunten.
APIServerPublicIP:443 (if running pods/deployments that access the API Server) TCP 443 Vereist als pods/implementaties worden uitgevoerd die toegang hebben tot de API-server, gebruiken die pods/implementaties het API-IP-adres.

Azure China 21Vianet FQDN/toepassingsregels maken

De volgende FQDN-/toepassingsregels zijn vereist:

Doel-FQDN Poort Gebruik
*.hcp.<location>.cx.prod.service.azk8s.cn HTTPS:443 Vereist voor communicatie tussen knooppunt<-> API-server. Vervang <location> door de regio waarin uw AKS-cluster is geïmplementeerd.
*.tun.<location>.cx.prod.service.azk8s.cn HTTPS:443 Vereist voor communicatie tussen knooppunt<-> API-server. Vervang <location> door de regio waarin uw AKS-cluster is geïmplementeerd.
mcr.microsoft.com HTTPS:443 Vereist voor toegang tot afbeeldingen in Microsoft Container Registry (MCR). Dit register bevat eigen afbeeldingen/grafieken (bijvoorbeeld coreDNS, enzovoort). Deze afbeeldingen zijn vereist voor het correct maken en functioneren van het cluster, inclusief schaal- en upgradebewerkingen.
.data.mcr.microsoft.com HTTPS:443 Vereist voor MCR opslag die wordt uitgevoerd door de Azure Content Delivery Network (CDN).
management.chinacloudapi.cn HTTPS:443 Vereist voor Kubernetes-bewerkingen met de Azure-API.
login.chinacloudapi.cn HTTPS:443 Vereist voor Azure Active Directory verificatie.
packages.microsoft.com HTTPS:443 Dit adres is de opslagplaats voor Microsoft-pakketten die wordt gebruikt voor apt-get-bewerkingen in de cache. Voorbeeldpakketten zijn Moby, PowerShell en Azure CLI.
*.azk8s.cn HTTPS:443 Dit adres is voor de opslagplaats die vereist is voor het downloaden en installeren van vereiste binaire bestanden, zoals kubenet en Azure CNI.

Vereiste netwerkregels voor Azure voor de Amerikaanse overheid

De vereiste netwerkregels en IP-adresafhankelijkheden zijn:

Doel-eindpunt Protocol Poort Gebruik
*:1194
Of
ServiceTag - AzureCloud.<Region>:1194
Of
Regionale CIDR's - RegionCIDRs:1194
Of
APIServerPublicIP:1194 (only known after cluster creation)
UDP 1194 Voor beveiligde communicatie via tunneling tussen de knooppunten en het besturingsvlak.
*:9000
Of
ServiceTag - AzureCloud.<Region>:9000
Of
Regionale CIDR's - RegionCIDRs:9000
Of
APIServerPublicIP:9000 (only known after cluster creation)
TCP 9000 Voor beveiligde communicatie via tunneling tussen de knooppunten en het besturingsvlak.
*:123 of ntp.ubuntu.com:123 (als u Azure Firewall netwerkregels) UDP 123 Vereist voor NTP-tijdsynchronisatie (Network Time Protocol) op Linux-knooppunten.
CustomDNSIP:53 (if using custom DNS servers) UDP 53 Als u aangepaste DNS-servers gebruikt, moet u ervoor zorgen dat ze toegankelijk zijn voor de clusterknooppunten.
APIServerPublicIP:443 (if running pods/deployments that access the API Server) TCP 443 Vereist als pods/implementaties worden uitgevoerd die toegang hebben tot de API-server, gebruiken deze pods/implementaties het API-IP-adres.

Vereiste FQDN-/toepassingsregels voor Azure voor de Amerikaanse overheid

De volgende FQDN-/toepassingsregels zijn vereist:

Doel-FQDN Poort Gebruik
*.hcp.<location>.cx.aks.containerservice.azure.us HTTPS:443 Vereist voor communicatie tussen knooppunt<-> API-server. Vervang <location> door de regio waarin uw AKS-cluster is geïmplementeerd.
mcr.microsoft.com HTTPS:443 Vereist voor toegang tot afbeeldingen in Microsoft Container Registry (MCR). Dit register bevat eigen afbeeldingen/grafieken (bijvoorbeeld coreDNS, enzovoort). Deze afbeeldingen zijn vereist voor het correct maken en functioneren van het cluster, inclusief schaal- en upgradebewerkingen.
*.data.mcr.microsoft.com HTTPS:443 Vereist voor MCR opslag die wordt back-by van het Azure-netwerk voor contentlevering (CDN).
management.usgovcloudapi.net HTTPS:443 Vereist voor Kubernetes-bewerkingen met de Azure-API.
login.microsoftonline.us HTTPS:443 Vereist voor Azure Active Directory verificatie.
packages.microsoft.com HTTPS:443 Dit adres is de opslagplaats voor Microsoft-pakketten die wordt gebruikt voor apt-get-bewerkingen in de cache. Voorbeeldpakketten zijn Moby, PowerShell en Azure CLI.
acs-mirror.azureedge.net HTTPS:443 Dit adres is voor de opslagplaats die vereist is voor het installeren van vereiste binaire bestanden, zoals kubenet en Azure CNI.

De volgende FQDN-/toepassingsregels zijn optioneel, maar aanbevolen voor AKS-clusters:

Doel-FQDN Poort Gebruik
security.ubuntu.com, azure.archive.ubuntu.com, changelogs.ubuntu.com HTTP:80 Met dit adres kunnen de Linux-clusterknooppunten de vereiste beveiligingspatches en updates downloaden.

Als u ervoor kiest om deze FQDN's te blokkeren of niet toe te staan, ontvangen de knooppunten alleen updates van het besturingssysteem wanneer u een upgrade van de knooppuntafbeelding of clusterupgrade hebt uitgevoerd.

AKS-clusters met GPU

Vereiste FQDN/toepassingsregels

De volgende FQDN-/toepassingsregels zijn vereist voor AKS-clusters met GPU:

Doel-FQDN Poort Gebruik
nvidia.github.io HTTPS:443 Dit adres wordt gebruikt voor de juiste installatie en bewerking van stuurprogramma's op GPU-knooppunten.
us.download.nvidia.com HTTPS:443 Dit adres wordt gebruikt voor de juiste installatie en bewerking van stuurprogramma's op GPU-knooppunten.
apt.dockerproject.org HTTPS:443 Dit adres wordt gebruikt voor de juiste installatie en bewerking van stuurprogramma's op GPU-knooppunten.

Windows servergebaseerde knooppuntgroepen

Vereiste FQDN/toepassingsregels

De volgende FQDN-/toepassingsregels zijn vereist voor het gebruik van Windows servergebaseerde knooppuntgroepen:

Doel-FQDN Poort Gebruik
onegetcdn.azureedge.net, go.microsoft.com HTTPS:443 Binaire windows-bestanden installeren
*.mp.microsoft.com, www.msftconnecttest.com, ctldl.windowsupdate.com HTTP:80 Binaire windows-bestanden installeren

AKS-addons en integraties

Azure Monitor voor containers

Er zijn twee opties om toegang te bieden tot Azure Monitor voor containers. U kunt de Azure Monitor ServiceTag toestaan of toegang verlenen tot de vereiste FQDN-/toepassingsregels.

Vereiste netwerkregels

De volgende FQDN-/toepassingsregels zijn vereist:

Doel-eindpunt Protocol Poort Gebruik
ServiceTag - AzureMonitor:443 TCP 443 Dit eindpunt wordt gebruikt voor het verzenden van metrische gegevens en logboeken naar Azure Monitor en Log Analytics.

Vereiste FQDN/toepassingsregels

De volgende FQDN-/toepassingsregels zijn vereist voor AKS-clusters Azure Monitor voor containers zijn ingeschakeld:

FQDN Poort Gebruik
dc.services.visualstudio.com HTTPS:443 Dit eindpunt wordt gebruikt voor metrische gegevens en het bewaken van telemetriegegevens met behulp Azure Monitor.
*.ods.opinsights.azure.com HTTPS:443 Dit eindpunt wordt gebruikt door Azure Monitor voor het opnemen van logboekanalysegegevens.
*.oms.opinsights.azure.com HTTPS:443 Dit eindpunt wordt gebruikt door omsagent, dat wordt gebruikt om de Log Analytics-service te verifiëren.
*.monitoring.azure.com HTTPS:443 Dit eindpunt wordt gebruikt voor het verzenden van metrische gegevens naar Azure Monitor.

Azure Policy

Vereiste FQDN/toepassingsregels

De volgende FQDN-/toepassingsregels zijn vereist voor AKS-clusters Azure Policy ingeschakeld.

FQDN Poort Gebruik
data.policy.core.windows.net HTTPS:443 Dit adres wordt gebruikt om het Kubernetes-beleid op te halen en om de nalevingsstatus van het cluster te rapporteren aan de beleidsservice.
store.policy.core.windows.net HTTPS:443 Dit adres wordt gebruikt om de Gatekeeper-artefacten van ingebouwde beleidsregels op te halen.
dc.services.visualstudio.com HTTPS:443 Azure Policy-invoegtoepassingen die telemetriegegevens naar het eindpunt van Applications Insights verzendt.

Azure China 21Vianet FQDN/toepassingsregels maken

De volgende FQDN-/toepassingsregels zijn vereist voor AKS-clusters Azure Policy ingeschakeld.

FQDN Poort Gebruik
data.policy.azure.cn HTTPS:443 Dit adres wordt gebruikt om het Kubernetes-beleid op te halen en om de nalevingsstatus van het cluster te rapporteren aan de beleidsservice.
store.policy.azure.cn HTTPS:443 Dit adres wordt gebruikt om de Gatekeeper-artefacten van ingebouwde beleidsregels op te halen.

Vereiste FQDN/toepassingsregels voor Azure US Government

De volgende FQDN-/toepassingsregels zijn vereist voor AKS-clusters Azure Policy ingeschakeld.

FQDN Poort Gebruik
data.policy.azure.us HTTPS:443 Dit adres wordt gebruikt om het Kubernetes-beleid op te halen en om de nalevingsstatus van het cluster te rapporteren aan de beleidsservice.
store.policy.azure.us HTTPS:443 Dit adres wordt gebruikt om de Gatekeeper-artefacten van ingebouwde beleidsregels op te halen.

Clusterextensies

Vereiste FQDN/toepassingsregels

De volgende FQDN-/toepassingsregels zijn vereist voor het gebruik van clusterextensies op AKS-clusters.

FQDN Poort Gebruik
<region>.dp.kubernetesconfiguration.azure.com HTTPS:443 Dit adres wordt gebruikt om configuratiegegevens op te halen uit de service Clusterextensies en om de extensiestatus naar de service te rapporteren.
mcr.microsoft.com, *.data.mcr.microsoft.com HTTPS:443 Dit adres is vereist om containerafbeeldingen op te halen voor het installeren van clusterextensieagents op een AKS-cluster.

Vereiste FQDN/toepassingsregels voor Azure US Government

De volgende FQDN-/toepassingsregels zijn vereist voor het gebruik van clusterextensies op AKS-clusters.

FQDN Poort Gebruik
<region>.dp.kubernetesconfiguration.azure.us HTTPS:443 Dit adres wordt gebruikt om configuratiegegevens op te halen uit de service Clusterextensies en om de extensiestatus naar de service te rapporteren.
mcr.microsoft.com, *.data.mcr.microsoft.com HTTPS:443 Dit adres is vereist om containerafbeeldingen op te halen voor het installeren van clusterextensieagents op een AKS-cluster.

Het verkeer voor verkeer dat uit de omgeving komt beperken met behulp van Azure Firewall

Azure Firewall biedt een Azure Kubernetes Service ( AzureKubernetesService ) FQDN-tag om deze configuratie te vereenvoudigen.

Notitie

De FQDN-tag bevat alle hierboven vermelde FQDN's en wordt automatisch up-to-date gehouden.

We raden u aan minimaal 20 front-end-IP's op de Azure Firewall voor productiescenario's te gebruiken om te voorkomen dat er problemen met SNAT-poortuitputting zijn.

Hieronder vindt u een voorbeeldarchitectuur van de implementatie:

Vergrendelde topologie

  • Openbaar toegangsgressie wordt gedwongen om door firewallfilters te stromen
    • AKS-agentknooppunten worden geïsoleerd in een toegewezen subnet.
    • Azure Firewall wordt geïmplementeerd in een eigen subnet.
    • Met een DNAT-regel wordt het openbare IP-adres van de FW omgezet in het IP-adres van de LB-front-end.
  • Uitgaande aanvragen starten vanaf agentknooppunten naar het interne IP Azure Firewall met behulp van een door de gebruiker gedefinieerde route
    • Aanvragen van AKS-agentknooppunten volgen een UDR die is geplaatst op het subnet waar het AKS-cluster in is geïmplementeerd.
    • Azure Firewall het virtuele netwerk uit vanaf een openbare IP-front-end
    • Toegang tot het openbare internet of andere Azure-services loopt van en naar het front-end-IP-adres van de firewall
    • Toegang tot het AKS-besturingsvlak wordt optioneel beveiligd door geautoriseerde IP-bereiken van de API-server,waaronder het openbare front-end-IP-adres van de firewall.
  • Intern verkeer

In de onderstaande stappen wordt gebruik gemaakt van de FQDN-tag van Azure Firewall om het uitgaande verkeer van het AKS-cluster te beperken en een voorbeeld te geven van het configureren van openbaar inkomende verkeer via de AzureKubernetesService 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

Een virtueel netwerk inrichten met twee afzonderlijke subnetten, één voor het cluster, één voor de firewall. Desgewenst kunt u er ook een maken voor intern service-ingress.

Lege netwerktopologie

Maak een resourcegroep voor alle resources.

# Create Resource Group

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

Maak een virtueel netwerk met twee subnetten voor het hosten van het AKS-cluster en de Azure Firewall. 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

Azure Firewall regels voor binnenkomende en uitgaande verkeer moeten worden geconfigureerd. Het belangrijkste doel van de firewall is om organisaties in staat te stellen gedetailleerde regels voor in- en uitverkeer naar en uit 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 een kleine subset van bestemmingen, hebt u mogelijk meer front-end-IP's voor de firewall nodig om te voorkomen dat de poorten per front-end-IP worden uitbesteed. Zie hier voor meer informatie over het maken van een Azure-firewall met meerdere IP's

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

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

Registreer de preview-cli-extensie om een nieuwe Azure Firewall.

# 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 IP-adres dat u eerder hebt gemaakt, kan nu worden toegewezen aan de front-end van de firewall.

Notitie

Het instellen van het openbare IP-adres voor Azure Firewall kan enkele minuten duren. Als u FQDN wilt gebruiken voor netwerkregels, moet de DNS-proxy zijn ingeschakeld. Wanneer deze is ingeschakeld, luistert de firewall op poort 53 en worden DNS-aanvragen doorgestuurd naar de DNS-server die hierboven is 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, moet u het front-end-IP-adres van de firewall later opslaan voor configuratie.

# 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 tot de AKS API-server met geautoriseerde IP-adresbereiken gebruikt, moet u het openbare IP-adres van de firewall toevoegen aan het geautoriseerde IP-bereik.

Een UDR maken met een hop die u wilt Azure Firewall

Azure routeert automatisch verkeer tussen Azure-subnetten, virtuele netwerken en on-premises netwerken. Als u 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. De routetabel definieert de volgende hop als de Azure Firewall hierboven is 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 documentatie over routetabel voor virtuele netwerken over hoe u de standaardsysteemroutes van Azure kunt overschrijven of aanvullende routes kunt toevoegen aan de routetabel van een subnet.

Firewallregels toevoegen

Hieronder vindt u drie netwerkregels die u kunt gebruiken om te configureren op uw firewall. Mogelijk moet u deze regels aanpassen op basis van uw implementatie. De eerste regel staat toegang tot poort 9000 toe via TCP. De tweede regel staat toegang tot poort 1194 en 123 toe via UDP (als u implementeert in Azure China 21Vianet, hebt u mogelijk meer nodig). Beide regels staan alleen verkeer toe dat is bestemd voor de AZURE-regio-CIDR die we gebruiken, in dit geval VS - oost. Ten slotte voegen we een derde netwerkregel toe die poort 123 opent naar FQDN via UDP (het toevoegen van een FQDN als een netwerkregel is een van de specifieke functies van Azure Firewall en u moet deze aanpassen wanneer u uw eigen opties ntp.ubuntu.com gebruikt).

Na het instellen van de netwerkregels voegen we ook een toepassingsregel toe met behulp van de die betrekking heeft op alle benodigde FQDN's die toegankelijk zijn AzureKubernetesService via TCP-poort 443 en poort 80.

# Add FW Network Rules

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

# Add FW Application Rules

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

Zie Azure Firewall documentatie voor meer informatie over de Azure Firewall service.

De routetabel koppelen aan AKS

Als u het cluster wilt koppelen aan de firewall, moet het toegewezen subnet voor het subnet van het cluster verwijzen naar de hierboven gemaakte routetabel. U kunt een associatie tot stand brengen 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 met uitgaand type UDR implementeren in het bestaande netwerk

Nu kan een AKS-cluster worden geïmplementeerd in het bestaande virtuele netwerk. We gebruiken ook uitgaand type userDefinedRouting . Deze functie zorgt ervoor dat uitgaand verkeer wordt geforceerd via de firewall en dat er geen andere uitgaande paden bestaan (standaard kan het uitgaande type Load Balancer worden gebruikt).

aks-deploy

Een service-principal maken met toegang tot inrichten binnen het bestaande virtuele netwerk

Een clusteridentiteit (beheerde identiteit of service-principal) wordt door AKS gebruikt om clusterbronnen te maken. Een service-principal die tijdens het maken wordt doorgegeven, wordt gebruikt om onderliggende AKS-resources te maken, zoals Storage-resources, -IP's en load balancers die worden gebruikt door AKS (u kunt in plaats daarvan ook een beheerde identiteit gebruiken). Als u hieronder niet de juiste machtigingen hebt gekregen, kunt u het AKS-cluster niet inrichten.

# Create SP and Assign Permission to Virtual Network

az ad sp create-for-rbac -n "${PREFIX}sp"

Vervang nu en hieronder door de appid van de service-principal en het wachtwoord van de service-principal die automatisch zijn APPID gegenereerd door de vorige PASSWORD opdrachtuitvoer. We verwijzen naar de resource-id van het VNET om de machtigingen aan de service-principal te verlenen, zodat AKS er resources in kan implementeren.

APPID="<SERVICE_PRINCIPAL_APPID_GOES_HERE>"
PASSWORD="<SERVICEPRINCIPAL_PASSWORD_GOES_HERE>"
VNETID=$(az network vnet show -g $RG --name $VNET_NAME --query id -o tsv)

# Assign SP Permission to VNET

az role assignment create --assignee $APPID --scope $VNETID --role "Network Contributor"

U kunt hier de gedetailleerde machtigingen controleren die vereist zijn.

Notitie

Als u de kubenet-netwerkinvoegsel gebruikt, moet u de AKS-service-principal of beheerde identiteit machtigingen geven voor de vooraf gemaakte routetabel, omdat kubenet een routetabel vereist om regels voor doorsturen toe te voegen.

RTID=$(az network route-table show -g $RG -n $FWROUTE_TABLE_NAME --query id -o tsv)
az role assignment create --assignee $APPID --scope $RTID --role "Network Contributor"

AKS implementeren

Ten slotte kan het AKS-cluster worden geïmplementeerd in het bestaande subnet dat we voor het cluster hebben toegewezen. Het doelsubnet waarin moet worden geïmplementeerd, wordt gedefinieerd met de omgevingsvariabele , $SUBNETID . We hebben de variabele in $SUBNETID de vorige stappen niet definieert. 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 om de UDR te gebruiken die al op het subnet bestaat. Met deze configuratie kan AKS de installatie en IP-inrichting voor de load balancer.

Belangrijk

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

Tip

Er kunnen extra functies worden toegevoegd aan de clusterimplementatie, zoals Privécluster.

De AKS-functie voor geautoriseerde IP-bereiken 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-adresbereiken wordt in het diagram aangeduid als optioneel. Wanneer u de functie geautoriseerd IP-bereik inschakelen 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 --generate-ssh-keys \
  --network-plugin $PLUGIN \
  --outbound-type userDefinedRouting \
  --service-cidr 10.41.0.0/16 \
  --dns-service-ip 10.41.0.10 \
  --docker-bridge-address 172.17.0.1/16 \
  --vnet-subnet-id $SUBNETID \
  --service-principal $APPID \
  --client-secret $PASSWORD \
  --api-server-authorized-ip-ranges $FWPUBLIC_IP

Toegang van ontwikkelaars tot de API-server inschakelen

Als u in de vorige stap geautoriseerde IP-bereiken voor het cluster hebt gebruikt, moet u de IP-adressen van de hulpprogramma's voor ontwikkelaars toevoegen aan de AKS-clusterlijst met goedgekeurde IP-bereiken om van hieruit toegang te krijgen tot de API-server. Een andere optie is om een jumpbox te configureren 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 reeksen 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][az-aks-get-credentials] om te configureren dat er verbinding wordt gemaakt met uw zojuist gemaakte kubectl Kubernetes-cluster.

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

Een openbare service implementeren

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

DNAT van openbare service

Implementeer de Azure-stem-app door de onderstaande 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/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

Implementeer de service door het volgende uit te uitvoeren:

kubectl apply -f example.yaml

Een DNAT-regel toevoegen aan Azure Firewall

Belangrijk

Wanneer u Azure Firewall gebruikt om het verkeer te beperken en een door de gebruiker gedefinieerde route (UDR) maakt om al het verkeer af te dwingen, moet u een geschikte DNAT-regel in Firewall maken om het toegangsverkeer op de juiste manier toe te staan. Als Azure Firewall met een UDR gebruikt, wordt de instelling van het ingress-verkeer door asymmetrische routering door een onderbreking veroorzaakt. (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- toegangs- of Kubernetes-service van het type: LoadBalancer). In dit geval wordt het binnenkomende load balancer ontvangen via het openbare IP-adres, maar loopt het retourpad via het privé-IP-adres van de firewall. Omdat de firewall stateful is, wordt het retourpakket uit de firewall daalt omdat de firewall niet op de hoogte is van een tot stand gebrachte sessie. Zie Integrate Azure Firewall Azure Firewall with Azure Standard Load Balancer (Integratie van Azure Firewall met Azure Standard Load Balancer)voor meer informatie over het integreren van load balancer met uw Standard Load Balancer.

Als u binnenkomende connectiviteit wilt configureren, moet er een DNAT-regel 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 front-end van de firewall om te worden gerouteerd naar het interne IP-adres dat wordt blootgesteld door de interne service.

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

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

kubectl get services

Het benodigde IP-adres wordt weergegeven in de kolom EXTERNAL-IP, vergelijkbaar met het 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 uitvoeren:

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

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

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 Azure Firewall front-end-IP-adres in een browser om de connectiviteit te valideren.

U ziet nu de AKS-stem-app. In dit voorbeeld was het openbare IP-adres van de 52.253.228.132 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 ops schonen, verwijdert u de AKS-resourcegroep.

az group delete -g $RG

Volgende stappen

In dit artikel hebt u geleerd welke poorten en adressen moeten worden toegestaan als u het toegangsverkeer voor het cluster wilt beperken. U hebt ook gezien hoe u uw uitgaande verkeer kunt beveiligen met Azure Firewall.

Indien nodig kunt u de bovenstaande stappen generaliseren om het verkeer door testuren naar de uitgaande oplossing van uw userDefinedRoute voorkeur,volgens de documentatie voor uitgaand type .

Zie Verkeer tussen pods beveiligen met behulp van netwerkbeleid in AKS als u de communicatie tussen pods tussen zichzelf en East-West het cluster wilt beperken.