Dela via


Skapa ett nätverksisolerad Azure Kubernetes Service-kluster (AKS) (förhandsversion)

Organisationer har vanligtvis strikta krav på säkerhet och efterlevnad för att reglera utgående (utgående) nätverkstrafik från ett kluster för att eliminera risker för dataexfiltrering. Som standard har AkS-kluster (Azure Kubernetes Service) obegränsad utgående internetåtkomst. Med den här nivån av nätverksåtkomst kan noder och tjänster som du kör komma åt externa resurser efter behov. Om du vill begränsa utgående trafik måste ett begränsat antal portar och adresser vara tillgängliga för att upprätthålla felfria klusterunderhållsuppgifter.

En lösning för att skydda utgående adresser är att använda en brandväggsenhet som kan styra utgående trafik baserat på domännamn.

En annan lösning, ett nätverksisolerade AKS-kluster (förhandsversion), förenklar konfigurationen av utgående begränsningar för ett kluster direkt. Ett nätverksisolerade AKS-kluster minskar risken för dataexfiltrering eller oavsiktlig exponering av klustrets offentliga slutpunkter.

Viktigt!

AKS-förhandsversionsfunktioner är tillgängliga via självbetjäning och anmäl dig. Förhandsversioner tillhandahålls "som är" och "som tillgängliga", och de undantas från serviceavtalen och den begränsade garantin. AKS-förhandsversioner omfattas delvis av kundsupport på bästa sätt. Därför är dessa funktioner inte avsedda för produktionsanvändning. Mer information finns i följande supportartiklar:

Innan du börjar

  • Den här artikeln kräver version 2.63.0 eller senare av Azure CLI. Om du använder Azure Cloud Shell är den senaste versionen redan installerad där.

  • aks-preview Installera Azure CLI-tillägget version 9.0.0b2 eller senare.

    • Om du inte redan har aks-preview tillägget installerar du det med kommandot az extension add .

      az extension add --name aks-preview
      
    • Om du redan har aks-preview tillägget uppdaterar du det så att du har den senaste versionen med kommandot az extension update .

      az extension update --name aks-preview
      
  • Registrera funktionsflaggan NetworkIsolatedClusterPreview med kommandot az feature register .

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

    Kontrollera registreringsstatusen med kommandot az feature show . Det tar några minuter för statusen att visa Registrerad:

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

    Kommentar

    Om du väljer att skapa ett isolerat nätverkskluster med API Server VNet-integrering konfigurerad för privat åtkomst av API-servern måste du upprepa stegen ovan för att registrera EnableAPIServerVnetIntegrationPreview funktionsflaggan också. När statusen visar Registrerad uppdaterar du registreringen av Microsoft.ContainerService resursprovidrar och Microsoft.ContainerRegistry med kommandot az provider register :

     az provider register --namespace Microsoft.ContainerService
     az provider register --namespace Microsoft.ContainerRegistry
    
  • Om du väljer alternativet Bring your own (BYO) Azure Container Registry (ACR) måste du se till att ACR uppfyller följande krav:

  • (Valfritt) Om du vill använda valfri AKS-funktion eller tillägg som kräver utgående nätverksåtkomst innehåller det här dokumentet de utgående kraven för varje funktion. Det här dokumentet räknar också upp de funktioner eller tillägg som stöder integrering av privata länkar för säker anslutning inifrån klustrets virtuella nätverk. Om integrering av privata länkar inte är tillgänglig för någon av dessa funktioner kan klustret konfigureras med en användardefinierad routningstabell och en Azure Firewall baserat på de nätverksregler och programregler som krävs för den funktionen.

Kommentar

Följande AKS-klustertillägg stöds inte ännu i nätverksisolerade kluster:

Distribuera ett isolerat nätverkskluster med AKS-hanterad ACR

AKS skapar, hanterar och stämma av en ACR-resurs i det här alternativet. Du behöver inte tilldela några behörigheter eller hantera ACR. AKS hanterar cacheregler, privat länk och privat slutpunkt som används i det isolerade nätverksklustret.

Skapa ett isolerat nätverkskluster

När du skapar ett nätverksisolerade AKS-kluster kan du välja något av följande privata klusterlägen – Privat länk eller API Server Vnet-integrering.

Oavsett vilket läge du väljer anger --bootstrap-artifact-source du och --outbound-type parametrar.

--bootstrap-artifact-source kan ställas in på antingen Direct eller Cache motsvarande med direkt MCR (INTE nätverksisolerad) och privat ACR (isolerat nätverk) för avbildningshämtningar.

--outbound-type parameter Kan anges till antingen none eller block. Om den utgående typen är inställd nonepå , konfigurerar AKS inte några utgående anslutningar för klustret, vilket gör att användaren kan konfigurera dem på egen hand. Om den utgående typen är inställd på blockering blockeras alla utgående anslutningar.

Skapa ett privat länkbaserat nätverksisolerade AKS-kluster genom att köra kommandot az aks create med --bootstrap-artifact-sourceparametrarna , --enable-private-clusteroch --outbound-type .

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

API Server VNet-integrering

Skapa ett nätverksisolerat AKS-kluster som konfigurerats med API Server VNet-integrering genom att köra kommandot az aks create med --bootstrap-artifact-sourceparametrarna , --enable-private-cluster--enable-apiserver-vnet-integration och --outbound-type .

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

Uppdatera ett befintligt AKS-kluster till en isolerad nätverkstyp

Om du hellre vill aktivera nätverksisolering i ett befintligt AKS-kluster i stället för att skapa ett nytt kluster använder du kommandot az aks update .

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

När funktionen har aktiverats kan alla nyligen tillagda noder bootstrap utan utgående. När du aktiverar nätverksisolering i ett befintligt kluster bör du tänka på att du måste återskapa alla befintliga noder manuellt.

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

Viktigt!

Kom ihåg att återskapa klustrets nodpooler när du har aktiverat nätverksisoleringsläget för ett befintligt kluster. Annars börjar inte funktionen gälla för klustret.

Distribuera ett isolerat nätverkskluster med bring your own ACR

AKS har stöd för att ta med din egen (BYO) ACR. För att stödja BYO ACR-scenariot måste du konfigurera en privat ACR-slutpunkt och en privat DNS-zon innan du skapar AKS-klustret.

Följande steg visar hur du förbereder dessa resurser:

  • Anpassat virtuellt nätverk och undernät för AKS och ACR.
  • ACR, ACR-cacheregel, privat slutpunkt och privat DNS-zon.
  • Anpassad kontrollplansidentitet och kubelet-identitet.

Steg 1: Skapa det virtuella nätverket och undernäten

Den utgående standardåtkomsten för AKS-undernätet måste vara false.

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

Steg 2: Skapa ACR och aktivera artefaktcache

  1. Skapa ACR med den privata länken och anonym pull-åtkomst.

    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. Skapa en ACR-cacheregel så att användare kan cachelagrar MCR-containeravbildningar i den nya ACR.

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

Steg 3: Skapa en privat slutpunkt för 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)

Steg 4: Skapa en privat DNS-zon och lägg till poster

Skapa en privat DNS-zon med namnet privatelink.azurecr.io. Lägg till posterna för registrets REST-slutpunkt {REGISTRY_NAME}.azurecr.iooch registerdataslutpunkten {REGISTRY_NAME}.{REGISTRY_LOCATION}.data.azurecr.io.

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}

Steg 5: Skapa kontrollplans- och kubelet-identiteter

Kontrollplansidentitet

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-identitet

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)

Bevilja AcrPull-behörigheter för Kubelet-identiteten

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

När du har konfigurerat dessa resurser kan du fortsätta att skapa det nätverksisolerade AKS-klustret med BYO ACR.

Steg 6: Skapa ett isolerat nätverkskluster med hjälp av BYO ACR

När du skapar ett nätverksisolerade AKS-kluster kan du välja något av följande privata klusterlägen – Privat länk eller API Server Vnet-integrering.

Oavsett vilket läge du väljer anger --bootstrap-artifact-source du och --outbound-type parametrar.

--bootstrap-artifact-source kan ställas in på antingen Direct eller Cache motsvarande med direkt MCR (INTE nätverksisolerad) och privat ACR (isolerat nätverk) för avbildningshämtningar.

--outbound-type parameter Kan anges till antingen none eller block. Om den utgående typen är inställd nonepå , konfigurerar AKS inte några utgående anslutningar för klustret, vilket gör att användaren kan konfigurera dem på egen hand. Om den utgående typen är inställd på blockering blockeras alla utgående anslutningar.

Skapa ett privat länkbaserat isolerat nätverkskluster som kommer åt din ACR genom att köra kommandot az aks create med de parametrar som krävs.

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

API Server VNet-integrering

För ett isolerat nätverkskluster med API Server VNet-integrering skapar du först ett undernät och tilldelar rätt roll med följande kommandon:

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

Skapa ett nätverksisolerat AKS-kluster som konfigurerats med API Server VNet-integrering och få åtkomst till din ACR genom att köra kommandot az aks create med de parametrar som krävs.

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}

Uppdatera ett befintligt AKS-kluster

Om du hellre vill aktivera nätverksisolering i ett befintligt AKS-kluster i stället för att skapa ett nytt kluster använder du kommandot az aks update .

När du skapar den privata slutpunkten och den privata DNS-zonen för BYO ACR använder du det befintliga virtuella nätverket och undernäten i det befintliga AKS-klustret. När du tilldelar AcrPull-behörigheten till kubelet-identiteten använder du den befintliga kubelet-identiteten för det befintliga AKS-klustret.

Om du vill aktivera den isolerade nätverksfunktionen i ett befintligt AKS-kluster använder du följande kommando:

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

När funktionen för isolerat nätverkskluster har aktiverats kan noder i den nyligen tillagda nodpoolen startas utan utgående åtkomst. Du måste återskapa befintliga nodpooler så att den nyligen skalade noden kan startas. När du aktiverar funktionen i ett befintligt kluster måste du manuellt återskapa alla befintliga noder.

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

Viktigt!

Kom ihåg att återskapa klustrets nodpooler när du har aktiverat funktionen för isolerat nätverkskluster. Annars börjar inte funktionen gälla för klustret.

Uppdatera ditt ACR-ID

Det går att uppdatera den privata ACR som används med ett nätverksisolerade AKS-kluster. Använd kommandot för att identifiera resurs-ID: az aks show t för ACR.

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

Uppdatering av ACR-ID:t utförs genom att köra az aks update kommandot med parametrarna --bootstrap-artifact-source och --bootstrap-container-registry-resource-id .

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

När du uppdaterar ACR-ID:t i ett befintligt kluster måste du manuellt återskapa alla befintliga noder.

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

Viktigt!

Kom ihåg att återskapa klustrets nodpooler när du har aktiverat funktionen för isolerat nätverkskluster. Annars börjar inte funktionen gälla för klustret.

Kontrollera att det isolerade nätverksklustret är aktiverat

Om du vill verifiera att funktionen för isolerat nätverkskluster är aktiverad använder du kommandot az aks show

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

Följande utdata visar att funktionen är aktiverad, baserat på värdena för outboundType egenskapen (ingen eller blockerad) och artifactSource egenskapen (cachelagrad).

"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"
  },
  ...
}

Inaktivera isolerat nätverkskluster

Inaktivera funktionen för isolerat nätverkskluster genom att az aks update köra kommandot med parametrarna --bootstrap-artifact-source och --outbound-type .

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

När du inaktiverar funktionen i ett befintligt kluster måste du manuellt återskapa alla befintliga noder.

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

Viktigt!

Kom ihåg att återskapa klustrets nodpooler när du har inaktiverat funktionen för isolerat nätverkskluster. Annars börjar inte funktionen gälla för klustret.

Nästa steg

I den här artikeln har du lärt dig vilka portar och adresser som ska tillåtas om du vill begränsa utgående trafik för klustret.

Om du vill konfigurera konfiguration av utgående begränsningar med hjälp av Azure Firewall kan du gå till Kontrollera utgående trafik med hjälp av Azure Firewall i AKS.

Om du vill begränsa hur poddar kommunicerar mellan sig själva och trafikbegränsningar för öst-väst i klustret kan du läsa Skydda trafik mellan poddar med hjälp av nätverksprinciper i AKS.