Azure Kubernetes Service (AKS) içindeki küme düğümleri için çıkış trafiğini denetleme

Bu makalede, Azure Kubernetes hizmetinden (AKS) giden trafiği güvenli hale getirmeye olanak tanıyan gerekli ayrıntılar sağlanmaktadır. Temel AKS dağıtımı için küme gereksinimlerini ve isteğe bağlı eklentiler ve özellikler için ek gereksinimleri içerir. Azure Güvenlik Duvarı ile bu gereksinimlerin nasıl yapılandırılacağı hakkında daha fazla bir örneksunulacaktır. Bununla birlikte, bu bilgileri herhangi bir giden kısıtlama yöntemine veya gerecine uygulayabilirsiniz.

Arka Plan

AKS kümeleri bir sanal ağa dağıtılır. Bu ağ yönetilebilecek (AKS tarafından oluşturulan) veya özel (önceden Kullanıcı tarafından önceden yapılandırılmış). Her iki durumda da, kümenin söz konusu sanal ağın dışındaki hizmetlerde giden bağımlılıkları vardır (hizmetin gelen bağımlılığı yoktur).

Yönetim ve operasyonel amaçlar için, bir AKS kümesindeki düğümlerin belirli bağlantı noktalarına ve tam etki alanı adlarına (FQDN) erişmesi gerekir. Bu uç noktalar, düğümlerin API sunucusuyla iletişim kurması veya temel Kubernetes küme bileşenlerini ve düğüm güvenliği güncelleştirmelerini indirip yüklemesi için gereklidir. Örneğin, kümenin temel sistem kapsayıcısı görüntülerini Microsoft Container Registry (MCR) çekmesini gerektirir.

AKS giden bağımlılıkları, bunların arkasında statik adresler bulunmayan FQDN 'Ler ile neredeyse tamamen tanımlıdır. Statik adreslerin olmaması, ağ güvenlik gruplarının bir AKS kümesinden giden trafiği kilitlemek için kullanılamayacağı anlamına gelir.

Varsayılan olarak, AKS kümelerinde sınırsız giden (çıkış) internet erişimi vardır. Bu ağ erişimi düzeyi, çalıştırdığınız düğüm ve hizmetlere, gerektiğinde dış kaynaklara erişmek için izin verir. Çıkış trafiğini kısıtlamak istiyorsanız, sağlıklı küme bakım görevlerini sürdürmek için sınırlı sayıda bağlantı noktasına ve adrese erişilebilir olması gerekir. Giden adreslerin güvenliğini sağlamaya yönelik en basit çözüm, etki alanı adlarına göre giden trafiği denetleyesağlayan bir güvenlik duvarı cihazının kullanılmasına yol açabilir. Örneğin, Azure Güvenlik Duvarı, giden HTTP ve HTTPS trafiğini hedefin FQDN 'sine göre kısıtlayabilir. Ayrıca tercih ettiğiniz güvenlik duvarı ve güvenlik kurallarınızı, bu gerekli bağlantı noktalarına ve adreslere izin verecek şekilde yapılandırabilirsiniz.

Önemli

Bu belge, yalnızca AKS alt ağını bırakarak trafiğin nasıl kilitleneceği hakkında ele alınmaktadır. AKS 'ler varsayılan olarak giriş gereksinimlerine sahip değildir. Ağ güvenlik grupları (NSG 'ler) ve güvenlik duvarları kullanılarak iç alt ağ trafiğinin engellenmesi desteklenmez. Küme içindeki trafiği denetlemek ve engellemek için ağ ilkelerinikullanın.

AKS kümeleri için gerekli giden ağ kuralları ve FQDN 'Ler

Aşağıdaki ağ ve FQDN/uygulama kuralları bir AKS kümesi için gereklidir, Azure Güvenlik Duvarı dışında bir çözüm yapılandırmak istiyorsanız bunları kullanabilirsiniz.

  • IP adresi bağımlılıkları HTTP/sn olmayan trafiğe yöneliktir (TCP ve UDP trafiği)
  • FQDN HTTP/HTTPS uç noktaları, güvenlik duvarı cihazınıza yerleştirilebilir.
  • Joker karakter HTTP/HTTPS uç noktaları, AKS kümenizde farklı bir dizi niteleyicileri temel alarak değişebilen bağımlılıklardır.
  • AKS, bu FQDN 'yi kuas sistemi ve Gatekeeper-System altındaki tüm dağıtımlara bir ortam değişkeni olarak eklemek için bir giriş denetleyicisi kullanır. Bu, düğümler ve API sunucusu arasındaki tüm sistem iletişiminin API sunucusu IP 'sini kullanmamasını sağlar.
  • API sunucusuyla iletişim kurmak için gereken bir uygulama veya çözümünüz varsa, API SUNUCUNUZUN IP 'sinin 443 numaralı bağlantı noktasına TCP iletişimine izin vermek için ek bir ağ kuralı eklemeniz gerekir.
  • Nadir durumlarda, API sunucunuzun IP 'si değişebilir bir bakım işlemi varsa. API sunucusu IP 'sini değiştirebildiğinden planlı bakım işlemlerine her zaman önceden bir iletilir.

Azure genel gerekli ağ kuralları

Gerekli ağ kuralları ve IP adresi bağımlılıkları şunlardır:

Hedef uç nokta Protokol Bağlantı noktası Kullanın
*:1194
Veya
ServiceTag - AzureCloud.<Region>:1194
Veya
Bölgesel Cıdrs - RegionCIDRs:1194
Veya
APIServerPublicIP:1194 (only known after cluster creation)
UDP 1194 Düğümler ve denetim düzlemi arasında Tünellenen güvenli iletişim için. Özel kümeler için bu gerekli değildir
*:9000
Veya
ServiceTag - AzureCloud.<Region>:9000
Veya
Bölgesel Cıdrs - RegionCIDRs:9000
Veya
APIServerPublicIP:9000 (only known after cluster creation)
TCP 9000 Düğümler ve denetim düzlemi arasında Tünellenen güvenli iletişim için. Özel kümeler için bu gerekli değildir
*:123 veya ntp.ubuntu.com:123 (Azure Güvenlik Duvarı ağ kuralları kullanılıyorsa) UDP 123 Linux düğümlerinde ağ zaman Protokolü (NTP) zaman eşitlemesi için gereklidir.
CustomDNSIP:53 (if using custom DNS servers) UDP 53 Özel DNS sunucuları kullanıyorsanız, bunların küme düğümleri tarafından erişilebilir olduklarından emin olmanız gerekir.
APIServerPublicIP:443 (if running pods/deployments that access the API Server) TCP 443 API sunucusuna erişen pods/dağıtımlar çalıştırıyorsanız, bu pods/dağıtımlar API IP 'sini kullanır. Özel kümeler için bu gerekli değildir

Azure genel gerekli FQDN/uygulama kuralları

Aşağıdaki FQDN/uygulama kuralları gereklidir:

Hedef FQDN Bağlantı noktası Kullanın
*.hcp.<location>.azmk8s.io HTTPS:443 Node <-> API Server iletişimi için gereklidir. <location> AKS kümenizin dağıtıldığı bölge ile değiştirin.
mcr.microsoft.com HTTPS:443 Microsoft Container Registry (MCR) resimlere erişmek için gereklidir. Bu kayıt defteri ilk taraf görüntülerini/grafiklerini içerir (örneğin, coreDNS, vb.). Bu görüntüler, ölçek ve yükseltme işlemleri de dahil olmak üzere kümenin doğru oluşturulması ve çalışması için gereklidir.
*.data.mcr.microsoft.com HTTPS:443 Azure content delivery network (CDN) tarafından desteklenen MCR depolama alanı için gereklidir.
management.azure.com HTTPS:443 Azure API 'sine karşı Kubernetes işlemleri için gereklidir.
login.microsoftonline.com HTTPS:443 Azure Active Directory kimlik doğrulaması için gereklidir.
packages.microsoft.com HTTPS:443 Bu adres, önbelleğe alınmış apt-get işlemleri Için kullanılan Microsoft paketleri deposudur. Örnek paketlere Moby, PowerShell ve Azure CLı dahildir.
acs-mirror.azureedge.net HTTPS:443 Bu adres, Kubernetes kullanan ve Azure CNı gibi gerekli ikilileri indirmek ve yüklemek için gereken depoya yöneliktir.

Azure Çin 21Vianet gereken ağ kuralları

Gerekli ağ kuralları ve IP adresi bağımlılıkları şunlardır:

Hedef uç nokta Protokol Bağlantı noktası Kullanın
*:1194
Veya
ServiceTag - AzureCloud.Region:1194
Veya
Bölgesel Cıdrs - RegionCIDRs:1194
Veya
APIServerPublicIP:1194 (only known after cluster creation)
UDP 1194 Düğümler ve denetim düzlemi arasında Tünellenen güvenli iletişim için.
*:9000
Veya
ServiceTag - AzureCloud.<Region>:9000
Veya
Bölgesel CIDR'ler - RegionCIDRs:9000
Veya
APIServerPublicIP:9000 (only known after cluster creation)
TCP 9000 Düğümler ve kontrol düzlemi arasında tünelli güvenli iletişim için.
*:22
Veya
ServiceTag - AzureCloud.<Region>:22
Veya
Bölgesel CIDR'ler - RegionCIDRs:22
Veya
APIServerPublicIP:22 (only known after cluster creation)
TCP 22 Düğümler ve kontrol düzlemi arasında tünelli güvenli iletişim için.
*:123 veya ntp.ubuntu.com:123 (ağ Azure Güvenlik Duvarı kullanıyorsanız) UDP 123 Linux düğümlerde Ağ Saati Protokolü (NTP) zaman eşitlemesi için gereklidir.
CustomDNSIP:53 (if using custom DNS servers) UDP 53 Özel DNS sunucuları kullanıyorsanız, bunların küme düğümleri tarafından erişilebilir olduğundan emin olun.
APIServerPublicIP:443 (if running pods/deployments that access the API Server) TCP 443 API Sunucusu'na erişen podları/dağıtımları çalıştırıyorsanız gereklidir; bu podlar/dağıtımlar API IP'sini kullanır.

Azure China 21Vianet FQDN/uygulama kuralları

Aşağıdaki FQDN/uygulama kuralları gereklidir:

Hedef FQDN Bağlantı noktası Kullanın
*.hcp.<location>.cx.prod.service.azk8s.cn HTTPS:443 Node api sunucusu < > için gereklidir. yerine <location> AKS kümenizin dağıtılacağı bölgeyi değiştirin.
*.tun.<location>.cx.prod.service.azk8s.cn HTTPS:443 Node api sunucusu < > için gereklidir. yerine <location> AKS kümenizin dağıtılacağı bölgeyi değiştirin.
mcr.microsoft.com HTTPS:443 Microsoft Container Registry 'de (MCR) görüntülere erişmek için gereklidir. Bu kayıt defteri birinci taraf görüntüleri/grafikleri (örneğin, coreDNS vb.) içerir. Bu görüntüler, ölçek ve yükseltme işlemleri de dahil olmak üzere kümenin doğru oluşturulması ve çalışması için gereklidir.
.data.mcr.microsoft.com HTTPS:443 Azure MCR (Content Delivery Network) tarafından CDN.
management.chinacloudapi.cn HTTPS:443 Azure API'sini kullanan Kubernetes işlemleri için gereklidir.
login.chinacloudapi.cn HTTPS:443 Kimlik doğrulaması Azure Active Directory gereklidir.
packages.microsoft.com HTTPS:443 Bu adres, önbelleğe alınmış apt-get işlemleri için kullanılan Microsoft paketleri deposu. Moby, PowerShell ve Azure CLI örnek paketleridir.
*.azk8s.cn HTTPS:443 Bu adres, kubenet ve Azure CNI gibi gerekli ikili dosyaları indirmek ve yüklemek için gereken depoya Azure CNI.

Azure US Government gerekli ağ kuralları

Gerekli ağ kuralları ve IP adresi bağımlılıkları:

Hedef Uç Nokta Protokol Bağlantı noktası Kullanın
*:1194
Veya
ServiceTag - AzureCloud.<Region>:1194
Veya
Bölgesel CIDR'ler - RegionCIDRs:1194
Veya
APIServerPublicIP:1194 (only known after cluster creation)
UDP 1194 Düğümler ve kontrol düzlemi arasında tünelli güvenli iletişim için.
*:9000
Veya
ServiceTag - AzureCloud.<Region>:9000
Veya
Bölgesel CIDR'ler - RegionCIDRs:9000
Veya
APIServerPublicIP:9000 (only known after cluster creation)
TCP 9000 Düğümler ve kontrol düzlemi arasında tünelli güvenli iletişim için.
*:123 veya ntp.ubuntu.com:123 (ağ Azure Güvenlik Duvarı kullanıyorsanız) UDP 123 Linux düğümlerde Ağ Saati Protokolü (NTP) zaman eşitlemesi için gereklidir.
CustomDNSIP:53 (if using custom DNS servers) UDP 53 Özel DNS sunucuları kullanıyorsanız, bunların küme düğümleri tarafından erişilebilir olduğundan emin olun.
APIServerPublicIP:443 (if running pods/deployments that access the API Server) TCP 443 API Sunucusu'na erişen podlar/dağıtımlar çalıştırıyorsa, bu podlar/dağıtımlar API IP'sini kullanır.

Azure US Government gerekli FQDN/uygulama kuralları

Aşağıdaki FQDN/uygulama kuralları gereklidir:

Hedef FQDN Bağlantı noktası Kullanın
*.hcp.<location>.cx.aks.containerservice.azure.us HTTPS:443 Node api sunucusu < > için gereklidir. yerine <location> AKS kümenizin dağıtılacağı bölgeyi değiştirin.
mcr.microsoft.com HTTPS:443 Microsoft Container Registry 'de (MCR) görüntülere erişmek için gereklidir. Bu kayıt defteri birinci taraf görüntüleri/grafikleri (örneğin, coreDNS vb.) içerir. Bu görüntüler, ölçek ve yükseltme işlemleri de dahil olmak üzere kümenin doğru oluşturulması ve çalışması için gereklidir.
*.data.mcr.microsoft.com HTTPS:443 Azure MCR teslim ağı (CDN) tarafından desteklemektedir.
management.usgovcloudapi.net HTTPS:443 Azure API'sini kullanan Kubernetes işlemleri için gereklidir.
login.microsoftonline.us HTTPS:443 Kimlik doğrulaması Azure Active Directory gereklidir.
packages.microsoft.com HTTPS:443 Bu adres, önbelleğe alınmış apt-get işlemleri için kullanılan Microsoft paketleri deposu. Moby, PowerShell ve Azure CLI örnek paketleridir.
acs-mirror.azureedge.net HTTPS:443 Bu adres, kubenet ve Azure CNI gibi gerekli ikilileri yüklemek için gereken depoya Azure CNI.

Aşağıdaki FQDN /uygulama kuralları isteğe bağlıdır, ancak AKS kümeleri için önerilir:

Hedef FQDN Bağlantı noktası Kullanın
security.ubuntu.com, azure.archive.ubuntu.com, changelogs.ubuntu.com HTTP:80 Bu adres, Linux küme düğümlerinin gerekli güvenlik düzeltme eklerini ve güncelleştirmelerini indirmelerine olanak sağlar.

Bu FQDN'leri engellemeyi/bunlara izin vermeyebilirsiniz; düğümler yalnızca bir düğüm görüntüsü yükseltmesi veya küme yükseltmesi işlemi sırasında işletim sistemi güncelleştirmelerini alır.

GPU özellikli AKS kümeleri

Gerekli FQDN/uygulama kuralları

GPU'nun etkin olduğu AKS kümeleri için aşağıdaki FQDN/uygulama kuralları gereklidir:

Hedef FQDN Bağlantı noktası Kullanın
nvidia.github.io HTTPS:443 Bu adres GPU tabanlı düğümlerde doğru sürücü yüklemesi ve işlemi için kullanılır.
us.download.nvidia.com HTTPS:443 Bu adres GPU tabanlı düğümlerde doğru sürücü yüklemesi ve işlemi için kullanılır.
apt.dockerproject.org HTTPS:443 Bu adres GPU tabanlı düğümlerde doğru sürücü yüklemesi ve işlemi için kullanılır.

Windows tabanlı düğüm havuzları

Gerekli FQDN/uygulama kuralları

Sunucu tabanlı düğüm havuzlarını kullanmak için aşağıdaki FQDN /Windows kuralları gereklidir:

Hedef FQDN Bağlantı noktası Kullanın
onegetcdn.azureedge.net, go.microsoft.com HTTPS:443 Windows ile ilgili ikili dosyalar yüklemek için
*.mp.microsoft.com, www.msftconnecttest.com, ctldl.windowsupdate.com HTTP:80 Windows ile ilgili ikili dosyalar yüklemek için

AKS eklentileri ve tümleştirmeleri

Kapsayıcılar için Azure İzleyici

Kapsayıcılar için Azure İzleyici sağlamak için iki seçenek vardır, serviceTag Azure İzleyici veya gerekli FQDN/Uygulama Kurallarına erişim sebilirsiniz.

Gerekli ağ kuralları

Aşağıdaki FQDN/uygulama kuralları gereklidir:

Hedef Uç Nokta Protokol Bağlantı noktası Kullanın
ServiceTag - AzureMonitor:443 TCP 443 Bu uç nokta, log analytics ve Log Analytics'e ölçüm Azure İzleyici göndermek için kullanılır.

Gerekli FQDN/uygulama kuralları

Aşağıdaki FQDN /uygulama kuralları, kapsayıcılar için gerekli olan Azure İzleyici AKS kümeleri için gereklidir:

FQDN Bağlantı noktası Kullanın
dc.services.visualstudio.com HTTPS:443 Bu uç nokta, ölçümler ve telemetri verileri izleme için Azure İzleyici.
*.ods.opinsights.azure.com HTTPS:443 Bu uç nokta, log analytics Azure İzleyici için bu uç nokta tarafından kullanılır.
*.oms.opinsights.azure.com HTTPS:443 Bu uç nokta, Log Analytics hizmetinin kimliğini doğrulamak için kullanılan omsagent tarafından kullanılır.
*.monitoring.azure.com HTTPS:443 Bu uç nokta, ölçüm verilerini veri kaynağına göndermek Azure İzleyici.

Azure İlkesi

Gerekli FQDN/uygulama kuralları

Aşağıdaki FQDN /uygulama kuralları, kümenin etkin olduğu AKS kümeleri Azure İlkesi gereklidir.

FQDN Bağlantı noktası Kullanın
data.policy.core.windows.net HTTPS:443 Bu adres Kubernetes ilkelerini çekmek ve küme uyumluluk durumunu ilke hizmetine rapor etmek için kullanılır.
store.policy.core.windows.net HTTPS:443 Bu adres, yerleşik ilkelerin Gatekeeper yapıtlarını çekmek için kullanılır.
dc.services.visualstudio.com HTTPS:443 Azure İlkesi içgörü uç noktasına telemetri verileri gönderen bir eklenti.

Azure China 21Vianet FQDN/uygulama kuralları

Aşağıdaki FQDN /uygulama kuralları, kümenin etkin olduğu AKS kümeleri Azure İlkesi gereklidir.

FQDN Bağlantı noktası Kullanın
data.policy.azure.cn HTTPS:443 Bu adres Kubernetes ilkelerini çekmek ve küme uyumluluk durumunu ilke hizmetine rapor etmek için kullanılır.
store.policy.azure.cn HTTPS:443 Bu adres, yerleşik ilkelerin Gatekeeper yapıtlarını çekmek için kullanılır.

Azure US Government Gerekli FQDN/uygulama kuralları

Aşağıdaki FQDN /uygulama kuralları, kümenin etkin olduğu AKS kümeleri Azure İlkesi gereklidir.

FQDN Bağlantı noktası Kullanın
data.policy.azure.us HTTPS:443 Bu adres Kubernetes ilkelerini çekmek ve küme uyumluluk durumunu ilke hizmetine rapor etmek için kullanılır.
store.policy.azure.us HTTPS:443 Bu adres, yerleşik ilkelerin Gatekeeper yapıtlarını çekmek için kullanılır.

Küme uzantıları

Gerekli FQDN/uygulama kuralları

AKS kümelerde küme uzantılarını kullanmak için aşağıdaki FQDN /uygulama kuralları gereklidir.

FQDN Bağlantı noktası Kullanın
<region>.dp.kubernetesconfiguration.azure.com HTTPS:443 Bu adres, Küme Uzantıları hizmetten yapılandırma bilgilerini getirmek ve uzantı durumunu hizmete rapor etmek için kullanılır.
mcr.microsoft.com, *.data.mcr.microsoft.com HTTPS:443 AKS kümesine küme uzantısı aracıları yüklemek için kapsayıcı görüntülerini çekmek için bu adres gereklidir.

Azure US Government Gerekli FQDN/uygulama kuralları

AKS kümelerde küme uzantılarını kullanmak için aşağıdaki FQDN /uygulama kuralları gereklidir.

FQDN Bağlantı noktası Kullanın
<region>.dp.kubernetesconfiguration.azure.us HTTPS:443 Bu adres, Küme Uzantıları hizmetten yapılandırma bilgilerini getirmek ve uzantı durumunu hizmete rapor etmek için kullanılır.
mcr.microsoft.com, *.data.mcr.microsoft.com HTTPS:443 AKS kümesine küme uzantısı aracıları yüklemek için kapsayıcı görüntülerini çekmek için bu adres gereklidir.

Azure güvenlik duvarını kullanarak çıkış trafiğini kısıtlama

Azure Güvenlik Duvarı yapılandırmayı basitleştirmek için Azure Kubernetes Service AzureKubernetesService ( ) FQDN Etiketi sağlar.

Not

FQDN etiketi, yukarıda listelenen tüm FQDN'leri içerir ve otomatik olarak güncel tutulur.

SNAT bağlantı noktası tükenmesi sorunlarından kaçınmak için üretim senaryolarında Azure Güvenlik Duvarı en az 20 Ön Uç IP'nin olması önerilir.

Dağıtımın örnek bir mimarisi aşağıda verilmiştir:

Kilitli topoloji

  • Genel Giriş, güvenlik duvarı filtrelerini aşmaya zorlandı
    • AKS aracı düğümleri ayrılmış bir alt ağda yalıtılmış.
    • Azure Güvenlik Duvarı kendi alt ağın içinde dağıtılır.
    • DNAT kuralı, FW genel IP'sini LB ön uç IP'sine çevirir.
  • Giden istekler, kullanıcı tanımlı bir yol kullanarak Azure Güvenlik Duvarı iç IP'ye doğru başlar
    • AKS aracı düğümlerinden gelen istekler, AKS kümesine dağıtılmış olan alt ağ üzerinde yerleştirilmiş bir UDR'den sonra gelen istekleri takip eder.
    • Azure Güvenlik Duvarı genel IP ön ucundan sanal ağdan çıkışlar
    • Güvenlik duvarı ön uç IP adresine gelen ve buradan gelen genel İnternet'e veya diğer Azure hizmetleri akışlarına erişim
    • İsteğe bağlı olarak, AKS denetim düzlemi erişimi, güvenlik duvarı genel ön uç IP adresini içeren API sunucusu Yetkili IParalıkları tarafından korunur.
  • İç Trafik
    • İsteğe bağlı olarak, bunun yerine veya genel Load Balancer iç trafik için bir İç Load Balancer kullanabilirsiniz ve bu da kendi alt ağın üzerinde yalıtabilirsiniz.

Aşağıdaki adımlar AKS kümesinden giden trafiği kısıtlamak için Azure Güvenlik Duvarı FQDN etiketini kullanır ve güvenlik duvarı üzerinden genel gelen trafiğin nasıl AzureKubernetesService yapılandırılacaklarına bir örnek sağlar.

Ortam değişkenleri aracılığıyla yapılandırmayı ayarlama

Kaynak oluşturmada kullanılacak 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 için, biri de güvenlik duvarı için olmak için iki ayrı alt ağa sahip bir sanal ağ sağlama. İsteğe bağlı olarak, iç hizmet giriş için de bir tane oluşturabilirsiniz.

Boş ağ topolojisi

Tüm kaynakları tutmak için bir kaynak grubu oluşturun.

# Create Resource Group

az group create --name $RG --location $LOC

AKS kümesi ve sanal ağı barındırmak için iki alt ağa sahip bir sanal Azure Güvenlik Duvarı. Her biri kendi alt ağın olur. AKS ağıyla başlayalım.

# 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 cannot be changed)

az network vnet subnet create \
    --resource-group $RG \
    --vnet-name $VNET_NAME \
    --name $FWSUBNET_NAME \
    --address-prefix 10.42.2.0/24

UDR ile Azure Güvenlik Duvarı oluşturma ve ayarlama

Azure Güvenlik Duvarı ve giden kurallarının yapılandırılması gerekir. Güvenlik duvarının temel amacı, kuruluşların AKS Kümesine gelen ve aks kümesi dışında ayrıntılı giriş ve çıkış trafiği kuralları yapılandırmalarına olanak sağlamaktır.

Güvenlik duvarı ve UDR

Önemli

Kümeniz veya uygulamanız hedeflerin aynı veya küçük alt kümesine yönlendirilen çok sayıda giden bağlantı oluşturuyorsa, ön uç IP'leri başına bağlantı noktalarının üst limitini önlemek için daha fazla güvenlik duvarı ön uç IP'sini gerekebilir. Birden çok IP ile Azure güvenlik duvarı oluşturma hakkında daha fazla bilgi için buraya bakın

Ön uç adresi olarak kullanılacak standart bir SKU genel IP Azure Güvenlik Duvarı oluşturun.

az network public-ip create -g $RG -n $FWPUBLICIP_NAME -l $LOC --sku "Standard"

Önizleme cli-extension'sini kaydeden bir Azure Güvenlik Duvarı.

# Install Azure Firewall preview CLI extension

az extension add --name azure-firewall

# Deploy Azure Firewall

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

Daha önce oluşturulan IP adresi artık güvenlik duvarı ön ucuna atanabilir.

Not

Genel IP adresinin Azure Güvenlik Duvarı birkaç dakika sürebilir. Ağ kurallarında FQDN'den yararlanacak şekilde DNS ara sunucusunun etkinleştirilmesi gerekir. Etkinleştirildiğinde güvenlik duvarı 53 bağlantı noktasını dinler ve DNS isteklerini yukarıda belirtilen DNS sunucusuna iletir. Bu, güvenlik duvarının bu FQDN'yi otomatik olarak çevirmesine olanak sağlar.

# Configure Firewall IP Config

az network firewall ip-config create -g $RG -f $FWNAME -n $FWIPCONFIG_NAME --public-ip-address $FWPUBLICIP_NAME --vnet-name $VNET_NAME

Önceki komut başarılı olduğunda güvenlik duvarı ön uç IP adresini daha sonra yapılandırma için kaydedin.

# Capture Firewall IP Address for Later Use

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 IPadresi aralıklarına sahip 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ı'a atlama ile UDR oluşturma

Azure, Azure alt ağları, sanal ağlar ve şirket içi ağlar arasındaki trafiği otomatik olarak yönlendirmektedir. Azure'ın varsayılan yönlendirmesini değiştirmek için bir yol tablosu oluşturabilirsiniz.

Belirli bir alt ağ ile ilişkilendirilen boş bir yol tablosu oluşturun. Yol tablosu, bir 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.

# Create UDR and add a route for Azure Firewall

az network route-table create -g $RG -l $LOC --name $FWROUTE_TABLE_NAME
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 bir alt ağın yol tablosuna başka yollar ekleme hakkında sanal ağ yönlendirme tablosu belgelerine bakın.

Güvenlik duvarı kuralları ekleme

Güvenlik duvarınızı yapılandırmak için kullanabileceğiniz üç ağ kuralı aşağıda verilmiştir; bu kuralları dağıtımınız temel alarak uyarlamanız gerekebilir. İlk kural TCP üzerinden 9000 bağlantı noktasına erişime izin verir. İkinci kural UDP üzerinden 1194 ve 123 bağlantı noktalarına erişime izin verir (dağıtım Azure China 21Vianet daha fazlasını gerekli olabilir). Bu kuralların her ikisi de yalnızca kullanmakta olduğu Azure Bölgesi CIDR'sine (bu durumda azure bölgesi CIDR'sine) Doğu ABD. Son olarak, UDP aracılığıyla FQDN'ye 123 bağlantı noktasını açma üçüncü bir ağ kuralı ekleyebiliyoruz (ağ kuralı olarak ntp.ubuntu.com FQDN eklemek, Azure Güvenlik Duvarı'nin belirli özelliklerinden biridir ve kendi seçeneklerinizi kullanırken uyarlamanız gerekir).

Ağ kurallarını ayardikten sonra, TCP bağlantı noktası 443 ve bağlantı noktası 80 üzerinden erişilebilen tüm gerekli FQDN'leri kapsayan kullanarak bir uygulama kuralı da AzureKubernetesService ekleyebilirsiniz.

# Add FW Network Rules

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

# Add FW Application Rules

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ı hizmeti hakkında daha fazla bilgi edinmek için Azure Güvenlik Duvarı bakın.

Yönlendirme tablosu ile AKS'i ilişkilendirme

Kümeyi güvenlik duvarıyla ilişkilendirmek için, kümenin alt ağın ayrılmış alt ağı yukarıda oluşturulan yol tablosuna başvurmalıdır. İlişkileme, kümenin alt ağının yol tablosu güncelleştirmek için hem kümeyi hem de güvenlik duvarını tutan sanal ağa bir komut verilip yapılabilir.

# Associate route table with next hop to Firewall to the AKS subnet

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

Var olan ağa giden UDR türüyle AKS dağıtma

Artık mevcut sanal ağa bir AKS kümesi dağıtılabilir. Giden türünü de userDefinedRouting kullanacağız. Bu özellik, tüm giden trafiğin güvenlik duvarı üzerinden zorlanmayacak ve başka çıkış yolu olmayacaktır (varsayılan olarak Load Balancer giden türü kullanılabilir).

aks-deploy

Mevcut sanal ağın içinde sağlama erişimi olan bir hizmet sorumlusu oluşturma

AKS tarafından küme kaynakları oluşturmak için bir küme kimliği (yönetilen kimlik veya hizmet sorumlusu) kullanılır. Oluşturma zamanında geçirilen bir hizmet sorumlusu, AKS tarafından kullanılan Depolama kaynakları, IP'ler ve Load Balancer'lar gibi temel AKS kaynaklarını oluşturmak için kullanılır (bunun yerine yönetilen kimlik de kullanabilirsiniz). Aşağıdaki uygun izinler verilmezse AKS Kümesi sağlanmaz.

# Create SP and Assign Permission to Virtual Network

az ad sp create-for-rbac -n "${PREFIX}sp"

Şimdi aşağıdaki ve yerine önceki komut çıktısı tarafından otomatik olarak otomatik olarak yapılan hizmet sorumlusu APPID PASSWORD appid ve hizmet sorumlusu parolasını yazın. AKS'nin buna kaynak dağıtablandırılaya kadar hizmet sorumlusuna izinleri vermek için sanal ağ kaynak kimliğine başvuracağız.

APPID="<SERVICE_PRINCIPAL_APPID_GOES_HERE>"
PASSWORD="<SERVICEPRINCIPAL_PASSWORD_GOES_HERE>"
VNETID=$(az network vnet show -g $RG --name $VNET_NAME --query id -o tsv)

# Assign SP Permission to VNET

az role assignment create --assignee $APPID --scope $VNETID --role "Network Contributor"

Burada gerekli olan ayrıntılı izinleri kontrol edin.

Not

Kubenet ağ eklentisini kullanıyorsanız, kubenet'in yeni yönlendirme kuralları eklemek için bir yol tablosu gerektirdiğinden AKS hizmet sorumlusuna veya yönetilen kimliklere önceden oluşturulmuş yol tablosu için izinler vermelisiniz.

RTID=$(az network route-table show -g $RG -n $FWROUTE_TABLE_NAME --query id -o tsv)
az role assignment create --assignee $APPID --scope $RTID --role "Network Contributor"

AKS'yi dağıtma

Son olarak AKS kümesi, küme için ayrılmış olan mevcut alt ağda dağıtılabilir. dağıtılacak hedef alt ağ, ortam değişkeniyle $SUBNETID tanımlanır. Önceki adımlarda $SUBNETID değişkeni tanımlamadık. Alt ağ kimliğinin değerini ayarlamak için aşağıdaki komutu kullanabilirsiniz:

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'sini kullanmak için giden türünü tanımlayabilirsiniz. Bu yapılandırma AKS'nin yük dengeleyici için kurulumu ve IP sağlamayı atlamayı etkinleştirmesini sağlar.

Önemli

Sınırlamalar da dahil olmak üzere giden UDR türü hakkında daha fazla bilgi için bkz. çıkış giden türü UDR.

İpucu

Küme dağıtımına Özel Küme gibi ek özellikler eklenebilir.

API sunucusuna erişimi 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ği eklenebilir. Yetkili IP aralıkları özelliği diyagramda isteğe bağlı olarak ifade edildi. API sunucusu erişimini sınırlamak için yetkili IP aralığı özelliğini etkinleştirerek geliştirici araçlarınız güvenlik duvarının sanal ağına yönelik bir sıçrama kutusu kullanmalısınız veya tüm geliştirici uç noktalarını yetkili IP aralığına eklemeniz gerekir.

az aks create -g $RG -n $AKSNAME -l $LOC \
  --node-count 3 --generate-ssh-keys \
  --network-plugin $PLUGIN \
  --outbound-type userDefinedRouting \
  --service-cidr 10.41.0.0/16 \
  --dns-service-ip 10.41.0.10 \
  --docker-bridge-address 172.17.0.1/16 \
  --vnet-subnet-id $SUBNETID \
  --service-principal $APPID \
  --client-secret $PASSWORD \
  --api-server-authorized-ip-ranges $FWPUBLIC_IP

API sunucusuna geliştirici erişimini etkinleştirme

Önceki adımda küme için yetkili IP aralıkları kullandıysanız, API sunucusuna buradan erişmek için geliştirici araç IP adreslerinizi onaylı IP aralıkları listesine eklemeniz gerekir. Bir diğer seçenek de Güvenlik Duvarı'nın sanal ağı içindeki ayrı bir alt ağ içinde gerekli araçla bir sıçrama kutusu yapılandırmaktır.

Aşağıdaki komutu kullanarak onaylanan aralıklara başka bir IP adresi ekleyin

# Retrieve your IP address
CURRENT_IP=$(dig @resolver1.opendns.com ANY myip.opendns.com +short)

# Add to AKS approved list
az aks update -g $RG -n $AKSNAME --api-server-authorized-ip-ranges $CURRENT_IP/32

Yeni oluşturduğunuz Kubernetes kümesine bağlanmak üzere yapılandırmak için [az aks get-credentials][az-aks-get-credentials] kubectl komutunu kullanın.

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

Genel hizmet dağıtma

Artık hizmetleri açığa çıkararak ve bu kümeye uygulama dağıtmaya başlayabilirsiniz. Bu örnekte, bir genel hizmeti açığa çıkaracağız, ancak iç yük dengeleyici aracılığıyla bir iç hizmeti de açığa çıkarmayı seçebilirsiniz.

Genel Hizmet DNAT

Aşağıdaki yaml dosyasını adlı dosyaya kopyalayıp Azure voting uygulama uygulamasını example.yaml dağıtın.

# voting-storage-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: voting-storage
spec:
  replicas: 1
  selector:
    matchLabels:
      app: voting-storage
  template:
    metadata:
      labels:
        app: voting-storage
    spec:
      containers:
      - name: voting-storage
        image: mcr.microsoft.com/aks/samples/voting/storage:2.0
        args: ["--ignore-db-dir=lost+found"]
        resources:
          requests:
            cpu: 100m
            memory: 128Mi
          limits:
            cpu: 250m
            memory: 256Mi
        ports:
        - containerPort: 3306
          name: mysql
        volumeMounts:
        - name: mysql-persistent-storage
          mountPath: /var/lib/mysql
        env:
        - name: MYSQL_ROOT_PASSWORD
          valueFrom:
            secretKeyRef:
              name: voting-storage-secret
              key: MYSQL_ROOT_PASSWORD
        - name: MYSQL_USER
          valueFrom:
            secretKeyRef:
              name: voting-storage-secret
              key: MYSQL_USER
        - name: MYSQL_PASSWORD
          valueFrom:
            secretKeyRef:
              name: voting-storage-secret
              key: MYSQL_PASSWORD
        - name: MYSQL_DATABASE
          valueFrom:
            secretKeyRef:
              name: voting-storage-secret
              key: MYSQL_DATABASE
      volumes:
      - name: mysql-persistent-storage
        persistentVolumeClaim:
          claimName: mysql-pv-claim
---
# voting-storage-secret.yaml
apiVersion: v1
kind: Secret
metadata:
  name: voting-storage-secret
type: Opaque
data:
  MYSQL_USER: ZGJ1c2Vy
  MYSQL_PASSWORD: UGFzc3dvcmQxMg==
  MYSQL_DATABASE: YXp1cmV2b3Rl
  MYSQL_ROOT_PASSWORD: UGFzc3dvcmQxMg==
---
# voting-storage-pv-claim.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-pv-claim
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi
---
# voting-storage-service.yaml
apiVersion: v1
kind: Service
metadata:
  name: voting-storage
  labels: 
    app: voting-storage
spec:
  ports:
  - port: 3306
    name: mysql
  selector:
    app: voting-storage
---
# voting-app-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: voting-app
spec:
  replicas: 1
  selector:
    matchLabels:
      app: voting-app
  template:
    metadata:
      labels:
        app: voting-app
    spec:
      containers:
      - name: voting-app
        image: mcr.microsoft.com/aks/samples/voting/app:2.0
        imagePullPolicy: Always
        ports:
        - containerPort: 8080
          name: http
        env:
        - name: MYSQL_HOST
          value: "voting-storage"
        - name: MYSQL_USER
          valueFrom:
            secretKeyRef:
              name: voting-storage-secret
              key: MYSQL_USER
        - name: MYSQL_PASSWORD
          valueFrom:
            secretKeyRef:
              name: voting-storage-secret
              key: MYSQL_PASSWORD
        - name: MYSQL_DATABASE
          valueFrom:
            secretKeyRef:
              name: voting-storage-secret
              key: MYSQL_DATABASE
        - name: ANALYTICS_HOST
          value: "voting-analytics"
---
# voting-app-service.yaml
apiVersion: v1
kind: Service
metadata:
  name: voting-app
  labels: 
    app: voting-app
spec:
  type: LoadBalancer
  ports:
  - port: 80
    targetPort: 8080
    name: http
  selector:
    app: voting-app
---
# voting-analytics-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: voting-analytics
spec:
  replicas: 1
  selector:
    matchLabels:
      app: voting-analytics
      version: "2.0"
  template:
    metadata:
      labels:
        app: voting-analytics
        version: "2.0"
    spec:
      containers:
      - name: voting-analytics
        image: mcr.microsoft.com/aks/samples/voting/analytics:2.0
        imagePullPolicy: Always
        ports:
        - containerPort: 8080
          name: http
        env:
        - name: MYSQL_HOST
          value: "voting-storage"
        - name: MYSQL_USER
          valueFrom:
            secretKeyRef:
              name: voting-storage-secret
              key: MYSQL_USER
        - name: MYSQL_PASSWORD
          valueFrom:
            secretKeyRef:
              name: voting-storage-secret
              key: MYSQL_PASSWORD
        - name: MYSQL_DATABASE
          valueFrom:
            secretKeyRef:
              name: voting-storage-secret
              key: MYSQL_DATABASE
---
# voting-analytics-service.yaml
apiVersion: v1
kind: Service
metadata:
  name: voting-analytics
  labels: 
    app: voting-analytics
spec:
  ports:
  - port: 8080
    name: http
  selector:
    app: voting-analytics

Aşağıdakini çalıştırarak hizmeti dağıtın:

kubectl apply -f example.yaml

Bu kurala DNAT kuralı Azure Güvenlik Duvarı

Önemli

Çıkış trafiğini kısıtlamak Azure Güvenlik Duvarı tüm çıkış trafiğini zorlamak için bir kullanıcı tanımlı yol (UDR) oluşturmak üzere Azure Güvenlik Duvarı'i kullanıyorsanız, giriş trafiğine doğru şekilde izin vermek için Güvenlik Duvarı'da uygun bir DNAT kuralı sanız emin olun. Bir Azure Güvenlik Duvarı UDR ile birlikte kullanmak, asimetrik yönlendirme nedeniyle giriş kurulumunu bozar. (AKS alt ağının güvenlik duvarının özel IP adresine giden varsayılan bir yolu varsa ancak genel yük dengeleyici ( giriş veya Kubernetes hizmeti türü: LoadBalancer) kullanıyorsanız bu sorun oluşur. Bu durumda, gelen yük dengeleyici trafiği genel IP adresi üzerinden alınmıştır, ancak dönüş yolu güvenlik duvarının özel IP adresi üzerinden gider. Güvenlik duvarı durum bilgisine tabi olduğundan, güvenlik duvarının kurulu bir oturumdan haberdar olmadığını çünkü dönen paketi atlar. Sanal ağlarınızı giriş veya Azure Güvenlik Duvarı yük dengeleyiciniz ile tümleştirin, bkz. Azure Azure Güvenlik Duvarı ile Standart Load Balancer.

Gelen bağlantının yapılandırılması için dnat kuralının Azure Güvenlik Duvarı. Kümenizin bağlantısını test etmek için, güvenlik duvarı ön uç genel IP adresi için iç hizmet tarafından ortaya çıkacak iç IP'ye yönlendirecek bir kural tanımlanır.

Hedef adres, erişilecek güvenlik duvarında bağlantı noktası olduğu için özelleştirilebilir. Çevrilmiş adres, iç yük dengeleyicinin IP adresi olabilir. Çevrilmiş bağlantı noktası, Kubernetes hizmetiniz için açık bağlantı noktası olması gerekir.

Kubernetes hizmeti tarafından oluşturulan yük dengeleyiciye atanan iç IP adresini belirtmeniz gerekir. Aşağıdakini çalıştırarak adresi alın:

kubectl get services

Gereken IP adresi, aşağıdakine benzer şekilde EXTERNAL-IP sütununda listelenir.

NAME               TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
kubernetes         ClusterIP      10.41.0.1       <none>        443/TCP        10h
voting-analytics   ClusterIP      10.41.88.129    <none>        8080/TCP       9m
voting-app         LoadBalancer   10.41.185.82    20.39.18.6    80:32718/TCP   9m
voting-storage     ClusterIP      10.41.221.201   <none>        3306/TCP       9m

Aşağıdakini çalıştırarak hizmet IP'sini al:

SERVICE_IP=$(kubectl get svc voting-app -o jsonpath='{.status.loadBalancer.ingress[*].ip}')

Aşağıdakini çalıştırarak 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

Tarayıcıda Azure Güvenlik Duvarı uç IP adresine gidin.

AKS oylama uygulamasını görüyorsanız. Bu örnekte Güvenlik duvarı genel IP'si 52.253.228.132 olarak ve

Cats, Dogs ve Reset düğmelerini ve toplamları gösteren A KS Voting Uygulamasını gösteren ekran görüntüsü.

Kaynakları temizleme

Azure kaynaklarını temizlemek için AKS kaynak grubunu silin.

az group delete -g $RG

Sonraki adımlar

Bu makalede, kümenin çıkış trafiğini kısıtlamak istiyorsanız hangi bağlantı noktalarının ve adreslerin izin verdiklerini öğrendiniz. Ayrıca, Azure Güvenlik Duvarı 'nı kullanarak giden trafiğinizi nasıl güvenli hale getirmek istediğinizi gördünüz.

Gerekirse, giden tür userDefinedRoute belgelerininardından trafiği tercih ettiğiniz çıkış çözümünüze iletmek için yukarıdaki adımları genelleştirebilirsiniz.

Küme içindeki ve East-West trafik kısıtlamaları arasında Pod 'nin nasıl iletişim kuracağını kısıtlamak istiyorsanız, aks 'deki ağ ilkelerini kullanarak Pod arasındaki güvenli trafiğiinceleyin.