Ağdan yalıtılmış Azure Kubernetes Service (AKS) kümesi oluşturma

Kuruluşların genellikle veri sızdırma risklerini ortadan kaldırmak için kümeden çıkış (giden) ağ trafiğini düzenlemek için katı güvenlik ve uyumluluk gereksinimleri vardır. Varsayılan olarak, standart SKU Azure Kubernetes Service (AKS) kümeleri sınırsız giden İnternet erişimine sahiptir. Bu ağ erişimi düzeyi, çalıştırdığınız düğümlerin ve hizmetlerin gerektiğinde dış kaynaklara erişmesine olanak tanır. Çıkış trafiğini kısıtlamak istiyorsanız, küme bakım görevlerinin sürdürülmesi için sınırlı sayıda bağlantı noktası ve adres erişilebilir olmalıdır. AKS kümeleri için giden ağ ve FQDN kurallarıyla ilgili kavramsal belge, AKS kümesi için gerekli uç noktaların ve isteğe bağlı eklentilerinin ve özelliklerinin listesini sağlar.

Kümeden giden trafiği kısıtlamanın yaygın çözümlerinden biri, güvenlik duvarı kurallarına göre trafiği kısıtlamak için bir güvenlik duvarı cihazı kullanmaktır. Güvenlik duvarı, uygulamanız giden erişim gerektirdiğinde, ancak giden isteklerin incelenmesi ve güvenliğinin sağlanması gerektiğinde geçerlidir. Güvenlik duvarını gerekli çıkış kuralları ve FQDN'lerle el ile yapılandırmak, özellikle tek gereksiniminiz küme önyüklemesi için giden bağımlılıkları olmayan yalıtılmış bir AKS kümesi oluşturmaksa zahmetli bir işlemdir.

Ağdan yalıtılmış küme, veri sızdırma riskini azaltmak için, AKS kümesinin Microsoft Artifact Registry'den (MAR) küme bileşenlerini/görüntülerini getirmek için bile giden ağ bağımlılıkları olmadan önyüklemeye olanak tanır. Küme operatörü, etkinleştirmek istediği her senaryo için izin verilen giden trafiği artımlı olarak ayarlayabilir. Bu makale, ağdan yalıtılmış küme oluşturma adımlarında size yol gösterir.

Başlamadan önce

Uyarı

Giden türü none genel olarak kullanılabilir. Giden türü block önizleme aşamasındadır.

Önemli

AKS önizleme özellikleri self servis ve kabul temelinde kullanılabilir. Önizlemeler "olduğu gibi" ve "kullanılabilir" olarak sağlanır ve hizmet düzeyi sözleşmelerinin ve sınırlı garantinin dışında tutulur. AKS önizlemeleri, müşteri desteği ekibi tarafından maksimum çaba gösterilerek kısmen ele alınmaktadır. Bu nedenle, bu özellikler üretim kullanımı için tasarlanmamıştır. Daha fazla bilgi için aşağıdaki destek makalelerine bakın:

  • Azure Cloud Shell'de Bash ortamını kullanın. Daha fazla bilgi için bkz . Azure Cloud Shell'i kullanmaya başlama.

  • CLI başvuru komutlarını yerel olarak çalıştırmayı tercih ediyorsanız Azure CLI'yı yükleyin . Windows veya macOS üzerinde çalışıyorsanız Azure CLI’yi bir Docker kapsayıcısında çalıştırmayı değerlendirin. Daha fazla bilgi için bkz . Docker kapsayıcısında Azure CLI'yi çalıştırma.

    • Yerel yükleme kullanıyorsanız az login komutunu kullanarak Azure CLI ile oturum açın. Kimlik doğrulama işlemini tamamlamak için terminalinizde görüntülenen adımları izleyin. Diğer oturum açma seçenekleri için bkz. Azure CLI kullanarak Azure'da kimlik doğrulaması.

    • İstendiğinde, ilk kullanımda Azure CLI uzantısını yükleyin. Uzantılar hakkında daha fazla bilgi için bkz . Azure CLI ile uzantıları kullanma ve yönetme.

    • Yüklü sürümü ve bağımlı kitaplıkları bulmak için az version komutunu çalıştırın. En son sürüme yükseltmek için az upgrade komutunu çalıştırın.

  • Bu makale, Azure CLI'nın 2.73.0 veya sonraki bir sürümünü gerektirir. Azure Cloud Shell kullanıyorsanız en son sürüm zaten orada yüklüdür.
  • Çıkış türü aks-preview (önizleme) kullanıyorsanız Azure CLI uzantısının block veya daha yeni bir sürümünü yüklemeniz gerekir.
    • Eğer henüz aks-preview uzantısına sahip değilseniz, az extension add komutunu kullanarak yükleyin.
      az extension add --name aks-preview
      
    • Uzantıya aks-preview zaten sahipseniz, komutunu kullanarak en son sürüme sahip olduğunuzdan emin olmak için uzantıyı güncelleştirin az extension update .
      az extension update --name aks-preview
      
  • Ağdan yalıtılmış kümeler, Kubernetes sürüm 1.30 veya üzeri kullanılarak AKS kümelerinde desteklenir.
  • Kendi Azure Container Registry'nizi getirin (BYO) Azure Container Registry (ACR) seçeneğini kullanmayı tercih ediyorsanız, ACR'nin Premium SKU hizmet katmanı olduğundan emin olmanız gerekir.
  • API Server Sanal Ağ Tümleştirmesi ile yapılandırılmış ağdan yalıtılmış bir küme kullanıyorsanız, AZURE KUBERNETES SERVICE ile API Server Sanal Ağ Tümleştirmesi'ni kullanma konusunda önkoşulları ve yönergeleri izleyin.

Ortam değişkenlerini ayarlama

Bu makale boyunca kullanılan ortam değişkenlerini ayarlayın. ACR adı genel olarak benzersiz olmalı ve yalnızca küçük harfli alfasayısal karakterler içermelidir.

RESOURCE_GROUP="myResourceGroup"
LOCATION="eastus"
AKS_NAME="myAKSCluster"
VNET_NAME="myVNet"
AKS_SUBNET_NAME="aksSubnet"
ACR_SUBNET_NAME="acrSubnet"
APISERVER_SUBNET_NAME="apiServerSubnet"
REGISTRY_NAME="myregistry${RANDOM}"
CLUSTER_IDENTITY_NAME="clusterIdentity"
KUBELET_IDENTITY_NAME="kubeletIdentity"

az group create --name ${RESOURCE_GROUP} --location ${LOCATION}
  • Aktif bir aboneliğe sahip bir Azure hesabı. Hesabınız yoksa başlamadan önce ücretsiz bir hesap oluşturun.
  • Terraform’u yükleyin ve yapılandırın.
  • Azure CLI, dağıtımı doğrulamak ve kümeye bağlanmak için az login kullanılarak yüklenir ve oturum açılır. Henüz sahip değilseniz Azure CLI yükleyin.
  • kubectl kümeye bağlanmak için yüklendi. Azure Cloud Shell kullanıyorsanız kubectl zaten yüklüdür. Yerel olarak yüklemek için komutunu kullanın az aks install-cli .
  • jq kurulu, dağıtım doğrulanırken Terraform durumunu çözümlemek için kullanılır. Azure Cloud Shell’de jq zaten yüklüdür.

AKS tarafından yönetilen ACR ile ağdan izole edilmiş bir küme dağıtın

AKS, bu seçenekte bir ACR kaynağı oluşturur, yönetir ve uyumlu hale getirir. Herhangi bir izin atamanız veya ACR'yi yönetmeniz gerekmez. AKS, ağdan yalıtılmış kümede kullanılan önbellek kurallarını, özel bağlantıyı ve özel uç noktayı yönetir.

Ağdan yalıtılmış küme oluşturma

Ağdan yalıtılmış bir AKS kümesi oluştururken aşağıdaki özel küme modlarından birini seçin: Private Link tabanlı veya API Sunucusu Sanal Ağ Tümleştirmesi.

Yapıt kaynağını ve giden türünü ağ yalıtımı gereksinimlerinize göre ayarlayın.

Parametre Kabul edilen değerler / efekt
--bootstrap-artifact-source Directgörüntüleri doğrudan Microsoft Artifact Registry'den (MAR) çeker ve ağdan yalıtılmış değildir. Cache özel bir ACR'den görüntü çeker ve ağdan yalıtılır.
--outbound-type none küme için giden bağlantıları yapılandırmaz, bu nedenle bunları yapılandırabilirsiniz. block (önizleme) tüm giden bağlantıları engeller.

az aks create komutunu , --bootstrap-artifact-sourceve --enable-private-cluster parametreleriyle --outbound-typeçalıştırarak özel bir bağlantı tabanlı ağ yalıtılmış kümesi oluşturun.

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

API Server Sanal Ağ Tümleştirmesi

az aks create komutunu --bootstrap-artifact-source, --enable-private-cluster, --enable-apiserver-vnet-integration ve --outbound-type parametreleriyle çalıştırarak API Sunucusu VNet Entegrasyonu ile yapılandırılmış ağ yalıtımlı bir küme oluşturun.

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

Mevcut AKS kümesini ağ yalıtılmış türüne güncelleştirme

Yeni bir küme oluşturmak yerine var olan bir AKS kümesinde ağ yalıtımını etkinleştirmeyi tercih ediyorsanız az aks update komutunu kullanın.

Mevcut bir AKS kümesinde ağ yalıtılmış özelliğini etkinleştirmek için, önce aşağıdaki komutu çalıştırarak güncelleştirin bootstrap-artifact-source:

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

Ardından tüm mevcut düğüm havuzlarını el ile yeniden oluşturmanız gerekir:

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

Uyarı

İlk yeniden görüntüleme tamamlanana kadar dışa aktarımın mevcut kalmasını sağlamalısınız. Yeniden görüntüleme işleminin tamamlanıp tamamlanmadığını kontrol etmek için şunu çalıştırın:

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

Yeniden imaj tamamlanana kadar bekleyin ve emin olun, ardından outbound-type'yi güncellemek için aşağıdaki komutu çalıştırın:

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

Önemli

Yapıt kaynağını Cache olarak güncelleştirdikten sonra kümenin düğüm havuzlarını hemen yeniden görselleştirmeyi unutmayın. Aksi takdirde, özellik küme için geçerli olmaz.

Kendi ACR'iniz ile ağdan izole edilmiş bir küme dağıtma

AKS, kendi (BYO) ACR'nizi getirmeyi destekler. BYO ACR senaryosunu desteklemek için, AKS kümesini oluşturmadan önce bir ACR özel uç noktası ve özel DNS bölgesi yapılandırmanız gerekir.

Aşağıdaki adımlarda bu kaynakların nasıl hazırlayabileceğiniz gösterilmektedir:

  • AKS ve ACR için özel sanal ağ ve alt ağlar.
  • ACR, ACR önbellek kuralı, özel uç nokta ve özel DNS bölgesi.
  • Özelleştirilmiş denetim düzlemi kimliği ve kubelet kimliği.

1. Adım: Sanal ağı ve alt ağları oluşturma

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

2. Adım: Sanal ağ giden bağlantısını devre dışı bırakma (İsteğe bağlı)

Örneğin, varsayılan giden erişimini false olarak ayarlayarak AKS alt ağını özel yapın.

az network vnet subnet update --resource-group ${RESOURCE_GROUP} --vnet-name ${VNET_NAME} --name ${AKS_SUBNET_NAME} --default-outbound false

Desteklenen diğer yöntemler ve geçiş konuları için bkz. Sanal ağ giden bağlantısını devre dışı bırakma.

3. Adım: ACR oluşturma ve yapıt önbelleğini etkinleştirme

  1. Genel ağ erişimi devre dışı bırakılmış şekilde ACR'yi oluşturun.

    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. Kullanıcıların yeni ACR'de MAR kapsayıcı görüntülerini ve ikili dosyalarını önbelleğe almalarına izin vermek için aşağıdaki komutu kullanarak bir ACR önbellek kuralı oluşturun. Önbellek kuralı adı ve depo adları sonraki bölümdeki yönergeleri izlemelidir.

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

Uyarı

BYO ACR ile, ACR önbellek kuralının yukarıda gösterildiği gibi doğru şekilde oluşturulduğundan ve korundığından emin olmak sizin sorumluluğunuzdadır. Bu adım küme oluşturma, çalışma ve yükseltme için kritik öneme sahiptir. Bu önbellek kuralı DEĞİŞTİRİLMEMELİ.

4. Adım: ACR için özel uç nokta oluşturma

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)

5. Adım: Özel DNS bölgesi oluşturma ve kayıt ekleme

adlı privatelink.azurecr.ioözel bir DNS bölgesi oluşturun. Kayıt defteri REST uç noktası ve kayıt defteri veri uç {REGISTRY_NAME}.azurecr.ionoktası {REGISTRY_NAME}.{LOCATION}.data.azurecr.ioiçin kayıtları ekleyin.

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}

6. Adım: Denetim düzlemi ve kubelet kimlikleri oluşturma

Denetim düzlemi kimliği

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 kimliği

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)

Mevcut bir AKS kümesini güncelleştiriyorsanız, önceki kimlik oluşturma komutlarını atlayın ve mevcut kubelet identity nesne kimliğini alın:

KUBELET_IDENTITY_PRINCIPAL_ID=$(az aks show --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --query identityProfile.kubeletidentity.objectId -o tsv)

Kubelet kimliğine ACR çekme izinleri verme

Kayıt defterinin rol atama izinleri modunu denetleyin ve ilgili çekme rolünü seçin. ABAC özellikli kayıt defterleri, Container Registry Repository Reader rolünü kullanır. ABAC özellikli olmayan kayıt defterleri AcrPull rolünü kullanır.

ROLE_ASSIGNMENT_MODE=$(az acr show --name ${REGISTRY_NAME} --resource-group ${RESOURCE_GROUP} --query roleAssignmentMode -o tsv)

if [[ "${ROLE_ASSIGNMENT_MODE}" == "rbac-abac" ]]; then
  ACR_PULL_ROLE="Container Registry Repository Reader"
else
  ACR_PULL_ROLE="AcrPull"
fi

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

Bu kaynakları yapılandırdıktan sonra BYO ACR ile ağdan yalıtılmış AKS kümesini oluşturmaya devam edebilirsiniz.

7. Adım: BYO ACR kullanarak ağdan yalıtılmış küme oluşturma

Ağdan yalıtılmış bir küme oluşturduğunuzda, şu özel küme modlarından birini seçin: özel bağlantı tabanlı veya API Server Sanal Ağ Tümleştirmesi.

Yapıt kaynağını ve giden türünü ağ yalıtımı gereksinimlerinize göre ayarlayın.

Parametre Kabul edilen değerler / efekt
--bootstrap-artifact-source Directgörüntüleri doğrudan Microsoft Artifact Registry'den (MAR) çeker ve ağdan yalıtılmış değildir. Cache özel bir ACR'den görüntü çeker ve ağdan yalıtılır.
--outbound-type none küme için giden bağlantıları yapılandırmaz, bu nedenle bunları yapılandırabilirsiniz. block (önizleme) tüm giden bağlantıları engeller.

az aks create komutunu gerekli parametrelerle çalıştırarak, ACR'nize erişen özel bir bağlantı tabanlı yalıtılmış ağ kümesi oluşturun.

az aks create --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --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 Sanal Ağ Tümleştirmesi

API Server Sanal Ağ Tümleştirmesi ile yapılandırılmış bir ağ yalıtılmış kümesi için önce bir alt ağ oluşturun ve aşağıdaki komutlarla doğru rolü atayın:

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

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

az role assignment create --scope ${SUBNET_ID} --role "Network Contributor" --assignee-object-id ${CLUSTER_IDENTITY_PRINCIPAL_ID} --assignee-principal-type ServicePrincipal

API Server Sanal Ağ Tümleştirmesi ile yapılandırılmış özel bir ağ yalıtılmış kümesi oluşturun ve gerekli parametrelerle az aks create komutunu çalıştırarak ACR'nize erişin.

az aks create --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --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 --enable-apiserver-vnet-integration --apiserver-subnet-id ${APISERVER_SUBNET_ID}

Mevcut AKS kümesini güncelleştirme

Yeni bir küme oluşturmak yerine var olan bir AKS kümesinde ağ yalıtımını etkinleştirmeyi tercih ediyorsanız az aks update komutunu kullanın.

BYO ACR için özel uç nokta ve özel DNS bölgesi oluştururken, mevcut AKS kümesinin mevcut sanal ağını ve alt ağlarını kullanın. Kubelet kimliğine uygun ACR çekme rolünü atadığınızda, mevcut AKS kümesinin mevcut kubelet kimliğini kullanın.

Mevcut bir AKS kümesinde ağ yalıtılmış özelliğini etkinleştirmek için, önce aşağıdaki komutu çalıştırarak güncelleştirin bootstrap-artifact-source:

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

Ardından tüm mevcut düğüm havuzlarını el ile yeniden oluşturmanız gerekir:

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

Uyarı

İlk yeniden görüntüleme tamamlanana kadar dışa aktarımın mevcut kalmasını sağlamalısınız. Yeniden görüntüleme işleminin tamamlanıp tamamlanmadığını kontrol etmek için şunu çalıştırın:

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

Yeniden imaj tamamlanana kadar bekleyin ve emin olun, ardından outbound-type'yi güncellemek için aşağıdaki komutu çalıştırın:

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

Önemli

Yapıt kaynağını Cache olarak güncelleştirdikten sonra kümenin düğüm havuzlarını hemen yeniden görselleştirmeyi unutmayın. Aksi takdirde, özellik küme için geçerli olmaz.

ACR kimliğinizi güncelleştirme

Ağdan yalıtılmış bir kümeyle kullanılan özel ACR'yi güncelleştirebilirsiniz. ACR kaynak kimliğini tanımlamak için komutunu kullanın az aks show .

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

ACR kimliğini güncelleme, az aks update komutunun --bootstrap-artifact-source ve --bootstrap-container-registry-resource-id parametreleriyle çalıştırılmasıyla gerçekleştirilir.

az aks update --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --bootstrap-artifact-source Cache --bootstrap-container-registry-resource-id <new-byo-acr-resource-id>

Mevcut bir kümede ACR Kimliğini güncelleştirdiğinizde, tüm mevcut düğümleri el ile yeniden görselleştirmeniz gerekir.

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

Önemli

Ağdan yalıtılmış küme özelliğini etkinleştirdikten sonra kümenin düğüm havuzlarını yeniden oluşturmayı unutmayın. Aksi takdirde, özellik küme için geçerli olmaz.

Terraform ile ağdan yalıtılmış küme dağıtma

Bu Terraform örneği, bu makalenin önceki bölümlerinde açıklanan AKS tarafından yönetilen ACR seçeneğini kullanarak ağdan yalıtılmış bir küme dağıtır. AzureRM sağlayıcısı henüz bu örneğin kullandığı ağdan yalıtılmış önyükleme ayarlarının tümünü kullanıma sunmadığından, örnek, yönetilen küme kaynağını gerekli API sürümüne dağıtmak için AzAPI sağlayıcısını kullanır. Kendi ACR’nizi getirme (BYO) seçeneği için bir Terraform örneği şu anda henüz mevcut değildir. BYO ACR'yi kullanmak için bu makalenin önceki bölümlerindeki Azure CLI yönergelerini izleyin.

Örnek aşağıdaki kaynakları dağıtır:

  • Bir kaynak grubu (Microsoft.Resources/resourceGroups).
  • Ağdan yalıtılmış bir AKS kümesi (Microsoft.ContainerService/managedClusters) kullanan:
    • Sistem tarafından atanan yönetilen kimlik.
    • Otomatik ölçeklendirme devre dışı bırakılmış, bir Standard_D2s_v3 düğüm içeren tek bir sistem düğümü havuzu.
    • outboundType none olarak ayarlanmış azure ağ eklentisi; böylece kümenin önyükleme için dışa giden ağ bağımlılıkları olmaz.
    • apiServerAccessProfile.enablePrivateCluster trueolarak ayarlanır ve özel bağlantı tabanlı bir özel küme oluşturulur.
    • bootstrapProfile.artifactSource Cacheolarak ayarlanır, böylece AKS doğrudan Microsoft Artifact Registry'den (MAR) çekmek yerine kümeyi önyüklemek için kendi ACR önbelleğini oluşturur, yönetir ve uzlaştırır. Bu makalede daha önce açıklandığı gibi, bu ACR'yi kendiniz oluşturmanız veya yönetmeniz gerekmez ve AKS, ağdan yalıtılmış kümenin kullandığı önbellek kurallarını, özel bağlantıyı ve özel uç noktayı işler.

Küme, dağıtım bölgesinde desteklenen varsayılan Kubernetes sürümüyle oluşturulur. Belirli bir sürümü sabitlemek için, kubernetesVersion içindeki kümenin main.tf bloğuna properties ekleyin ve az aks get-versions komutunu kullanarak sürümün bölgede kullanılabildiğini doğrulayın.

  1. Örnek Terraform kodunu test etmek için bir dizin oluşturun ve bu dizine geçin.

  2. adlı main.tf bir dosya oluşturun ve aşağıdaki test edilmiş örnek yapılandırmayı bu dosyaya kopyalayın.

    terraform {
      required_version = ">= 1.6.0"
    
      required_providers {
        azapi = {
          source  = "Azure/azapi"
          version = "~> 2.0"
        }
        random = {
          source  = "hashicorp/random"
          version = "~> 3.6"
        }
      }
    }
    
    provider "azapi" {}
    
    resource "random_string" "suffix" {
      length  = 6
      upper   = false
      special = false
    }
    
    locals {
      location            = "westus2"
      resource_group_name = "rg-aks-network-isolated-${random_string.suffix.result}"
      aks_name            = "aks-netisolated-${random_string.suffix.result}"
      dns_prefix          = "aksnetiso${random_string.suffix.result}"
    }
    
    resource "azapi_resource" "resource_group" {
      type     = "Microsoft.Resources/resourceGroups@2024-03-01"
      name     = local.resource_group_name
      location = local.location
    }
    
    resource "azapi_resource" "aks_cluster" {
      type      = "Microsoft.ContainerService/managedClusters@2025-08-01"
      name      = local.aks_name
      parent_id = azapi_resource.resource_group.id
      location  = local.location
    
      identity {
        type = "SystemAssigned"
      }
    
      body = {
        properties = {
          dnsPrefix = local.dns_prefix
          agentPoolProfiles = [
            {
              name              = "systempool"
              count             = 1
              vmSize            = "Standard_D2s_v3"
              mode              = "System"
              osType            = "Linux"
              type              = "VirtualMachineScaleSets"
              enableAutoScaling = false
            }
          ]
          networkProfile = {
            networkPlugin = "azure"
            outboundType  = "none"
          }
          apiServerAccessProfile = {
            enablePrivateCluster = true
          }
          bootstrapProfile = {
            artifactSource = "Cache"
          }
        }
      }
    }
    

Terraform'ı başlatma

Terraform dağıtımını başlatmak için komutunu çalıştırın terraform init . Bu komut, bu örnekteki kaynakları yönetmek için gereken azapi ve random sağlayıcılarını indirir.

terraform init -upgrade

Yapılandırmayı biçimlendirme ve doğrulama

Yapılandırma dosyasını biçimlendirmek için terraform validate komutunu, yapılandırmanın sözdizimsel olarak geçerli olduğunu doğrulamak içinse terraform fmt komutunu çalıştırın.

terraform fmt
terraform validate

Terraform için bir yürütme planı oluşturun

Yürütme planı oluşturmak için komutunu çalıştırın terraform plan .

terraform plan -out main.tfplan

Terraform yürütme planını uygula

yürütme planını Azure aboneliğinize uygulamak için komutunu çalıştırınterraform apply.

terraform apply main.tfplan

Kaynak grubunu ve özel, ağdan yalıtılmış AKS kümesini oluşturma işleminin tamamlanması birkaç dakika sürer.

Dağıtımı doğrulayın.

Bu örnek Terraform çıktılarını tanımlamaz; bu nedenle, terraform show -json tamamlandıktan sonra oluşturulan kaynak grubu ve küme adlarını kaynak durumundan almak için terraform apply ile jq kullanın. Her iki kaynağı da azapi sağlayıcısı ile yönetirsiniz ve bunların name özniteliği çözümlenmiş kaynak adını içerir.

RESOURCE_GROUP=$(terraform show -json | jq -r '.values.root_module.resources[] | select(.address=="azapi_resource.resource_group") | .values.name')
AKS_NAME=$(terraform show -json | jq -r '.values.root_module.resources[] | select(.address=="azapi_resource.aks_cluster") | .values.name')

az aks show komutunu kullanarak kümenin beklenen ağ yalıtımı ayarlarıyla oluşturulduğunu doğrulayın.

az aks show --resource-group $RESOURCE_GROUP --name $AKS_NAME --query "{outboundType:networkProfile.outboundType, artifactSource:bootstrapProfile.artifactSource, privateCluster:apiServerAccessProfile.enablePrivateCluster}"

Çıktı, true öğesinin artifactSource olarak ayarlandığını, none öğesinin outboundType olarak ayarlandığını ve Cache öğesinin privateCluster olarak ayarlandığını göstererek kümenin ağdan yalıtılmış olduğunu ve AKS tarafından yönetilen ACR önbelleğinden önyükleme yaptığını doğrular.

Kümeye bağlanma

Bu özel bir küme olduğundan, kümenin özel uç noktasına ağ üzerinden erişimi olan bir istemciden bağlanın; örneğin, aynı veya eşlenmiş sanal ağda bulunan bir VM'den ya da kümenin sanal ağına bağlıysa Azure Cloud Shell'den. komutunu kullanarak az aks get-credentials küme kimlik bilgilerini alın ve ardından komutunu kullanarak kubectl get nodes bağlantıyı doğrulayın.

az aks get-credentials --resource-group $RESOURCE_GROUP --name $AKS_NAME
kubectl get nodes

Kaynakları temizle

Bu makalede oluşturulan kaynaklara artık ihtiyacınız yoksa, daha fazla ücret tahsil edilmemesi için bunları kaldırın.

Warning

Çalıştırıldığında terraform destroy , kaynak grubu ve AKS kümesi de dahil olmak üzere bu yapılandırma için Terraform durum dosyasında izlenen her kaynak kaldırılır. Planı yok etmeden önce dikkatle gözden geçirin ve paylaşılan veya üretim altyapısına karşı çalıştırmaktan kaçının.

Terraform’un neleri kaldıracağını gözden geçirmek için terraform plan bayrağıyla -destroy komutunu çalıştırın.

terraform plan -destroy -out main.destroy.tfplan

Yok etme planını uygulamak ve bu örnek tarafından oluşturulan tüm kaynakları kaldırmak için komutunu çalıştırın terraform apply .

terraform apply main.destroy.tfplan

AKS'de ağdan yalıtılmış kümenin etkinleştirildiğini doğrulama

Ağdan yalıtılmış küme özelliğinin etkinleştirildiğini doğrulamak için komutunu kullanın az aks show .

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

Aşağıdaki çıktı, none giden türüyle yapılandırılmış ağdan yalıtılmış bir kümeyi göstermektedir. outboundType değerinin none veya block olarak ayarlandığını ve artifactSource değerinin Cache olarak ayarlandığını doğrulayın. containerRegistryId alanı, önyükleme amacıyla kullanılan ACR'yi belirtir.

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

AKS'de ağdan yalıtılmış kümeyi devre dışı bırakma

Ağdan yalıtılmış küme özelliğini devre dışı bırakmak için az aks update komutunu --bootstrap-artifact-source ve --outbound-type parametreleriyle çalıştırın.

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

Mevcut bir kümede özelliği devre dışı bırakırsanız, tüm mevcut düğümleri el ile yeniden görselleştirmeniz gerekir.

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

Önemli

Ağdan yalıtılmış küme özelliğini devre dışı bırakdıktan sonra kümenin düğüm havuzlarını yeniden görselleştirmeyi unutmayın. Aksi takdirde, özellik küme için geçerli olmaz.

Sorun giderme

Görselleri çekmede başarısızlık gibi sorunlar yaşıyorsanız, Ağ yalıtımlı Azure Kubernetes Hizmeti (AKS) küme sorunlarını giderme kısmına bakın.

Sonraki adımlar

Azure Güvenlik Duvarı kullanarak giden kısıtlama yapılandırmasını ayarlamak istiyorsanız AKS'de Azure Güvenlik Duvarı kullanarak çıkış trafiğini denetleme adresini ziyaret edin.

Podların kendi aralarında iletişim kurma şeklini ve küme içindeki Doğu-Batı trafik kısıtlamalarını kısıtlamak istiyorsanız bkz . AKS'de ağ ilkelerini kullanarak podlar arasındaki trafiğin güvenliğini sağlama.