Azure Kubernetes Service'te (AKS) Azure Güvenlik Duvarı ile ağ trafiğini sınırlama

AKS'deki Azure Güvenlik Duvarı kullanarak çıkış trafiğini denetlemek için AKS kümeleri için Giden ağ ve FQDN kurallarını kullanmayı öğrenin. bu yapılandırmayı basitleştirmek için Azure Güvenlik Duvarı AKS kümesinden giden trafiği kısıtlayan bir Azure Kubernetes Service (AzureKubernetesService) Tam Etki Alanı Adı (FQDN) etiketi sağlar. Bu makalede, Azure güvenlik duvarı aracılığıyla AKS Kümesi trafik kurallarınızı nasıl yapılandırabileceğiniz gösterilmektedir.

Not

FQDN etiketi, AKS kümeleri için Giden ağ ve FQDN kurallarında listelenen tüm FQDN'leri içerir ve otomatik olarak güncelleştirilir.

Üretim senaryolarında, SNAT bağlantı noktası tükenme sorunlarını önlemek için Azure Güvenlik Duvarı en az 20 ön uç IP'sine sahip olmasını öneririz.

Aşağıdaki bilgiler dağıtımın örnek mimarisini sağlar:

Kilitli topoloji

  • Genel giriş, güvenlik duvarı filtrelerini akmaya zorlanır
    • AKS aracı düğümleri ayrılmış bir alt ağda yalıtılır
    • Azure Güvenlik Duvarı kendi alt akında dağıtılır
    • DNAT kuralı, güvenlik duvarı genel IP'sini yük dengeleyici ön uç IP'sine çevirir
  • Giden istekler, kullanıcı tanımlı bir yol (UDR) kullanarak aracı düğümlerinden Azure Güvenlik Duvarı iç IP'ye başlar
    • AKS aracı düğümlerinden gelen istekler, AKS kümesinin dağıtıldığı alt ağa yerleştirilmiş bir UDR'yi izler
    • Azure Güvenlik Duvarı genel IP ön uçtan sanal ağdan çıkar
    • Güvenlik duvarı ön uç IP adresine giden ve giden genel İnternet veya diğer Azure hizmetlerine erişim
    • AKS denetim düzlemine erişim, güvenlik duvarı genel ön uç IP adresi de dahil olmak üzere API sunucusu yetkili IP aralıkları tarafından korunabilir
  • İç trafik

Ortam değişkenlerini yapılandırma

Kaynak oluşturmalarda kullanılacak bir ortam değişkenleri kümesi tanımlayın.

PREFIX="aks-egress"
RG="${PREFIX}-rg"
LOC="eastus"
PLUGIN=azure
AKSNAME="${PREFIX}"
VNET_NAME="${PREFIX}-vnet"
AKSSUBNET_NAME="aks-subnet"
# DO NOT CHANGE FWSUBNET_NAME - This is currently a requirement for Azure Firewall.
FWSUBNET_NAME="AzureFirewallSubnet"
FWNAME="${PREFIX}-fw"
FWPUBLICIP_NAME="${PREFIX}-fwpublicip"
FWIPCONFIG_NAME="${PREFIX}-fwconfig"
FWROUTE_TABLE_NAME="${PREFIX}-fwrt"
FWROUTE_NAME="${PREFIX}-fwrn"
FWROUTE_NAME_INTERNET="${PREFIX}-fwinternet"

Birden fazla alt ağa sahip bir sanal ağ oluşturma

Biri küme ve diğeri güvenlik duvarı için olmak üzere iki ayrı alt ağ içeren bir sanal ağ sağlayın. İsteğe bağlı olarak, iç hizmet girişi için bir tane oluşturabilirsiniz.

Boş ağ topolojisi

  1. komutunu kullanarak az group create bir kaynak grubu oluşturun.

    az group create --name $RG --location $LOC
    
  2. VE komutlarını kullanarak az network vnet createaz network vnet subnet create AKS kümesini ve Azure Güvenlik Duvarı barındırmak için iki alt ağa sahip bir sanal ağ oluşturun.

    # Dedicated virtual network with AKS subnet
    az network vnet create \
        --resource-group $RG \
        --name $VNET_NAME \
        --location $LOC \
        --address-prefixes 10.42.0.0/16 \
        --subnet-name $AKSSUBNET_NAME \
        --subnet-prefix 10.42.1.0/24
    
    # Dedicated subnet for Azure Firewall (Firewall name can't be changed)
    az network vnet subnet create \
        --resource-group $RG \
        --vnet-name $VNET_NAME \
        --name $FWSUBNET_NAME \
        --address-prefix 10.42.2.0/24
    

Azure Güvenlik Duvarı oluşturma ve ayarlama

Azure Güvenlik Duvarı gelen ve giden kurallarını yapılandırmanız gerekir. Güvenlik duvarının temel amacı, kuruluşların AKS kümesine ve dışına ayrıntılı giriş ve çıkış trafiği kuralları yapılandırmasına olanak tanımaktır.

Önemli

Kümeniz veya uygulamanız aynı veya küçük bir hedef alt kümesine yönlendirilmiş çok sayıda giden bağlantı oluşturuyorsa, ön uç IP'leri başına bağlantı noktalarının üst sınırından kaçınmak için daha fazla güvenlik duvarı ön uç IP'sine ihtiyacınız olabilir.

Birden çok IP ile Azure Güvenlik Duvarı oluşturma hakkında daha fazla bilgi için bkz. Bicep kullanarak birden çok genel IP adresiyle Azure Güvenlik Duvarı oluşturma.

Güvenlik Duvarı ve UDR

  1. komutunu kullanarak az network public-ip create standart bir SKU genel IP kaynağı oluşturun. Bu kaynak Azure Güvenlik Duvarı ön uç adresi olarak kullanılır.

    az network public-ip create -g $RG -n $FWPUBLICIP_NAME -l $LOC --sku "Standard"
    
  2. komutunu kullanarak bir Azure Güvenlik Duvarı oluşturmak için Azure Güvenlik Duvarı CLI uzantısınıaz extension add kaydedin.

    az extension add --name azure-firewall
    
  3. bir Azure Güvenlik Duvarı oluşturun ve komutunu kullanarak DNS proxy'sini az network firewall create--enable-dns-proxytrueetkinleştirin ve olarak ayarlayın.

    az network firewall create -g $RG -n $FWNAME -l $LOC --enable-dns-proxy true
    

genel IP adresinin Azure Güvenlik Duvarı ayarlanması birkaç dakika sürebilir. Hazır olduğunda, daha önce oluşturulan IP adresi güvenlik duvarı ön ucuna atanabilir.

Not

Ağ kurallarında FQDN'yi kullanmak için DNS ara sunucusunun etkinleştirilmesi gerekir. DNS ara sunucusu etkinleştirildiğinde, güvenlik duvarı 53 numaralı bağlantı noktasını dinler ve DNS isteklerini yukarıda belirtilen DNS sunucusuna iletir. Bu, güvenlik duvarının FQDN'yi otomatik olarak çevirmesini sağlar.

  1. komutunu kullanarak az network firewall ip-config create bir Azure Güvenlik Duvarı IP yapılandırması oluşturun.

    az network firewall ip-config create -g $RG -f $FWNAME -n $FWIPCONFIG_NAME --public-ip-address $FWPUBLICIP_NAME --vnet-name $VNET_NAME
    
  2. Önceki komut başarılı olduktan sonra, daha sonra yapılandırma için güvenlik duvarı ön uç IP adresini kaydedin.

    FWPUBLIC_IP=$(az network public-ip show -g $RG -n $FWPUBLICIP_NAME --query "ipAddress" -o tsv)
    FWPRIVATE_IP=$(az network firewall show -g $RG -n $FWNAME --query "ipConfigurations[0].privateIPAddress" -o tsv)
    

Not

Yetkili IP adresi aralıklarıyla AKS API sunucusuna güvenli erişim kullanıyorsanız, güvenlik duvarı genel IP'sini yetkili IP aralığına eklemeniz gerekir.

Azure Güvenlik Duvarı atlamalı bir yol oluşturma

Azure, Azure alt ağları, sanal ağlar ve şirket içi ağlar arasındaki trafiği otomatik olarak yönlendirir. Azure'ın varsayılan yönlendirmelerinden herhangi birini değiştirmek istiyorsanız, bir yol tablosu oluşturabilirsiniz.

Önemli

Giden UDR türü (userDefinedRouting), 0.0.0.0/0 için bir yol ve yol tablosunda NVA'nın sonraki atlama hedefi gerektirir. Yol tablosunun İnternet'e varsayılan 0.0.0.0/0 değeri zaten vardır. Azure'ın Kaynak Ağ Adresi Çevirisi (SNAT) için kullanması gereken bir genel IP adresi olmadan, bu yolu eklemeniz giden İnternet bağlantısı sağlamaz. AKS, İnternet'e işaret eden bir 0.0.0.0/0 yolu oluşturmadığınız, bunun yerine ağ geçidi, NVA vb. oluşturduğunuzu doğrular. Giden UDR türü kullanılırken, loadbalancer türünde bir hizmet yapılandırmadığınız sürece gelen istekler için yük dengeleyici genel IP adresi oluşturulmaz. UDR giden türünü ayarlarsanız AKS, giden istekler için hiçbir zaman genel IP adresi oluşturmaz. Daha fazla bilgi için bkz . Azure Load Balancer için giden kurallar.

  1. komutunu kullanarak az network route-table create belirli bir alt ağ ile ilişkilendirilecek boş bir yol tablosu oluşturun. Yol tablosu, sonraki atlamayı yukarıda oluşturulan Azure Güvenlik Duvarı olarak tanımlar. Her alt ağ ile ilişkili sıfır veya bir yol tablosu olabilir.

    az network route-table create -g $RG -l $LOC --name $FWROUTE_TABLE_NAME
    
  2. komutunu kullanarak az network route-table route create alt ağlar için yönlendirme tablosunda yollar oluşturun.

    az network route-table route create -g $RG --name $FWROUTE_NAME --route-table-name $FWROUTE_TABLE_NAME --address-prefix 0.0.0.0/0 --next-hop-type VirtualAppliance --next-hop-ip-address $FWPRIVATE_IP
    
    az network route-table route create -g $RG --name $FWROUTE_NAME_INTERNET --route-table-name $FWROUTE_TABLE_NAME --address-prefix $FWPUBLIC_IP/32 --next-hop-type Internet
    

Azure'ın varsayılan sistem yollarını geçersiz kılma veya alt ağın yönlendirme tablosuna ek yollar ekleme hakkında bilgi için sanal ağ yönlendirme tablosu belgelerine bakın.

Güvenlik duvarı kuralları ekleme

Not

API sunucusuyla konuşması gereken kube-system veya gatekeeper-system ad alanları dışındaki uygulamalar için, fqdn-tag AzureKubernetesService için uygulama kuralı eklemeye ek olarak API sunucusu IP'sine yönelik 443 numaralı bağlantı noktasına TCP iletişimine izin veren ek bir ağ kuralı gerekir.

Bu bölüm, güvenlik duvarınızda yapılandırmak için kullanabileceğiniz üç ağ kuralını ve bir uygulama kuralını kapsar. Bu kuralları dağıtımınıza göre uyarlamanız gerekebilir.

  • İlk ağ kuralı, TCP aracılığıyla 9000 numaralı bağlantı noktasına erişime izin verir.
  • İkinci ağ kuralı UDP aracılığıyla 1194 ve 123 numaralı bağlantı noktasına erişime izin verir. 21Vianet tarafından sağlanan Microsoft Azure'a dağıtıyorsanız bkz . 21Vianet tarafından sağlanan Azure gerekli ağ kuralları. Bu iki kural da yalnızca Doğu ABD olan bu makalede Azure Bölgesi CIDR'ye yönlendiren trafiğe izin verir.
  • Üçüncü ağ kuralı UDP aracılığıyla 123 numaralı bağlantı noktasını FQDN'ye ntp.ubuntu.com açar. Bir FQDN'yi ağ kuralı olarak eklemek, Azure Güvenlik Duvarı belirli özelliklerinden biridir, bu nedenle kendi seçeneklerinizi kullanırken bunu uyarlamanız gerekir.
  • Dördüncü ve beşinci ağ kuralları GitHub Container Registry (ghcr.io) ve Docker Hub'dan (docker.io) kapsayıcı çekme erişimine izin verir.
  1. komutunu kullanarak az network firewall network-rule create ağ kurallarını oluşturun.

    az network firewall network-rule create -g $RG -f $FWNAME --collection-name 'aksfwnr' -n 'apiudp' --protocols 'UDP' --source-addresses '*' --destination-addresses "AzureCloud.$LOC" --destination-ports 1194 --action allow --priority 100
    
    az network firewall network-rule create -g $RG -f $FWNAME --collection-name 'aksfwnr' -n 'apitcp' --protocols 'TCP' --source-addresses '*' --destination-addresses "AzureCloud.$LOC" --destination-ports 9000
    
    az network firewall network-rule create -g $RG -f $FWNAME --collection-name 'aksfwnr' -n 'time' --protocols 'UDP' --source-addresses '*' --destination-fqdns 'ntp.ubuntu.com' --destination-ports 123
    
    az network firewall network-rule create -g $RG -f $FWNAME --collection-name 'aksfwnr' -n 'ghcr' --protocols 'TCP' --source-addresses '*' --destination-fqdns ghcr.io pkg-containers.githubusercontent.com --destination-ports '443'
    
    az network firewall network-rule create -g $RG -f $FWNAME --collection-name 'aksfwnr' -n 'docker' --protocols 'TCP' --source-addresses '*' --destination-fqdns docker.io registry-1.docker.io production.cloudflare.docker.com --destination-ports '443'
    
  2. komutunu kullanarak az network firewall application-rule create uygulama kuralını oluşturun.

    az network firewall application-rule create -g $RG -f $FWNAME --collection-name 'aksfwar' -n 'fqdn' --source-addresses '*' --protocols 'http=80' 'https=443' --fqdn-tags "AzureKubernetesService" --action allow --priority 100
    

Azure Güvenlik Duvarı hakkında daha fazla bilgi edinmek için Azure Güvenlik Duvarı belgelerine bakın.

Yol tablosunu AKS ile ilişkilendirme

Kümeyi güvenlik duvarıyla ilişkilendirmek için, kümenin alt ağı için ayrılmış alt ağ yukarıda oluşturulan yol tablosuna başvurmalıdır. az network vnet subnet update Yönlendirme tablosunu AKS ile ilişkilendirmek için komutunu kullanın.

az network vnet subnet update -g $RG --vnet-name $VNET_NAME --name $AKSSUBNET_NAME --route-table $FWROUTE_TABLE_NAME

Giden kurallarınıza uyarak aks kümesi dağıtma

Artık aks kümesini mevcut sanal ağa dağıtabilirsiniz. Giden trafiğin userDefinedRouting güvenlik duvarı üzerinden zorlanmasını ve başka çıkış yolunun mevcut olmamasını sağlayan giden türünü kullanacaksınız. Giden loadBalancer türü de kullanılabilir.

aks-deploy

Dağıtılacak hedef alt ağ, ortam değişkeniyle $SUBNETIDtanımlanır. Aşağıdaki komutu kullanarak alt ağ kimliğinin değerini ayarlayın:

SUBNETID=$(az network vnet subnet show -g $RG --vnet-name $VNET_NAME --name $AKSSUBNET_NAME --query id -o tsv)

Alt ağda zaten var olan UDR'yi kullanmak için giden türünü tanımlayacaksınız. Bu yapılandırma AKS'nin yük dengeleyici için kurulum ve IP sağlamayı atlamasını sağlar.

İpucu

Küme dağıtımına özel kümeler gibi ek özellikler ekleyebilirsiniz.

API sunucusu erişimini yalnızca güvenlik duvarının genel uç noktasıyla sınırlamak için API sunucusu yetkili IP aralıkları için AKS özelliğini ekleyebilirsiniz. Yetkili IP aralıkları özelliği diyagramda isteğe bağlı olarak belirtilir. API sunucusu erişimini sınırlamak için yetkili IP aralığı özelliğini etkinleştirirken, geliştirici araçlarınız güvenlik duvarının sanal ağından bir sıçrama kutusu kullanmalı veya tüm geliştirici uç noktalarını yetkili IP aralığına eklemelisiniz.


Not

Kendi kubelet yönetilen kimliğinizi belirtmezseniz AKS düğüm kaynak grubunda sistem tarafından atanan bir kubelet kimliği oluşturur.

Kullanıcı tanımlı yönlendirme için, sistem tarafından atanan kimlik yalnızca CNI ağ eklentisini destekler.

komutunu kullanarak CNI ağ eklentisiyle sistem tarafından atanan yönetilen kimliği kullanarak az aks create bir AKS kümesi oluşturun.

az aks create -g $RG -n $AKSNAME -l $LOC \
  --node-count 3 \
  --network-plugin azure \
  --outbound-type userDefinedRouting \
  --vnet-subnet-id $SUBNETID \
  --api-server-authorized-ip-ranges $FWPUBLIC_IP

API sunucusuna geliştirici erişimini etkinleştirme

Önceki adımda kümeniz için yetkili IP aralıkları kullandıysanız, API sunucusuna oradan erişebilmeniz için geliştirici aracı IP adreslerinizi onaylı IP aralıklarının AKS kümesi listesine eklemeniz gerekir. Ayrıca, güvenlik duvarının sanal ağındaki ayrı bir alt ağ içinde gerekli araçlarla bir sıçrama kutusu yapılandırabilirsiniz.

  1. Aşağıdaki komutu kullanarak IP adresinizi alın:

    CURRENT_IP=$(dig @resolver1.opendns.com ANY myip.opendns.com +short)
    
  2. komutunu kullanarak az aks update IP adresini onaylanan aralıklara ekleyin.

    az aks update -g $RG -n $AKSNAME --api-server-authorized-ip-ranges $CURRENT_IP/32
    
  3. komutunu kullanarak AKS kümenize bağlanacak şekilde az aks get-credentials yapılandırınkubectl.

    az aks get-credentials -g $RG -n $AKSNAME
    

AKS'de genel hizmet dağıtma

Artık hizmetleri kullanıma sunma ve uygulamaları bu kümeye dağıtmaya başlayabilirsiniz. Bu örnekte bir genel hizmeti kullanıma sağlayacağız, ancak iç yük dengeleyici kullanarak bir iç hizmeti de kullanıma sunmanız gerekebilir.

Kamu Hizmeti DNAT

  1. Oluşturulacak tüm kaynakları görmek için AKS Store Tanıtım hızlı başlangıç bildirimini gözden geçirin.

  2. komutunu kullanarak hizmeti dağıtın kubectl apply .

    kubectl apply -f https://raw.githubusercontent.com/Azure-Samples/aks-store-demo/main/aks-store-quickstart.yaml
    

Azure Güvenlik Duvarı üzerinden gelen trafiğe izin ver

Önemli

Çıkış trafiğini kısıtlamak için Azure Güvenlik Duvarı kullandığınızda ve tüm çıkış trafiğini zorlamak için bir UDR oluşturduğunuzda, giriş trafiğine doğru şekilde izin vermek için Azure Güvenlik Duvarı uygun bir DNAT kuralı oluşturduğunuzdan emin olun. UDR ile Azure Güvenlik Duvarı kullanılması, asimetrik yönlendirme nedeniyle giriş kurulumunu bozar. AKS alt ağdaki varsayılan bir yol güvenlik duvarının özel IP adresine gidiyorsa, ancak genel yük dengeleyici kullanıyorsanız ( giriş veya Kubernetes hizmeti) bu loadBalancersorun oluşur. Bu durumda, gelen yük dengeleyici trafiği genel IP adresi üzerinden alınır, ancak dönüş yolu güvenlik duvarının özel IP adresinden geçer. Güvenlik duvarı durum bilgisi olduğundan, güvenlik duvarı yerleşik bir oturumun farkında olmadığından geri dönen paketi bırakır. Azure Güvenlik Duvarı giriş veya hizmet yük dengeleyicinizle tümleştirmeyi öğrenmek için bkz. azure Standart Load Balancer ile Azure Güvenlik Duvarı tümleştirme.

Gelen bağlantıyı yapılandırmak için Azure Güvenlik Duvarı bir DNAT kuralı yazmanız gerekir. Kümenize bağlantıyı test etmek için, güvenlik duvarı ön uç genel IP adresi için iç hizmet tarafından kullanıma sunulan iç IP'ye yönlendirecek bir kural tanımlanır. Hedef adres özelleştirilebilir. Çevrilen adres, iç yük dengeleyicinin IP adresi olmalıdır. Çevrilen bağlantı noktası, Kubernetes hizmetiniz için kullanıma sunulan bağlantı noktası olmalıdır. Kubernetes hizmeti tarafından oluşturulan yük dengeleyiciye atanan iç IP adresini de belirtmeniz gerekir.

  1. komutunu kullanarak kubectl get services yük dengeleyiciye atanan iç IP adresini alın.

    kubectl get services
    

    IP adresi, aşağıdaki örnek çıktıda EXTERNAL-IP gösterildiği gibi sütunda listelenir:

    NAME              TYPE           CLUSTER-IP     EXTERNAL-IP   PORT(S)              AGE
    kubernetes        ClusterIP      10.0.0.1       <none>        443/TCP              9m10s
    order-service     ClusterIP      10.0.104.144   <none>        3000/TCP             11s
    product-service   ClusterIP      10.0.237.60    <none>        3002/TCP             10s
    rabbitmq          ClusterIP      10.0.161.128   <none>        5672/TCP,15672/TCP   11s
    store-front       LoadBalancer   10.0.89.139    20.39.18.6    80:32271/TCP         10s
    
  2. komutunu kullanarak hizmet IP'sini kubectl get svc voting-app alın.

    SERVICE_IP=$(kubectl get svc store-front -o jsonpath='{.status.loadBalancer.ingress[*].ip}')
    
  3. komutunu kullanarak az network firewall nat-rule create NAT kuralını ekleyin.

    az network firewall nat-rule create --collection-name exampleset --destination-addresses $FWPUBLIC_IP --destination-ports 80 --firewall-name $FWNAME --name inboundrule --protocols Any --resource-group $RG --source-addresses '*' --translated-port 80 --action Dnat --priority 100 --translated-address $SERVICE_IP
    

Bağlantıyı doğrulama

Bağlantıyı doğrulamak için tarayıcıda Azure Güvenlik Duvarı ön uç IP adresine gidin.

AKS mağazası uygulamasını görmeniz gerekir. Bu örnekte güvenlik duvarı genel IP'sinin olduğu açıklandı 52.253.228.132.

Yerel tarayıcıda açılan Azure Store Ön Uygulamasını gösteren ekran görüntüsü.

Bu sayfada, ürünleri görüntüleyebilir, sepetinize ekleyebilir ve ardından bir sipariş vekleyebilirsiniz.

Kaynakları temizleme

Azure kaynaklarını temizlemek için komutunu kullanarak az group delete AKS kaynak grubunu silin.

az group delete -g $RG

Sonraki adımlar

Bu makalede, Azure Güvenlik Duvarı kullanarak giden trafiğinizin güvenliğini sağlamayı öğrendiniz. Gerekirse, Giden Türü belgelerini izleyerek trafiği tercih ettiğiniz çıkış çözümüne iletmek için yukarıdaki adımları genelleştirebilirsiniz.userDefinedRoute