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:
- Genel giriş, güvenlik duvarı filtrelerini akmaya zorlanır
- 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
- İç trafik için iç yük dengeleyici kullanabilirsiniz. Bu yük dengeleyiciyi genel yük dengeleyici yerine veya birlikte kendi alt ağı üzerinde yalıtabilirsiniz
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.
komutunu kullanarak
az group create
bir kaynak grubu oluşturun.az group create --name $RG --location $LOC
VE komutlarını kullanarak
az network vnet create
az 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.
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 --resource-group $RG -n $FWPUBLICIP_NAME --location $LOC --sku "Standard"
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
bir Azure Güvenlik Duvarı oluşturun ve komutunu kullanarak DNS proxy'sini
az network firewall create
--enable-dns-proxy
true
etkinleştirin ve olarak ayarlayın.az network firewall create --resource-group $RG --name $FWNAME --location $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.
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 --resource-group $RG --firewall-name $FWNAME --name $FWIPCONFIG_NAME --public-ip-address $FWPUBLICIP_NAME --vnet-name $VNET_NAME
Ö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 --resource-group $RG --name $FWPUBLICIP_NAME --query "ipAddress" -o tsv) FWPRIVATE_IP=$(az network firewall show --resource-group $RG --name $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.
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 --resource-group $RG --location $LOC --name $FWROUTE_TABLE_NAME
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 --resource-group $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 --resource-group $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.
komutunu kullanarak
az network firewall network-rule create
ağ kurallarını oluşturun.az network firewall network-rule create --resource-group $RG --firewall-name $FWNAME --collection-name 'aksfwnr' --name 'apiudp' --protocols 'UDP' --source-addresses '*' --destination-addresses "AzureCloud.$LOC" --destination-ports 1194 --action allow --priority 100 az network firewall network-rule create --resource-group $RG --firewall-name $FWNAME --collection-name 'aksfwnr' --name 'apitcp' --protocols 'TCP' --source-addresses '*' --destination-addresses "AzureCloud.$LOC" --destination-ports 9000 az network firewall network-rule create --resource-group $RG --firewall-name $FWNAME --collection-name 'aksfwnr' --name 'time' --protocols 'UDP' --source-addresses '*' --destination-fqdns 'ntp.ubuntu.com' --destination-ports 123 az network firewall network-rule create --resource-group $RG --firewall-name $FWNAME --collection-name 'aksfwnr' --name 'ghcr' --protocols 'TCP' --source-addresses '*' --destination-fqdns ghcr.io pkg-containers.githubusercontent.com --destination-ports '443' az network firewall network-rule create --resource-group $RG --firewall-name $FWNAME --collection-name 'aksfwnr' --name 'docker' --protocols 'TCP' --source-addresses '*' --destination-fqdns docker.io registry-1.docker.io production.cloudflare.docker.com --destination-ports '443'
komutunu kullanarak
az network firewall application-rule create
uygulama kuralını oluşturun.az network firewall application-rule create --resource-group $RG --firewall-name $FWNAME --collection-name 'aksfwar' --name '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 --resource-group $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.
Dağıtılacak hedef alt ağ, ortam değişkeniyle $SUBNETID
tanımlanır. Aşağıdaki komutu kullanarak alt ağ kimliğinin değerini ayarlayın:
SUBNETID=$(az network vnet subnet show --resource-group $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.
- Sistem tarafından atanan kimliklerle AKS kümesi oluşturma
- Kullanıcı tarafından atanan kimliklerle AKS kümesi oluşturma
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 --resource-group $RG --name $AKSNAME --location $LOC \
--node-count 3 \
--network-plugin azure \
--outbound-type userDefinedRouting \
--vnet-subnet-id $SUBNETID \
--api-server-authorized-ip-ranges $FWPUBLIC_IP \
--generate-ssh-keys
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.
Aşağıdaki komutu kullanarak IP adresinizi alın:
CURRENT_IP=$(dig @resolver1.opendns.com ANY myip.opendns.com +short)
komutunu kullanarak
az aks update
IP adresini onaylanan aralıklara ekleyin.az aks update --resource-group $RG --name $AKSNAME --api-server-authorized-ip-ranges $CURRENT_IP/32
komutunu kullanarak AKS kümenize bağlanacak şekilde
az aks get-credentials
yapılandırınkubectl
.az aks get-credentials --resource-group $RG --name $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.
Oluşturulacak tüm kaynakları görmek için AKS Store Tanıtım hızlı başlangıç bildirimini gözden geçirin.
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 loadBalancer
sorun 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.
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
komutunu kullanarak hizmet IP'sini
kubectl get svc store-front
alın.SERVICE_IP=$(kubectl get svc store-front -o jsonpath='{.status.loadBalancer.ingress[*].ip}')
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
.
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 --name $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
Azure Kubernetes Service