Delen via


Een AKS-cluster (Azure Kubernetes Service) met netwerkisolatie maken (preview)

Organisaties hebben doorgaans strikte beveiligings- en nalevingsvereisten om uitgaand (uitgaand) netwerkverkeer van een cluster te reguleren om risico's van gegevensexfiltratie te elimineren. Azure Kubernetes Service-clusters (AKS) hebben standaard 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.

Eén oplossing voor het beveiligen van uitgaande adressen is het gebruik van een firewallapparaat dat uitgaand verkeer kan beheren op basis van domeinnamen.

Een andere oplossing, een netwerk geïsoleerd AKS-cluster (preview), vereenvoudigt het instellen van uitgaande beperkingen voor een cluster. Een netwerk geïsoleerd AKS-cluster vermindert het risico op gegevensexfiltratie of onbedoelde blootstelling van openbare eindpunten van het cluster.

Belangrijk

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

Voordat u begint

  • Lees het conceptuele overzicht van deze functie, waarin wordt uitgelegd hoe netwerk-geïsoleerde clusters werken. Het overzichtsartikel bevat ook:
    • In dit artikel worden de twee toegangsmethoden uitgelegd: ACR of BYO ACR die door AKS worden beheerd.
    • Beschrijft de huidige beperkingen.
  • Voor dit artikel is versie 2.63.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 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 extensie al hebt, werkt u deze aks-preview bij om te controleren of u de nieuwste versie hebt met behulp van de az extension update opdracht.

      az extension update --name aks-preview
      
  • Registreer de NetworkIsolatedClusterPreview functievlag met behulp van de opdracht az feature register .

    az feature register --namespace Microsoft.ContainerService --name NetworkIsolatedClusterPreview
    

    Controleer de registratiestatus met behulp van de opdracht az feature show . Het duurt enkele minuten voordat de status Geregistreerd wordt weergegeven:

    az feature show --namespace Microsoft.ContainerService --name NetworkIsolatedClusterPreview
    

    Notitie

    Als u ervoor kiest om een netwerkisolatiecluster te maken met API Server VNet-integratie die is geconfigureerd voor privétoegang van de API-server, moet u de bovenstaande stappen herhalen om ook de functievlag te registreren EnableAPIServerVnetIntegrationPreview . Wanneer de status Geregistreerd is, vernieuwt u de registratie van de Microsoft.ContainerService en Microsoft.ContainerRegistry resourceproviders met behulp van de opdracht az provider register:

     az provider register --namespace Microsoft.ContainerService
     az provider register --namespace Microsoft.ContainerRegistry
    
  • Als u de optie Bring Your Own (BYO) Azure Container Registry (ACR) kiest, moet u ervoor zorgen dat de ACR voldoet aan de volgende vereisten:

  • (Optioneel) Als u een optionele AKS-functie of invoegtoepassing wilt gebruiken waarvoor uitgaande netwerktoegang is vereist, bevat dit document de uitgaande vereisten voor elke functie. In dit document worden ook de functies of invoegtoepassingen opgesomd die ondersteuning bieden voor private link-integratie voor beveiligde verbindingen vanuit het virtuele netwerk van het cluster. Als private link-integratie niet beschikbaar is voor een van deze functies, kan het cluster worden ingesteld met een door de gebruiker gedefinieerde routeringstabel en een Azure Firewall op basis van de netwerkregels en toepassingsregels die vereist zijn voor die functie.

Notitie

De volgende AKS-clusterextensies worden nog niet ondersteund op geïsoleerde netwerkclusters:

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 geïsoleerde AKS-netwerkcluster maakt, kunt u een van de volgende privéclustermodi kiezen: Private Link of API Server Vnet-integratie.

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

--bootstrap-artifact-source kan worden ingesteld op of Direct Cache overeenkomen met het gebruik van een directe MCR (NIET-netwerk geïsoleerd) en een privé-ACR (netwerk geïsoleerd) voor respectievelijk pull-installatiekopieën.

De --outbound-type parameter kan worden ingesteld op of none block. 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 blokkeren, worden alle uitgaande verbindingen geblokkeerd.

Maak een op private link gebaseerd netwerk geïsoleerd AKS-cluster 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 netwerk geïsoleerd AKS-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 .

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

Nadat de functie is ingeschakeld, kunnen alle nieuw toegevoegde knooppunten zonder uitgaand verkeer worden opgestart. Wanneer u netwerkisolatie inschakelt op een bestaand cluster, moet u alle bestaande knooppunten handmatig opnieuw instellen.

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 netwerkisolatiemodus voor een bestaand cluster hebt ingeschakeld. 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 besturingsvlak en kubelet-identiteit.

Stap 1: Het virtuele netwerk en subnetten maken

De standaard uitgaande toegang voor het AKS-subnet moet onwaar zijn.

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 --default-outbound-access false

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: de ACR maken en de artefactcache inschakelen

  1. Maak de ACR met de private link en anonieme pull-toegang.

    az acr create --resource-group ${RESOURCE_GROUP} --name ${REGISTRY_NAME} --sku Premium --public-network-enabled false
    
    az acr update --resource-group ${RESOURCE_GROUP} --name ${REGISTRY_NAME} --anonymous-pull-enabled true
    
    REGISTRY_ID=$(az acr show --name ${REGISTRY_NAME} -g ${RESOURCE_GROUP}  --query 'id' --output tsv)
    
  2. Maak een ACR-cacheregel zodat gebruikers MCR-containerinstallatiekopieën in de nieuwe ACR in de cache kunnen opslaan.

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

Stap 3: 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 4: 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 5: 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 6: Een geïsoleerd netwerkcluster maken met behulp van de BYO ACR

Wanneer u een geïsoleerde AKS-netwerkcluster maakt, kunt u een van de volgende privéclustermodi kiezen: Private Link of API Server Vnet-integratie.

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

--bootstrap-artifact-source kan worden ingesteld op of Direct Cache overeenkomen met het gebruik van een directe MCR (NIET-netwerk geïsoleerd) en een privé-ACR (netwerk geïsoleerd) voor respectievelijk pull-installatiekopieën.

De --outbound-type parameter kan worden ingesteld op of none block. 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 blokkeren, 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 netwerk geïsoleerd cluster 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 netwerk geïsoleerd AKS-cluster 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.

Gebruik de volgende opdracht om de netwerkisolatiefunctie in te schakelen op een bestaand AKS-cluster:

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

Nadat de netwerk-geïsoleerde clusterfunctie is ingeschakeld, kunnen knooppunten in de nieuw toegevoegde knooppuntgroep zonder uitgaand verkeer worden opgestart. U moet de installatiekopie van bestaande knooppuntgroepen opnieuw instellen, zodat nieuw geschaald knooppunt kan worden opgestart. Wanneer u de functie inschakelt op een bestaand cluster, moet u alle bestaande knooppunten handmatig opnieuw instellen.

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.

Uw ACR-id bijwerken

Het is mogelijk om de persoonlijke ACR bij te werken die wordt gebruikt met een geïsoleerd AKS-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 in een installatiekopie maken.

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 de opdracht az aks show show om te controleren of de netwerkisolatieclusterfunctie 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 in een installatiekopie maken.

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.

Volgende stappen

In dit artikel hebt u geleerd welke poorten en adressen u wilt toestaan als u uitgaand verkeer voor het cluster wilt beperken.

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.

Zie Verkeer tussen pods beveiligen tussen pods in AKS als u wilt beperken hoe pods communiceren tussen zichzelf en Oost-West-verkeer binnen het cluster.