Aracılığıyla paylaş


AKS'de ağ ilkelerini kullanarak podlar arasındaki trafiğin güvenliğini sağlama

Kubernetes'te modern, mikro hizmet tabanlı uygulamalar çalıştırdığınızda, genellikle hangi bileşenlerin birbiriyle iletişim kurabileceğini denetlemek istersiniz. Azure Kubernetes Service (AKS) kümesindeki podlar arasında trafiğin nasıl akabileceğine en az ayrıcalık ilkesi uygulanmalıdır. Arka uç uygulamalarına doğrudan gelen trafiği engellemek istediğinizi varsayalım. Kubernetes'teki ağ ilkesi özelliği, kümedeki podlar arasında giriş ve çıkış trafiği için kurallar tanımlamanıza olanak tanır.

Bu makalede, AKS'de podlar arasındaki trafik akışını denetlemek için ağ ilkesi altyapısının nasıl yükleneceği ve Kubernetes ağ ilkelerinin nasıl oluşturulacağı gösterilmektedir. Ağ ilkeleri AKS'deki Linux tabanlı veya Windows tabanlı düğümler ve podlar için kullanılabilir.

Ağ ilkesine genel bakış

AKS kümesindeki tüm podlar, varsayılan olarak sınırlama olmadan trafik gönderebilir ve alabilir. Güvenliği geliştirmek için trafik akışını denetleen kurallar tanımlayabilirsiniz. Arka uç uygulamaları genellikle yalnızca gerekli ön uç hizmetlerine maruz bırakılır, örneğin. Veya veritabanı bileşenlerine yalnızca bunlara bağlanan uygulama katmanları erişebilir.

Ağ ilkesi, podlar arasındaki iletişim için erişim ilkelerini tanımlayan bir Kubernetes belirtimidir. Ağ ilkelerini kullandığınızda, trafik göndermek ve almak için sıralı bir kural kümesi tanımlarsınız. Kuralları, bir veya daha fazla etiket seçiciyle eşleşen pod koleksiyonuna uygularsınız.

Ağ ilkesi kuralları YAML bildirimleri olarak tanımlanır. Ağ ilkeleri, dağıtım veya hizmet de oluşturan daha geniş bir bildirimin parçası olarak eklenebilir.

AKS'de ağ ilkesi seçenekleri

Azure, ağ ilkelerini zorlamak için üç Ağ İlkesi altyapısı sağlar:

Cilium, önerilen Ağ İlkesi altyapımızdır. Cilium, genellikle "IPTable'lardan" daha verimli olan Linux Berkeley Paket Filtresi'ni (BPF) kullanarak trafikte ağ ilkesi uygular. Cilium tarafından desteklenen Azure CNI belgelerindeki diğer ayrıntılara bakın.
Belirtilen ilkeleri zorunlu kılmak için Linux için Azure Ağ İlkesi Yöneticisi Linux IPTable'ları kullanır. Windows için Azure Ağ İlkesi Yöneticisi, Konak Ağ Hizmeti (HNS) ACLPolicies kullanır. İlkeler izin verilen ve izin verilmeyen IP çiftlerine çevrilir. Bu çiftler daha sonra veya HNS ACLPolicy filtre kuralları olarak IPTable programlanmıştır.

Ağ İlkesi altyapıları arasındaki farklar: Cilium, Azure NPM ve Calico

Özellik Azure Ağ İlkesi Yöneticisi Calico Cilium
Desteklenen platformlar Linux, Windows Server 2022 (Önizleme). Linux, Windows Server 2019 ve 2022. Linux.
Desteklenen ağ seçenekleri Azure Container Networking Interface (CNI). Azure CNI (Linux, Windows Server 2019 ve 2022) ve kubenet (Linux). Azure CNI.
Kubernetes belirtimiyle uyumluluk Desteklenen tüm ilke türleri Tüm ilke türleri desteklenir. Tüm ilke türleri desteklenir.
Diğer özellikler Yok. Genel Ağ İlkesi, Genel Ağ Kümesi ve Konak Uç Noktasından oluşan genişletilmiş ilke modeli. Bu genişletilmiş özellikleri yönetmek için CLI kullanma calicoctl hakkında daha fazla bilgi için bkz . calicoctl kullanıcı başvurusu. Yok.
Destek Azure Destek ve Mühendislik ekibi tarafından desteklenir. Azure Destek ve Mühendislik ekibi tarafından desteklenir. Azure Destek ve Mühendislik ekibi tarafından desteklenir.

Azure Ağ İlkesi Yöneticisi'nin sınırlamaları

Not

Linux için Azure NPM ile 250 düğüm ve 20.000 poddan fazla ölçeklendirmeye izin vermiyoruz. Bu sınırların ötesine ölçeklendirmeye çalışırsanız Bellek Yetersiz (OOM) hatalarıyla karşılaşabilirsiniz. Daha iyi ölçeklenebilirlik ve IPv6 desteği için ve aşağıdaki sınırlamalar önemliyse, ağ ilkesi altyapısı olarak Cilium'u kullanmak için Cilium Tarafından Desteklenen Azure CNI'yi kullanmanızı veya yükseltmenizi öneririz.

Azure NPM, IPv6'ları desteklemez. Aksi takdirde, Linux'taki ağ ilkesi belirtimlerini tam olarak destekler.

Windows'da Azure NPM, ağ ilkesi belirtimlerinin aşağıdaki özelliklerini desteklemez:

  • Adlandırılmış bağlantı noktaları.
  • Akış Denetimi İletim Protokolü (SCTP).
  • Negatif eşleşme etiketi veya ad alanı seçicileri. Örneğin, dışındaki debug=truetüm etiketler.
  • except sınıfsız etki alanları arası yönlendirme (CIDR) blokları (özel durumlarla CIDR).

Not

Desteklenmeyen bir ağ ilkesi oluşturulursa Azure Ağ İlkesi Yöneticisi pod günlükleri bir hata kaydeder.

Ağ ilkelerini düzenleme/silme

Bazı nadir durumlarda, "yeterince büyük" bir ağ ilkesini düzenlerken veya silerken etkilenen düğümlerde podlara/podlardan yeni bağlantılar için geçici, beklenmeyen bağlantılara neden olabilecek bir yarış durumuna çarpma olasılığı vardır. Bu yarış durumuna basmak hiçbir zaman etkin bağlantıları etkilemez.

Bu yarış durumu bir düğüm için oluşursa, bu düğümdeki Azure NPM podu güvenlik kurallarını güncelleştiremeyen bir duruma girer ve bu durum etkilenen düğümdeki podlara/podlardan yeni bağlantılar için beklenmeyen bağlantıya neden olabilir. Sorunu azaltmak için, Azure NPM podu bu duruma girdikten yaklaşık 15 saniye sonra otomatik olarak yeniden başlatılır. Azure NPM etkilenen düğümde yeniden başlatılırken tüm güvenlik kurallarını siler ve ardından tüm ağ ilkeleri için güvenlik kurallarını yeniden uygular. Tüm güvenlik kuralları yeniden uygulanırken, etkilenen düğümdeki podlara/podlardan yeni bağlantılar için geçici, beklenmeyen bir bağlantı olasılığı vardır.

Bu yarış durumuna çarpma olasılığını sınırlamak için ağ ilkesinin boyutunu küçültebilirsiniz. Bu sorun büyük olasılıkla birkaç ipBlock bölümü olan bir ağ ilkesinde oluşur. Dört veya daha az ipBlock bölümü olan bir ağ ilkesinin soruna ulaşma olasılığı daha düşüktür.

Başlamadan önce

Azure CLI sürüm 2.0.61 veya üzerinin yüklü ve yapılandırılmış olması gerekir. Sürümü bulmak için az --version komutunu çalıştırın. Yüklemeniz veya yükseltmeniz gerekirse, bkz. Azure CLI yükleme.

AKS kümesi oluşturma ve ağ ilkesini etkinleştirme

Ağ ilkelerinin nasıl çalıştığını görmek için, ağ ilkesini destekleyen bir AKS kümesi oluşturur ve ilke ekleme üzerinde çalışırsınız.

Azure Ağ İlkesi Yöneticisi'ni kullanmak için Azure CNI eklentisini kullanmanız gerekir. Calico, Azure CNI eklentisiyle veya Kubenet CNI eklentisiyle kullanılabilir.

Aşağıdaki örnek betik, sistem tarafından atanan kimliğe sahip bir AKS kümesi oluşturur ve Azure Ağ İlkesi Yöneticisi'ni kullanarak ağ ilkesini etkinleştirir.

Not

Calico, veya --network-plugin kubenet parametreleriyle --network-plugin azure kullanılabilir.

Sistem tarafından atanan bir kimlik kullanmak yerine, kullanıcı tarafından atanan bir kimlik de kullanabilirsiniz. Daha fazla bilgi için bkz . Yönetilen kimlikleri kullanma.

Azure Ağ İlkesi Yöneticisi'nin etkin olduğu bir AKS kümesi oluşturma - Yalnızca Linux

Bu bölümde, Linux düğüm havuzları ve Azure Ağ İlkesi Yöneticisi'nin etkin olduğu bir küme oluşturacaksınız.

Başlamak için ve $CLUSTER_NAME değişkenleri için $RESOURCE_GROUP_NAME değerleri değiştirirsiniz.

$RESOURCE_GROUP_NAME=myResourceGroup-NP
$CLUSTER_NAME=myAKSCluster
$LOCATION=canadaeast

AKS kümesini oluşturun ve ve network-policyiçin network-plugin belirtinazure.

Küme oluşturmak için aşağıdaki komutu kullanın:

az aks create \
    --resource-group $RESOURCE_GROUP_NAME \
    --name $CLUSTER_NAME \
    --node-count 1 \
    --network-plugin azure \
    --network-policy azure \
    --generate-ssh-keys

Azure Ağ İlkesi Yöneticisi'nin etkin olduğu bir AKS kümesi oluşturma - Windows Server 2022 (önizleme)

Bu bölümde, Windows düğüm havuzları ve Azure Ağ İlkesi Yöneticisi'nin etkin olduğu bir küme oluşturacaksınız.

Not

Windows düğümleri olan Azure Ağ İlkesi Yöneticisi yalnızca Windows Server 2022'de kullanılabilir.

aks-preview Azure CLI uzantısını yükleme

Ö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 tarafından kısmen en iyi çaba temelinde 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:

Uzantıyı aks-preview yüklemek için aşağıdaki komutu çalıştırın:

az extension add --name aks-preview

Yayımlanan uzantının en son sürümüne güncelleştirmek için aşağıdaki komutu çalıştırın:

az extension update --name aks-preview

WindowsNetworkPolicyPreview özellik bayrağını kaydetme

WindowsNetworkPolicyPreview Aşağıdaki örnekte gösterildiği gibi az feature register komutunu kullanarak özellik bayrağını kaydedin:

az feature register --namespace "Microsoft.ContainerService" --name "WindowsNetworkPolicyPreview"

Durumun Kayıtlı olarak gösterilmesi birkaç dakika sürer. az feature show komutunu kullanarak kayıt durumunu doğrulayın:

az feature show --namespace "Microsoft.ContainerService" --name "WindowsNetworkPolicyPreview"

Durum Kayıtlı olarak gösterildiğinde az provider register komutunu kullanarak kaynak sağlayıcısının Microsoft.ContainerService kaydını yenileyin:

az provider register --namespace Microsoft.ContainerService

AKS kümesini oluşturma

Şimdi , $CLUSTER_NAMEve $WINDOWS_USERNAME değişkenleri için $RESOURCE_GROUP_NAMEdeğerleri değiştireceksiniz.

$RESOURCE_GROUP_NAME=myResourceGroup-NP
$CLUSTER_NAME=myAKSCluster
$WINDOWS_USERNAME=myWindowsUserName
$LOCATION=canadaeast

Kümenizdeki Windows Server kapsayıcılarınız için yönetici kimlik bilgileri olarak kullanmak üzere bir kullanıcı adı oluşturun. Aşağıdaki komut sizden bir kullanıcı adı ister. olarak $WINDOWS_USERNAMEayarlayın. Bu makaledeki komutların bash kabuğuna girildiğini unutmayın.

echo "Please enter the username to use as administrator credentials for Windows Server containers on your cluster: " && read WINDOWS_USERNAME

Küme oluşturmak için aşağıdaki komutu kullanın:

az aks create \
    --resource-group $RESOURCE_GROUP_NAME \
    --name $CLUSTER_NAME \
    --node-count 1 \
    --windows-admin-username $WINDOWS_USERNAME \
    --network-plugin azure \
    --network-policy azure \
    --generate-ssh-keys

Kümenin oluşturulması birkaç dakika sürer. Varsayılan olarak, kümeniz yalnızca bir Linux düğüm havuzuyla oluşturulur. Windows düğüm havuzlarını kullanmak istiyorsanız, bir tane ekleyebilirsiniz. Bir örnek aşağıda verilmiştir:

az aks nodepool add \
    --resource-group $RESOURCE_GROUP_NAME \
    --cluster-name $CLUSTER_NAME \
    --os-type Windows \
    --name npwin \
    --node-count 1

Calico etkin bir AKS kümesi oluşturma

AKS kümesini oluşturun ve ve --network-policy calicobelirtin--network-plugin azure. Belirtilmesi --network-policy calico , Hem Linux hem de Windows düğüm havuzlarında Calico'ya olanak tanır.

Kümenize Windows düğüm havuzları eklemeyi planlıyorsanız, Windows Server parola gereksinimlerini karşılayan ve windows-admin-password parametrelerini ekleyinwindows-admin-username.

Önemli

Şu anda, Calico 3.17.2 ile Kubernetes sürüm 1.20 veya üzeri kullanılarak Windows düğümleriyle Calico ağ ilkelerinin kullanılması yeni kümelerde kullanılabilir ve Azure CNI ağını kullanmanızı gerektirir. Calico etkin AKS kümelerindeki Windows düğümlerinde de varsayılan olarak Kayan IP etkindir.

Calico'nun önceki sürümlerine sahip Kubernetes 1.20 çalıştıran yalnızca Linux düğüm havuzlarına sahip kümeler için Calico sürümü otomatik olarak 3.17.2 sürümüne yükseltir.

Kümenizdeki Windows Server kapsayıcılarınız için yönetici kimlik bilgileri olarak kullanmak üzere bir kullanıcı adı oluşturun. Aşağıdaki komut sizden bir kullanıcı adı ister. olarak $WINDOWS_USERNAMEayarlayın. Bu makaledeki komutların bash kabuğuna girildiğini unutmayın.

echo "Please enter the username to use as administrator credentials for Windows Server containers on your cluster: " && read WINDOWS_USERNAME
az aks create \
    --resource-group $RESOURCE_GROUP_NAME \
    --name $CLUSTER_NAME \
    --node-count 1 \
    --windows-admin-username $WINDOWS_USERNAME \
    --network-plugin azure \
    --network-policy calico \
    --generate-ssh-keys

Kümenin oluşturulması birkaç dakika sürer. Varsayılan olarak, kümeniz yalnızca bir Linux düğüm havuzuyla oluşturulur. Windows düğüm havuzlarını kullanmak istiyorsanız, bir tane ekleyebilirsiniz. Örneğin:

az aks nodepool add \
    --resource-group $RESOURCE_GROUP_NAME \
    --cluster-name $CLUSTER_NAME \
    --os-type Windows \
    --name npwin \
    --node-count 1

Azure Ağ İlkesi Yöneticisi'ni veya Calico'yu mevcut bir kümeye yükleme

Azure Ağ İlkesi Yöneticisi veya Calico'yu mevcut AKS kümelerine yükleme de desteklenir.

Uyarı

Yükseltme işlemi her düğüm havuzunun aynı anda yeniden görüntüsünün alınması için tetikler. Her düğüm havuzunun ayrı olarak yükseltilmesi desteklenmez. Küme ağındaki tüm kesintiler, düğüm havuzundaki her düğümün yeniden görüntülendiği düğüm görüntüsü yükseltmesine veya Kubernetes sürümü yükseltmesine benzer.

Azure Ağ İlkesi Yöneticisi'ni yüklemek için örnek komut:

az aks update
    --resource-group $RESOURCE_GROUP_NAME \
    --name $CLUSTER_NAME \
    --network-policy azure

Calico'u yüklemek için örnek komut:

Uyarı

Bu uyarı, Calico etkinleştirilmiş Kubenet kümelerini Calico özellikli Azure CNI Yer Paylaşımı'na yükseltmek için geçerlidir.

  • Calico etkinleştirilmiş Kubenet kümelerinde, Calico hem CNI hem de ağ ilkesi altyapısı olarak kullanılır.
  • Azure CNI kümelerinde Calico, CNI olarak değil yalnızca ağ ilkesi zorlaması için kullanılır. Bu, pod başlatması ile Calico'nın poddan giden trafiğe izin vermesi arasında kısa bir gecikmeye neden olabilir.

Bu sorundan kaçınmak için Calico yerine Cilium kullanılması önerilir. Cilium tarafından desteklenen Azure CNI'de Cilium hakkında daha fazla bilgi edinin

az aks update
    --resource-group $RESOURCE_GROUP_NAME \
    --name $CLUSTER_NAME \
    --network-policy calico

Azure NPM veya Calico yüklü olan mevcut bir kümeyi Cilium tarafından desteklenen Azure CNI'ye yükseltme

Ağ İlkesi altyapısı cilium tarafından desteklenen Azure CNI'ye yüklenmiş mevcut bir kümeyi yükseltmek için bkz . Mevcut bir kümeyi Cilium tarafından desteklenen Azure CNI'ye yükseltme

Ağ ilkesi kurulumunu doğrulama

Küme hazır olduğunda az aks get-credentials komutunu kullanarak Kubernetes kümenize bağlanacak şekilde yapılandırınkubectl. Bu komut kimlik bilgilerini indirir ve Kubernetes CLI'yi bunları kullanacak şekilde yapılandırmaktadır:

az aks get-credentials --resource-group $RESOURCE_GROUP_NAME --name $CLUSTER_NAME

Ağ ilkesini doğrulamaya başlamak için örnek bir uygulama oluşturur ve trafik kuralları ayarlarsınız.

İlk olarak, örnek podları çalıştırmak için adlı demo bir ad alanı oluşturun:

kubectl create namespace demo

Şimdi ve serveradlı client kümede iki pod oluşturun.

Not

İstemciyi veya sunucuyu belirli bir düğümde zamanlamak istiyorsanız, pod oluşturma kubectl run komutundaki bağımsız değişkenden önce --command aşağıdaki biti ekleyin:

--overrides='{"spec": { "nodeSelector": {"kubernetes.io/os": "linux|windows"}}}'

Bir server pod oluşturun. Bu pod 80 numaralı TCP bağlantı noktasında hizmet eder:

kubectl run server -n demo --image=k8s.gcr.io/e2e-test-images/agnhost:2.33 --labels="app=server" --port=80 --command -- /agnhost serve-hostname --tcp --http=false --port "80"

Bir client pod oluşturun. Aşağıdaki komut, pod üzerinde Bash çalıştırır client :

kubectl run -it client -n demo --image=k8s.gcr.io/e2e-test-images/agnhost:2.33 --command -- bash

Şimdi ayrı bir pencerede aşağıdaki komutu çalıştırarak sunucu IP'sini alın:

kubectl get pod --output=wide -n demo

Çıkış şöyle görünmelidir:

NAME     READY   STATUS    RESTARTS   AGE   IP            NODE             NOMINATED NODE   READINESS GATES
server   1/1     Running   0          30s   10.224.0.72   akswin22000001   <none>           <none>

Ağ ilkesi olmadan bağlantıyı test etme

İstemcinin kabuğunda aşağıdaki komutu çalıştırarak sunucuyla bağlantıyı doğrulayın. değerini, önceki komutun çalıştırdığı çıktıda bulunan IP'yi kullanarak değiştirin server-ip . Bağlantı başarılı olursa çıkış olmaz.

/agnhost connect <server-ip>:80 --timeout=3s --protocol=tcp

Ağ ilkesiyle bağlantıyı test etme

Ağ ilkeleri eklemek için adlı demo-policy.yaml bir dosya oluşturun ve aşağıdaki YAML bildirimini yapıştırın:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: demo-policy
  namespace: demo
spec:
  podSelector:
    matchLabels:
      app: server
  ingress:
  - from:
    - podSelector:
        matchLabels:
          app: client
    ports:
    - port: 80
      protocol: TCP

YAML bildiriminizin adını belirtin ve kubectl apply kullanarak uygulayın:

kubectl apply –f demo-policy.yaml

Şimdi istemcinin kabuğunda aşağıdaki /agnhost komutu çalıştırarak sunucuyla bağlantıyı doğrulayın:

/agnhost connect <server-ip>:80 --timeout=3s --protocol=tcp

Sunucu ile app=serveretiketlendiğinden ancak istemci etiketlenmediğinden trafikle bağlantı engellenir. Yukarıdaki connect komutu şu çıkışı verir:

TIMEOUT

öğesini etiketlemek client ve sunucuyla bağlantıyı doğrulamak için aşağıdaki komutu çalıştırın. Çıkış hiçbir şey döndürmemelidir.

kubectl label pod client -n demo app=client

Azure Ağ İlkesi Yöneticisi'ni veya Calico'u kaldırma

Gereksinimler:

  • Azure CLI sürüm 2.63 veya üzeri

Not

  • Kaldırma işlemi, Calico tarafından kullanılan Özel Kaynak Tanımlarını (CRD) ve Özel Kaynakları (CR) kaldırmaz. Bu CRD'lerin ve CR'lerin tümü "projectcalico.org" veya "tigera.io" ile biten adlara sahiptir. Bu CRD'ler ve ilişkili CR'ler, Calico başarıyla kaldırıldıktan sonra el ile silinebilir (Calico kaldırılmadan önce CRD'lerin silinmesi kümeyi bozar).
  • Yükseltme, kümedeki hiçbir NetworkPolicy kaynağını kaldırmaz, ancak kaldırma işlemi tamamlandıktan sonra bu ilkeler artık uygulanmaz.

Uyarı

Yükseltme işlemi her düğüm havuzunun aynı anda yeniden görüntüsünün alınması için tetikler. Her düğüm havuzunun ayrı olarak yükseltilmesi desteklenmez. Küme ağındaki tüm kesintiler, düğüm havuzundaki her düğümün yeniden görüntülendiği düğüm görüntüsü yükseltmesine veya Kubernetes sürümü yükseltmesine benzer.

Azure Ağ İlkesi Yöneticisi'ni veya Calico'u bir kümeden kaldırmak için aşağıdaki komutu çalıştırın:

az aks update
    --resource-group $RESOURCE_GROUP_NAME \
    --name $CLUSTER_NAME \
    --network-policy none

Kaynakları temizleme

Bu makalede, bir ad alanı ve iki pod oluşturdunuz ve bir ağ ilkesi uyguladınız. Bu kaynakları temizlemek için kubectl delete komutunu kullanın ve kaynak adını belirtin:

kubectl delete namespace demo

Sonraki adımlar

Ağ kaynakları hakkında daha fazla bilgi için bkz . Azure Kubernetes Service'teki (AKS) uygulamalar için ağ kavramları.

İlkeler hakkında daha fazla bilgi edinmek için bkz . Kubernetes ağ ilkeleri.