Delen via


Een AKS-cluster (Network isolated Azure Kubernetes Service) maken

Organisaties hebben doorgaans strikte beveiligings- en nalevingsvereisten om uitgaand (uitgaand) netwerkverkeer van een cluster te reguleren om risico's van gegevensexfiltratie te elimineren. Standaard hebben AKS-clusters (Standard SKU Azure Kubernetes Service) onbeperkte uitgaande internettoegang. Met dit netwerktoegangsniveau kunnen knooppunten en services die u uitvoert toegang krijgen tot externe resources, indien nodig. Als u uitgaand verkeer wilt beperken, moet een beperkt aantal poorten en adressen toegankelijk zijn voor het onderhouden van goede clusteronderhoudstaken. Het conceptuele document over uitgaande netwerk- en FQDN-regels voor AKS-clusters bevat een lijst met vereiste eindpunten voor het AKS-cluster en de optionele invoegtoepassingen en functies.

Een veelvoorkomende oplossing voor het beperken van uitgaand verkeer van het cluster is door een firewallapparaat te gebruiken om verkeer te beperken op basis van firewallregels. Firewall is van toepassing wanneer uw toepassing uitgaande toegang vereist, maar wanneer uitgaande aanvragen moeten worden geïnspecteerd en beveiligd. Het handmatig configureren van een firewall met vereiste uitgaande regels en FQDN's is een lastig proces, met name als u alleen een geïsoleerd AKS-cluster wilt maken zonder uitgaande afhankelijkheden voor het opstarten van het cluster.

Om het risico op gegevensexfiltratie te verminderen, maakt netwerkisolatiecluster het mogelijk om het AKS-cluster zonder uitgaande netwerkafhankelijkheden op te halen, zelfs voor het ophalen van clusteronderdelen/installatiekopieën uit Microsoft Artifact Registry (MAR). De clusteroperator kan incrementeel toegestaan uitgaand verkeer instellen voor elk scenario dat ze willen inschakelen. In dit artikel wordt u begeleid bij de stappen voor het maken van een geïsoleerd netwerkcluster.

Voordat u begint

Notitie

Uitgaand type none is algemeen beschikbaar. Het uitgaande typeblock is in preview.

Belangrijk

AKS preview-functies zijn beschikbaar op selfservice, opt-in basis. Previews worden geleverd 'zoals het is' en 'zoals beschikbaar', en zijn uitgesloten van de serviceovereenkomsten en de beperkte garantie. AKS-previews worden gedeeltelijk gedekt door klantondersteuning naar best vermogen. Daarom zijn deze functies niet bedoeld voor productiegebruik. Zie de volgende ondersteuningsartikelen voor meer informatie:

  • Voor dit artikel is versie 2.71.0 of hoger van de Azure CLI vereist. Als u Azure Cloud Shell gebruikt, is de nieuwste versie daar al geïnstalleerd.
  • Installeer de aks-preview Azure CLI-extensie versie 9.0.0b2 of hoger als u uitgaand type block (preview) gebruikt.
    • Als u de aks-preview extensie nog niet hebt, installeert u deze met behulp van de az extension add opdracht.
      az extension add --name aks-preview
      
    • Als u de aks-preview extensie al hebt, werkt u deze bij om ervoor te zorgen dat u de nieuwste versie hebt met behulp van de az extension update opdracht.
      az extension update --name aks-preview
      
  • Netwerkisolatieclusters worden ondersteund op AKS-clusters met Kubernetes versie 1.30 of hoger.
  • Als u ervoor kiest om de optie Bring Your Own (BYO) Azure Container Registry (ACR) te gebruiken, moet u ervoor zorgen dat de ACR de Premium SKU-servicelaag is.
  • Als u een netwerkisolatiecluster gebruikt dat is geconfigureerd met API Server VNet-integratie, moet u de vereisten en richtlijnen in dit document volgen.

Een netwerkisolatiecluster implementeren met AKS-beheerde ACR

AKS maakt, beheert en verzoent een ACR-resource in deze optie. U hoeft geen machtigingen toe te wijzen of de ACR te beheren. AKS beheert de cacheregels, private link en het privé-eindpunt dat wordt gebruikt in het geïsoleerde netwerkcluster.

Een netwerkisolatiecluster maken

Wanneer u een AKS-cluster met netwerkisolatie maakt, kunt u een van de volgende privéclustermodi kiezen: private link- of API Server-Vnet-integratie.

Ongeacht de modus die u selecteert, moet u de parameters --bootstrap-artifact-source en --outbound-type instellen.

De --bootstrap-artifact-source kan worden ingesteld op zowel Direct als Cache, wat overeenkomt met het gebruik van directe MAR (NIET netwerk geïsoleerd) en privé-ACR (netwerk geïsoleerd) voor het ophalen van containerafbeeldingen.

De --outbound-type parameter kan worden ingesteld op hetzij none of block (voorbeeld). Als het uitgaande type is ingesteld op none, stelt AKS geen uitgaande verbindingen in voor het cluster, zodat de gebruiker deze zelf kan configureren. Als het uitgaande type is ingesteld op block, worden alle uitgaande verbindingen geblokkeerd.

Maak een op private link gebaseerde netwerkisolatiecluster door de opdracht az aks create uit te voeren met --bootstrap-artifact-source, --enable-private-clusteren --outbound-type parameters.

az aks create --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME}   --kubernetes-version 1.30.3 --bootstrap-artifact-source Cache --outbound-type none  --network-plugin azure --enable-private-cluster

VNet-integratie van API Server

Maak een netwerkgeïsoleerd cluster dat is geconfigureerd met API Server VNet-integratie door de opdracht az aks create uit te voeren met --bootstrap-artifact-source, --enable-private-cluster, --enable-apiserver-vnet-integration en --outbound-type parameters.

az aks create --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --kubernetes-version 1.30.3 --bootstrap-artifact-source Cache --outbound-type none --network-plugin azure --enable-private-cluster --enable-apiserver-vnet-integration

Een bestaand AKS-cluster bijwerken naar een geïsoleerd netwerktype

Als u liever netwerkisolatie op een bestaand AKS-cluster inschakelt in plaats van een nieuw cluster te maken, gebruikt u de opdracht az aks update .

Als u de geïsoleerde netwerkfunctie wilt inschakelen op een bestaand AKS-cluster, voert u eerst de volgende opdracht uit om bij te werken bootstrap-artifact-source:

az aks update --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --bootstrap-artifact-source Cache

Vervolgens moet u handmatig alle bestaande knooppuntpools opnieuw aanmaken.

az aks upgrade --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --node-image-only

Notitie

U moet ervoor zorgen dat de uitgaande verbinding blijft bestaan totdat de eerste herinstallatie is voltooid. Voer de volgende opdracht uit om te controleren of de herinstallatie voltooid is:

NODEPOOLS=$(az aks nodepool list \
--resource-group "${RESOURCE_GROUP}" \
--cluster-name "${AKS_NAME}" \
--query "[].name" -o tsv)
for NODEPOOL in $NODEPOOLS; do
echo "Waiting for node pool $NODEPOOL to finish upgrading..."
az aks nodepool wait \
--resource-group "${RESOURCE_GROUP}" \
--cluster-name "${AKS_NAME}" \
--name "$NODEPOOL" \
--updated
echo "Node pool $NODEPOOL upgrade succeeded."
done

Wacht en zorg ervoor dat de herinstallatie is voltooid en voer daarna de volgende opdracht uit om outbound-type bij te werken:

az aks update --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --outbound-type none

Belangrijk

Vergeet niet om de knooppuntpools van het cluster onmiddellijk te herinstalleren nadat u de artefactbron naar Cache hebt bijgewerkt. Anders wordt de functie niet van kracht voor het cluster.

Een netwerkisolatiecluster implementeren met bring your own ACR

AKS biedt ondersteuning voor bring your own (BYO) ACR. Ter ondersteuning van het BYO ACR-scenario moet u een privé-ACR-eindpunt en een privé-DNS-zone configureren voordat u het AKS-cluster maakt.

De volgende stappen laten zien hoe u deze resources voorbereidt:

  • Aangepast virtueel netwerk en subnetten voor AKS en ACR.
  • ACR, ACR-cacheregel, privé-eindpunt en privé-DNS-zone.
  • Aangepaste identiteit van controlevlak en kubelet-identiteit.

Stap 1: Het virtuele netwerk en subnetten maken

az group create --name ${RESOURCE_GROUP} --location ${LOCATION}

az network vnet create  --resource-group ${RESOURCE_GROUP} --name ${VNET_NAME} --address-prefixes 192.168.0.0/16

az network vnet subnet create --name ${AKS_SUBNET_NAME} --vnet-name ${VNET_NAME} --resource-group ${RESOURCE_GROUP} --address-prefixes 192.168.1.0/24

SUBNET_ID=$(az network vnet subnet show --name ${AKS_SUBNET_NAME} --vnet-name ${VNET_NAME} --resource-group ${RESOURCE_GROUP} --query 'id' --output tsv)

az network vnet subnet create --name ${ACR_SUBNET_NAME} --vnet-name ${VNET_NAME} --resource-group ${RESOURCE_GROUP} --address-prefixes 192.168.2.0/24 --private-endpoint-network-policies Disabled

Stap 2: Uitgaande connectiviteit van virtueel netwerk uitschakelen (optioneel)

Er zijn meerdere manieren om de uitgaande connectiviteit van het virtuele netwerk uit te schakelen.

Stap 3: de ACR maken en de artefactcache inschakelen

  1. Maak de ACR met de privékoppeling.

    az acr create --resource-group ${RESOURCE_GROUP} --name ${REGISTRY_NAME} --sku Premium --public-network-enabled false
    
    REGISTRY_ID=$(az acr show --name ${REGISTRY_NAME} -g ${RESOURCE_GROUP}  --query 'id' --output tsv)
    
  2. Maak een ACR-cacheregel met behulp van de onderstaande opdracht, zodat gebruikers MAR-containerinstallatiekopieën en binaire bestanden in de nieuwe ACR kunnen opslaan. Houd er rekening mee dat de naam van de cacheregel en de namen van opslagplaatsen strikt moeten worden afgestemd op de onderstaande richtlijnen.

    az acr cache create -n aks-managed-mcr -r ${REGISTRY_NAME} -g ${RESOURCE_GROUP} --source-repo "mcr.microsoft.com/*" --target-repo "aks-managed-repository/*"
    

Notitie

Met BYO ACR is het uw verantwoordelijkheid om ervoor te zorgen dat de ACR-cacheregel wordt gemaakt en correct wordt onderhouden zoals hierboven. Deze stap is essentieel voor het maken, functioneren en upgraden van clusters. Deze cacheregel mag NIET worden gewijzigd.

Stap 4: Een privé-eindpunt maken voor de ACR

az network private-endpoint create --name myPrivateEndpoint --resource-group ${RESOURCE_GROUP} --vnet-name ${VNET_NAME} --subnet ${ACR_SUBNET_NAME} --private-connection-resource-id ${REGISTRY_ID} --group-id registry --connection-name myConnection

NETWORK_INTERFACE_ID=$(az network private-endpoint show --name myPrivateEndpoint --resource-group ${RESOURCE_GROUP} --query 'networkInterfaces[0].id' --output tsv)

REGISTRY_PRIVATE_IP=$(az network nic show --ids ${NETWORK_INTERFACE_ID} --query "ipConfigurations[?privateLinkConnectionProperties.requiredMemberName=='registry'].privateIPAddress" --output tsv)

DATA_ENDPOINT_PRIVATE_IP=$(az network nic show --ids ${NETWORK_INTERFACE_ID} --query "ipConfigurations[?privateLinkConnectionProperties.requiredMemberName=='registry_data_$LOCATION'].privateIPAddress" --output tsv)

Stap 5: Een privé-DNS-zone maken en records toevoegen

Maak een privé-DNS-zone met de naam privatelink.azurecr.io. Voeg de records voor het register REST-eindpunt {REGISTRY_NAME}.azurecr.ioen het registergegevenseindpunt {REGISTRY_NAME}.{REGISTRY_LOCATION}.data.azurecr.iotoe.

az network private-dns zone create --resource-group ${RESOURCE_GROUP} --name "privatelink.azurecr.io"

az network private-dns link vnet create --resource-group ${RESOURCE_GROUP} --zone-name "privatelink.azurecr.io" --name MyDNSLink --virtual-network ${VNET_NAME} --registration-enabled false

az network private-dns record-set a create --name ${REGISTRY_NAME} --zone-name "privatelink.azurecr.io" --resource-group ${RESOURCE_GROUP}

az network private-dns record-set a add-record --record-set-name ${REGISTRY_NAME} --zone-name "privatelink.azurecr.io" --resource-group ${RESOURCE_GROUP} --ipv4-address ${REGISTRY_PRIVATE_IP}

az network private-dns record-set a create --name ${REGISTRY_NAME}.${LOCATION}.data --zone-name "privatelink.azurecr.io" --resource-group ${RESOURCE_GROUP}

az network private-dns record-set a add-record --record-set-name ${REGISTRY_NAME}.${LOCATION}.data --zone-name "privatelink.azurecr.io" --resource-group ${RESOURCE_GROUP} --ipv4-address ${DATA_ENDPOINT_PRIVATE_IP}

Stap 6: besturingsvlak- en kubelet-identiteiten maken

Identiteit van besturingsvlak

az identity create --name ${CLUSTER_IDENTITY_NAME} --resource-group ${RESOURCE_GROUP}

CLUSTER_IDENTITY_RESOURCE_ID=$(az identity show --name ${CLUSTER_IDENTITY_NAME} --resource-group ${RESOURCE_GROUP} --query 'id' -o tsv)

CLUSTER_IDENTITY_PRINCIPAL_ID=$(az identity show --name ${CLUSTER_IDENTITY_NAME} --resource-group ${RESOURCE_GROUP} --query 'principalId' -o tsv)

Kubelet-identiteit

az identity create --name ${KUBELET_IDENTITY_NAME} --resource-group ${RESOURCE_GROUP}

KUBELET_IDENTITY_RESOURCE_ID=$(az identity show --name ${KUBELET_IDENTITY_NAME} --resource-group ${RESOURCE_GROUP} --query 'id' -o tsv)

KUBELET_IDENTITY_PRINCIPAL_ID=$(az identity show --name ${KUBELET_IDENTITY_NAME} --resource-group ${RESOURCE_GROUP} --query 'principalId' -o tsv)

AcrPull-machtigingen verlenen voor de Kubelet-identiteit

az role assignment create --role AcrPull --scope ${REGISTRY_ID} --assignee-object-id ${KUBELET_IDENTITY_PRINCIPAL_ID} --assignee-principal-type ServicePrincipal

Nadat u deze resources hebt geconfigureerd, kunt u doorgaan met het maken van het geïsoleerde AKS-netwerkcluster met BYO ACR.

Stap 7: Netwerkisolatiecluster maken met BYO ACR

Wanneer u een netwerkisolatiecluster maakt, kunt u een van de volgende privéclustermodi kiezen: private link- of API Server Vnet-integratie.

Ongeacht de modus die u selecteert, moet u de parameters --bootstrap-artifact-source en --outbound-type instellen.

De --bootstrap-artifact-source kan worden ingesteld op Direct of Cache, wat overeenkomt met het gebruik van direct Microsoft Artifact Registry (MAR) (niet-netwerk geïsoleerd) en privé-ACR (netwerk geïsoleerd) voor respectievelijk het pullen van afbeeldingen.

De --outbound-type parameter kan worden ingesteld op hetzij none of block (voorbeeld). Als het uitgaande type is ingesteld op none, stelt AKS geen uitgaande verbindingen in voor het cluster, zodat de gebruiker deze zelf kan configureren. Als het uitgaande type is ingesteld op block, worden alle uitgaande verbindingen geblokkeerd.

Maak een op private link gebaseerd netwerk geïsoleerd cluster dat toegang heeft tot uw ACR door de opdracht az aks create uit te voeren met de vereiste parameters.

az aks create --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --kubernetes-version 1.30.3 --vnet-subnet-id ${SUBNET_ID} --assign-identity ${CLUSTER_IDENTITY_RESOURCE_ID} --assign-kubelet-identity ${KUBELET_IDENTITY_RESOURCE_ID} --bootstrap-artifact-source Cache --bootstrap-container-registry-resource-id ${REGISTRY_ID} --outbound-type none --network-plugin azure --enable-private-cluster

VNet-integratie van API Server

Voor een netwerkisolatiecluster dat is geconfigureerd met VNet-integratie van API-server, maakt u eerst een subnet en wijst u de juiste rol toe met de volgende opdrachten:

az network vnet subnet create --name ${APISERVER_SUBNET_NAME} --vnet-name ${VNET_NAME} --resource-group ${RESOURCE_GROUP} --address-prefixes 192.168.3.0/24

export APISERVER_SUBNET_ID=$(az network vnet subnet show --resource-group ${RESOURCE_GROUP} --vnet-name ${VNET_NAME} --name ${APISERVER_SUBNET_NAME} --query id -o tsv)
az role assignment create --scope ${APISERVER_SUBNET_ID} --role "Network Contributor" --assignee-object-id ${CLUSTER_IDENTITY_PRINCIPAL_ID} --assignee-principal-type ServicePrincipal

Maak een netwerkisolatiecluster dat is geconfigureerd met API Server VNet-integratie en open uw ACR door de opdracht az aks create uit te voeren met de vereiste parameters.

az aks create --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --kubernetes-version 1.30.3 --vnet-subnet-id ${SUBNET_ID} --assign-identity ${CLUSTER_IDENTITY_RESOURCE_ID} --assign-kubelet-identity ${KUBELET_IDENTITY_RESOURCE_ID} --bootstrap-artifact-source Cache --bootstrap-container-registry-resource-id ${REGISTRY_ID} --outbound-type none --network-plugin azure --enable-apiserver-vnet-integration --apiserver-subnet-id ${APISERVER_SUBNET_ID}

Een bestaand AKS-cluster bijwerken

Als u liever netwerkisolatie op een bestaand AKS-cluster inschakelt in plaats van een nieuw cluster te maken, gebruikt u de opdracht az aks update .

Wanneer u het privé-eindpunt en de privé-DNS-zone voor de BYO ACR maakt, gebruikt u het bestaande virtuele netwerk en de subnetten van het bestaande AKS-cluster. Wanneer u de AcrPull-machtiging toewijst aan de kubelet-identiteit, gebruikt u de bestaande kubelet-identiteit van het bestaande AKS-cluster.

Als u de geïsoleerde netwerkfunctie wilt inschakelen op een bestaand AKS-cluster, voert u eerst de volgende opdracht uit om bij te werken bootstrap-artifact-source:

az aks update --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --bootstrap-artifact-source Cache --bootstrap-container-registry-resource-id ${REGISTRY_ID}

Vervolgens moet u handmatig alle bestaande knooppuntpools opnieuw aanmaken.

az aks upgrade --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --node-image-only

Notitie

U moet ervoor zorgen dat de uitgaande verbinding blijft bestaan totdat de eerste herinstallatie is voltooid. Voer de volgende opdracht uit om te controleren of de herinstallatie voltooid is:

NODEPOOLS=$(az aks nodepool list \
--resource-group "${RESOURCE_GROUP}" \
--cluster-name "${AKS_NAME}" \
--query "[].name" -o tsv)
for NODEPOOL in $NODEPOOLS; do
echo "Waiting for node pool $NODEPOOL to finish upgrading..."
az aks nodepool wait \
--resource-group "${RESOURCE_GROUP}" \
--cluster-name "${AKS_NAME}" \
--name "$NODEPOOL" \
--updated
echo "Node pool $NODEPOOL upgrade succeeded."
done

Wacht en zorg ervoor dat de herinstallatie is voltooid en voer daarna de volgende opdracht uit om outbound-type bij te werken:

az aks update --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --outbound-type none

Belangrijk

Vergeet niet om de knooppuntpools van het cluster onmiddellijk te herinstalleren nadat u de artefactbron naar Cache hebt bijgewerkt. Anders wordt de functie niet van kracht voor het cluster.

Uw ACR-id bijwerken

Het is mogelijk om de persoonlijke ACR bij te werken die wordt gebruikt met een geïsoleerd netwerkcluster. Gebruik de az aks show opdracht om de ACR-resource-id te identificeren.

az aks show --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME}

Het bijwerken van de ACR-id wordt uitgevoerd door de opdracht uit te voeren met de az aks update--bootstrap-artifact-source en --bootstrap-container-registry-resource-id parameters.

az aks update --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --bootstrap-artifact-source Cache --bootstrap-container-registry-resource-id <New BYO ACR resource ID>

Wanneer u de ACR-id op een bestaand cluster bijwerkt, moet u alle bestaande knooppunten handmatig opnieuw installeren.

az aks upgrade --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --node-image-only

Belangrijk

Vergeet niet om de knooppuntgroepen van het cluster opnieuw te maken nadat u de functie netwerkisolatiecluster hebt ingeschakeld. Anders wordt de functie niet van kracht voor het cluster.

Controleren of netwerkisolatiecluster is ingeschakeld

Gebruik het commando az aks show om te controleren of de clusterfunctie voor netwerkisolatie is ingeschakeld.

az aks show --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME}

In de volgende uitvoer ziet u dat de functie is ingeschakeld, op basis van de waarden van de outboundType eigenschap (geen of geblokkeerd) en artifactSource eigenschap (cache).

"kubernetesVersion": "1.30.3",
"name": "myAKSCluster"
"type": "Microsoft.ContainerService/ManagedClusters"
"properties": {
  ...
  "networkProfile": {
    ...
    "outboundType": "none",
    ...
  },
  ...
  "bootstrapProfile": {
    "artifactSource": "Cache",
    "containerRegistryId": "/subscriptions/my-subscription-id/my-node-resource-group-name/providers/Microsoft.ContainerRegistry/registries/my-registry-name"
  },
  ...
}

Netwerkisolatiecluster uitschakelen

Schakel de netwerk-geïsoleerde clusterfunctie uit door de az aks update opdracht uit te voeren met de --bootstrap-artifact-source en --outbound-type parameters.

az aks update --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --bootstrap-artifact-source Direct --outbound-type LoadBalancer

Wanneer u de functie op een bestaand cluster uitschakelt, moet u alle bestaande knooppunten handmatig opnieuw installeren.

az aks upgrade --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --node-image-only

Belangrijk

Vergeet niet om de knooppuntgroepen van het cluster opnieuw te maken nadat u de functie netwerkisolatiecluster hebt uitgeschakeld. Anders wordt de functie niet van kracht voor het cluster.

Probleemoplossingsproces

Als u problemen ondervindt, zoals het mislukken van het ophalen van afbeeldingen, raadpleegt u Netwerk geïsoleerde Azure Kubernetes Service (AKS) clusters problemen oplossen.

Volgende stappen

Als u de configuratie van uitgaande beperkingen wilt instellen met behulp van Azure Firewall, gaat u naar Uitgaand verkeer beheren met behulp van Azure Firewall in AKS.

Als u wilt beperken hoe pods onderling communiceren en het Oost-West-verkeer binnen het cluster wilt beperken, zie Verkeer tussen pods beveiligen met netwerkbeleid in AKS.