Share via


Azure Kubernetes Service (AKS) kümelerini korumak için Azure Güvenlik Duvarı kullanma

Bu makalede, giden ve gelen trafiğin güvenliğini sağlamak için Azure Güvenlik Duvarı kullanarak Azure Kubernetes Service (AKS) kümelerini nasıl koruyabileceğiniz gösterilmektedir.

Background

Azure Kubernetes Service (AKS), Azure'da yönetilen bir Kubernetes kümesi sunar. Daha fazla bilgi için bkz . Azure Kubernetes Service.

AKS tam olarak yönetilen bir çözüm olmasına rağmen, küme ile dış ağlar arasındaki giriş ve çıkış trafiğinin güvenliğini sağlamak için yerleşik bir çözüm sunmaz. Azure Güvenlik Duvarı buna bir çözüm sunar.

AKS kümeleri bir sanal ağa dağıtılır. Bu ağ yönetilebilir (AKS tarafından oluşturulur) veya özel (kullanıcı tarafından önceden yapılandırılmıştır). Her iki durumda da kümenin bu sanal ağın dışındaki hizmetlere giden bağımlılıkları vardır (hizmetin gelen bağımlılıkları yoktur). Yönetim ve işletim amaçları doğrultusunda AKS kümesindeki düğümlerin belirli bağlantı noktalarına ve bu giden bağımlılıkları açıklayan tam etki alanı adlarına (FQDN) erişmesi gerekir. Bu, Kubernetes API sunucusuyla iletişim kuran düğümler dahil ancak bunlarla sınırlı olmamak üzere çeşitli işlevler için gereklidir. Çekirdek Kubernetes kümesi bileşenlerini ve düğüm güvenlik güncelleştirmelerini veya Microsoft Container Registry'den (MCR) temel sistem kapsayıcı görüntülerini vb. indirip yüklerler. Bu giden bağımlılıklar, arkalarında statik adresleri olmayan FQDN'lerle neredeyse tamamen tanımlanır. Statik adreslerin olmaması, Aks kümesinden giden trafiği kilitlemek için Ağ Güvenlik Gruplarının kullanılamayacağı anlamına gelir. Bu nedenle AKS kümeleri varsayılan olarak sınırsız giden (çıkış) İnternet erişimine sahiptir. Bu ağ erişimi düzeyi, çalıştırdığınız düğümlerin ve hizmetlerin gerektiğinde dış kaynaklara erişmesine olanak tanır.

Ancak üretim ortamında, diğer güvenlik açıklarıyla birlikte veri sızdırmayı önlemek için Kubernetes kümesiyle yapılan iletişimler korunmalıdır. Tüm gelen ve giden ağ trafiği bir dizi güvenlik kuralına göre izlenmeli ve denetlenmelidir. Bunu yapmak istiyorsanız çıkış trafiğini kısıtlamanız gerekir, ancak küme bakım görevlerinin iyi durumda tutulması ve daha önce bahsedilen giden bağımlılıkların karşılanması için sınırlı sayıda bağlantı noktası ve adresin erişilebilir durumda kalması gerekir.

En basit çözüm, etki alanı adlarına göre giden trafiği denetleyebilen bir güvenlik duvarı cihazı kullanır. Güvenlik duvarı genellikle güvenilir ağ ile İnternet gibi güvenilmeyen bir ağ arasında bir engel oluşturur. Örneğin Azure Güvenlik Duvarı, hedefin FQDN'sine bağlı olarak giden HTTP ve HTTPS trafiğini kısıtlayabilir ve ayrıntılı çıkış trafik denetimi sağlar, ancak aynı zamanda AKS kümesinin giden bağımlılıklarını kapsayan FQDN'lere (NSG'lerin yapamayabileceği bir şey) erişim sağlamanıza da olanak tanır. Benzer şekilde, paylaşılan çevre ağına dağıtılan bir Azure Güvenlik Duvarı tehdit bilgileri tabanlı filtrelemeyi etkinleştirerek giriş trafiğini denetleyebilir ve güvenliği geliştirebilirsiniz. Bu filtreleme uyarılar sağlayabilir ve bilinen kötü amaçlı IP adreslerine ve etki alanlarına gelen ve giden trafiği reddedebilir.

Bunun örnek bir ortamda nasıl çalıştığına ilişkin hızlı bir genel bakış için Abhinav Sriram'ın aşağıdaki videosuna bakın:

Videoda kullanılan örnek ortamı otomatik olarak yapılandırmak için Microsoft İndirme Merkezi'nden bash betik dosyası ve yaml dosyası içeren bir zip dosyası indirebilirsiniz. Hem giriş hem de çıkış trafiğini korumak için Azure Güvenlik Duvarı yapılandırılır. Aşağıdaki kılavuzlar, özel yapılandırmayı ayarlayabilmeniz için betiğin her adımında daha ayrıntılı bir şekilde ilerler.

Aşağıdaki diyagramda, betiğin ve kılavuzun yapılandırılan videodaki örnek ortam gösterilmektedir:

Diagram showing A K S cluster with Azure Firewall for ingress egress filtering.

Betik ile aşağıdaki kılavuz arasında bir fark vardır. Betik yönetilen kimlikleri kullanır, ancak kılavuz bir hizmet sorumlusu kullanır. Bu, küme kaynaklarını yönetmek ve oluşturmak için kimlik oluşturmanın iki farklı yolunu gösterir.

Azure Güvenlik Duvarı kullanarak çıkış trafiğini kısıtlama

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

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

Empty network topology

Tüm kaynakları barındıracak bir kaynak grubu oluşturun.

# Create Resource Group

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

AKS kümesini ve Azure Güvenlik Duvarı barındırmak için iki alt ağa sahip bir sanal ağ oluşturun. Her birinin kendi alt ağı vardır. 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ı gelen ve giden kuralları yapılandırılmalıdır. 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.

Firewall and UDR

Önemli

Kümeniz veya uygulamanız aynı veya küçük 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 buraya bakın

Azure Güvenlik Duvarı ön uç adresi olarak kullanılan standart bir SKU genel IP kaynağı oluşturun.

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

Azure Güvenlik Duvarı oluşturmak için önizleme cli uzantısını kaydedin.

# 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.

Dekont

genel IP adresinin Azure Güvenlik Duvarı ayarlanması birkaç dakika sürebilir. Ağ kurallarında FQDN'yi kullanmak için DNS proxy'sinin etkinleştirilmesi gerekir; etkinleştirildiğinde güvenlik duvarı 53 numaralı bağlantı noktasını dinler ve DNS isteklerini daha önce 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, daha sonra yapılandırma için güvenlik duvarı ön uç IP adresini 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)

Dekont

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ı atlayan bir UDR 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, bunu bir yol tablosu oluşturarak yaparsınız.

Belirli bir alt ağ ile ilişkilendirilecek boş bir yol tablosu oluşturun. Rota tablosu, sonraki atlamayı daha önce 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ı nasıl geçersiz kılabileceğiniz veya bir alt ağın yönlendirme tablosuna daha fazla yol ekleyebileceğiniz hakkında sanal ağ yönlendirme tablosu belgelerine bakın.

Güvenlik duvarı kuralları ekleme

Dekont

API sunucusuyla konuşması gereken kube-system veya gatekeeper-system ad alanları dışındaki uygulamalar için, fqdn etiketi 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.

Güvenlik duvarınızı yapılandırmak için aşağıdaki üç ağ kuralını kullanabilirsiniz. Bu kuralları dağıtımınıza göre uyarlamanız gerekebilir. İlk kural TCP üzerinden 9000 numaralı bağlantı noktasına erişime izin verir. İkinci kural UDP aracılığıyla 1194 ve 123 numaralı bağlantı noktasına erişime izin verir. Bu kuralların her ikisi de yalnızca kullanmakta olduğumuz Azure Bölge CIDR'ye (bu örnekte Doğu ABD) giden trafiğe izin verir.

Son olarak, UDP aracılığıyla İnternet saat sunucusu FQDN'sine (örneğin:ntp.ubuntu.com) 123 numaralı bağlantı noktasını açan üçüncü bir ağ kuralı ekleyeceğiz. FQDN'yi ağ kuralı olarak eklemek, Azure Güvenlik Duvarı belirli özelliklerinden biridir ve kendi seçeneklerinizi kullanırken bunu uyarlamanız gerekir.

Ağ kurallarını ayarladıktan sonra, 443 numaralı TCP bağlantı noktası ve 80 numaralı bağlantı noktası üzerinden erişilebilen gerekli FQDN'leri kapsayan bir uygulama kuralı AzureKubernetesService da ekleyeceğiz. Ayrıca dağıtımınıza göre daha fazla ağ ve uygulama kuralı yapılandırmanız gerekebilir. Daha fazla bilgi için bkz . Azure Kubernetes Service (AKS) kümeleri için giden ağ ve FQDN kuralları.

FW Ağ Kuralları Ekleme

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

FW Uygulama Kuralları Ekleme

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ı 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ğ daha önce oluşturulan yol tablosuna başvurmalıdır. İlişkilendirme, kümenin alt ağının yol tablosunu güncelleştirmek için hem kümeyi hem de güvenlik duvarını barındıran sanal ağa bir komut vererek 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

Aks'yi UDR giden türüyle mevcut ağa dağıtma

Artık aks kümesi mevcut sanal ağa dağıtılabilir. Giden türünü userDefinedRoutingde kullanırsınız. Bu özellik, giden trafiğin güvenlik duvarı üzerinden zorlanmasını ve başka çıkış yolu olmamasını sağlar (varsayılan olarak Load Balancer giden türü kullanılabilir).

aks-deploy

Dağıtılacak hedef alt ağ, ortam değişkeniyle $SUBNETIDtanımlanır. Değişkeni önceki adımlarda tanımlamadık $SUBNETID . 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'yi kullanmak için giden türü tanımlarsınız. Bu yapılandırma, AKS'nin yük dengeleyici için kurulum ve IP sağlamayı atlamasına olanak tanır.

Önemli

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

Bahşiş

Küme dağıtımına Özel Küme veya işletim sistemi SKU'su değiştirme gibi ek özellikler eklenebilir.

API sunucusu yetkili IP aralıkları için AKS özelliği, API sunucusu erişimini yalnızca güvenlik duvarının genel uç noktasıyla sınırlamak için eklenebilir. 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.

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

Dekont

Ağ eklentisiyle kubenet kendi sanal ağınızı ve yönlendirme tablonuzu oluşturmak ve kullanmak için kullanıcı tarafından atanan yönetilen kimliği kullanmanız gerekir. Sistem tarafından atanan yönetilen kimlik için, küme oluşturmadan önce kimlik kimliğini alamayacağız ve bu da rol atamasının etkili olması için gecikmeye neden olur.

Ağ eklentisiyle azure kendi sanal ağınızı ve yönlendirme tablonuzu oluşturmak ve kullanmak için hem sistem tarafından atanan hem de kullanıcı tarafından atanan yönetilen kimlikler desteklenir.

API sunucusuna geliştirici erişimini etkinleştirme

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

Aşağıdaki komutla 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ümenize bağlanacak şekilde yapılandırmak kubectl için az aks get-credentials komutunu kullanın.

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

Azure Güvenlik Duvarı kullanarak giriş trafiğini kısıtlama

Artık hizmetleri kullanıma sunma ve uygulamaları bu kümeye dağıtmaya başlayabilirsiniz. Bu örnekte bir genel hizmeti kullanıma sunarız, ancak iç yük dengeleyici aracılığıyla bir iç hizmeti kullanıma sunma seçeneğini de belirleyebilirsiniz.

Public Service DNAT

Aşağıdaki yaml dosyasını adlı example.yamlbir dosyaya kopyalayarak Azure oylama uygulaması uygulamasını 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/azuredocs/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/azuredocs/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/azuredocs/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ğıdakileri çalıştırarak hizmeti dağıtın:

kubectl apply -f example.yaml

Azure Güvenlik Duvarı'a DNAT kuralı ekleme

Ö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 kullanıcı tanımlı bir yol (UDR) oluşturduğunuzda, giriş trafiğine doğru şekilde izin vermek için Güvenlik Duvarı'nda 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 güvenlik duvarının özel IP adresine giden varsayılan bir yol varsa, ancak genel yük dengeleyici - giriş veya Kubernetes hizmeti türü: LoadBalancer) kullanıyorsanız 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ı yazılmalıdır. 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, erişilecek güvenlik duvarındaki bağlantı noktası olduğundan ö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 belirtmeniz gerekir. Şu komutunu ç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ın:

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

Komutunu ç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

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

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

Screenshot shows the A K S Voting App with buttons for Cats, Dogs, and Reset, and totals.

Kaynakları temizleme

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

az group delete -g $RG

Sonraki adımlar