Mevcut bir Application Gateway kullanarak Application Gateway Giriş Denetleyicisi (AGIC) yükleme
Application Gateway Giriş Denetleyicisi (AGIC), Azure Kubernetes Service (AKS) kümenizin içindeki bir poddur. AGIC, Kubernetes Giriş kaynaklarını izler ve Kubernetes kümesinin durumuna göre Application Gateway yapılandırması oluşturur ve uygular.
İpucu
Ayrıca bkz. Kapsayıcılar için Application Gateway nedir?
Anahat
- Önkoşullar
- Azure Resource Manager Kimlik Doğrulaması (ARM)
- 1. Seçenek: MICROSOFT ENTRA İŞ YÜKÜ KIMLIĞI ayarlama ve VM'lerde Azure Kimliği oluşturma
- Seçenek 2: Hizmet Sorumlusu Ayarlama
- Helm kullanarak Giriş Denetleyicisi'ni yükleme
- Paylaşılan Application Gateway: AgIC'i, Application Gateway'in bir AKS kümesi ve/veya diğer Azure bileşenleri arasında paylaşıldığı bir ortama yükleyin.
Önkoşullar
Bu belgede, aşağıdaki araçların ve altyapının zaten yüklü olduğu varsayılır:
- Azure Container Networking Interface (CNI) ile AKS kümesi
- AKS kümesiyle aynı sanal ağda Application Gateway v2
- AKS kümeniz için yapılandırılmış Microsoft Entra İş Yükü Kimliği
- Cloud Shell, CLI
kubectl
, vehelm
yüklü azureaz
kabuk ortamıdır. Bu araçlar, bu dağıtımı yapılandırmayı desteklemek için kullanılan komutlar için gereklidir.
AGIC'yi yüklemeden önce Application Gateway yapılandırmanızı yedekleyin:
- Azure portalından Application Gateway örneğine gidin.
- Otomasyon bölümünde Şablonu dışarı aktar'ı ve ardından İndir'i seçin.
İndirdiğiniz zip dosyası, gerekli olması gerekirse App Gateway'i geri yüklemek için kullanabileceğiniz JSON şablonları, bash ve PowerShell betiklerini içerir
Helm'i yükleme
Helm , kubernetes için paketi yüklemek için kullanılan bir paket yöneticisidir application-gateway-kubernetes-ingress
.
Not
Cloud Shell kullanıyorsanız Helm'i yüklemeniz gerekmez. Azure Cloud Shell Helm sürüm 3 ile birlikte gelir. İlk adımı atlayın ve AGIC Helm deposunu ekleyin.
Helm'i yükleyin ve helm paketi eklemek
application-gateway-kubernetes-ingress
için aşağıdakileri çalıştırın:- Kubernetes RBAC özellikli AKS kümesi
kubectl create serviceaccount --namespace kube-system tiller-sa kubectl create clusterrolebinding tiller-cluster-rule --clusterrole=cluster-admin --serviceaccount=kube-system:tiller-sa helm init --tiller-namespace kube-system --service-account tiller-sa
AGIC Helm deposunu ekleyin:
helm repo add application-gateway-kubernetes-ingress https://appgwingress.blob.core.windows.net/ingress-azure-helm-package/ helm repo update
Azure Resource Manager Kimlik Doğrulaması
AGIC, Kubernetes API sunucusu ve Azure Resource Manager ile iletişim kurar. Bu API'lere erişmek için bir kimlik gerekir.
Microsoft Entra İş Yükü Kimliği ayarlama
Microsoft Entra İş Yükü Kimliği, diğer hizmet ve kaynakların kimliğini doğrulamak ve bunlara erişmek için yazılım iş yüküne atadığınız bir kimliktir. Bu kimlik, AKS podunuzun bu kimliği kullanmasına ve diğer Azure kaynaklarıyla kimlik doğrulamasına olanak tanır. Bu yapılandırma için AGIC podunun ARM'ye HTTP isteklerinde bulunma yetkisine sahip olması gerekir.
Belirli bir aboneliği geçerli etkin abonelik olarak ayarlamak için Azure CLI az account set komutunu kullanın. Ardından yönetilen kimlik oluşturmak için az identity create komutunu kullanın. Kimliğin düğüm kaynak grubunda oluşturulması gerekir. Düğüm kaynak grubuna varsayılan olarak MC_myResourceGroup_myAKSCluster_eastus gibi bir ad atanır.
az account set --subscription "subscriptionID"
az identity create --name "userAssignedIdentityName" --resource-group "resourceGroupName" --location "location" --subscription "subscriptionID"
Rol ataması için aşağıdaki komutu çalıştırarak yeni oluşturulan kimliği tanımlayın
principalId
:$resourceGroup="resource-group-name" $identityName="identity-name" az identity list -g $resourceGroup --query "[?name == '$identityName'].principalId | [0]" -o tsv
Kimliğe Application Gateway'inize Katkıda Bulunan erişimi verin. Application Gateway kimliğine ihtiyacınız vardır ve bu kimlik şöyle görünür:
/subscriptions/A/resourceGroups/B/providers/Microsoft.Network/applicationGateways/C
. İlk olarak, aşağıdaki komutu çalıştırarak aboneliğinizdeki Application Gateway kimliklerinin listesini alın:az network application-gateway list --query '[].id'
Kimliğe Katkıda Bulunan erişimi atamak için aşağıdaki komutu çalıştırın:
$resourceGroup="resource-group-name" $identityName="identity-Name" # Get the Application Gateway ID $AppGatewayID=$(az network application-gateway list --query '[].id' -o tsv) $role="contributor" # Get the principal ID for the User assigned identity $principalId=$(az identity list -g $resourceGroup --query "[?name == '$identityName'].principalId | [0]" -o tsv) az role assignment create --assignee $principalId --role $role --scope $AppGatewayID
Kimlik Okuyucusu'na Application Gateway kaynak grubuna erişim verin. Kaynak grubu kimliği şöyle görünür:
/subscriptions/A/resourceGroups/B
. Tüm kaynak gruplarını şu şekilde alabilirsiniz:az group list --query '[].id'
$resourceGroup="resource-group-name" $identityName="identity-Name" # Get the Application Gateway resource group $AppGatewayResourceGroup=$(az network application-gateway list --query '[].resourceGroup' -o tsv) # Get the Application Gateway resource group ID $AppGatewayResourceGroupID=$(az group show --name $AppGatewayResourceGroup --query id -o tsv) $role="Reader" # Get the principal ID for the User assigned identity $principalId=$(az identity list -g $resourceGroup --query "[?name == '$identityName'].principalId | [0]" -o tsv) # Assign the Reader role to the User assigned identity at the resource group scope az role assignment create --role $role --assignee $principalId --scope $AppGatewayResourceGroupID
Not
AGIC tarafından kullanılan kimliğin Application Gateway'in dağıtıldığı alt ağa Microsoft.Network/virtualNetworks/subnets/join/action izninin atandığından emin olun. Özel bir rol bu izinle tanımlanmamışsa, Microsoft.Network/virtualNetworks/subnets/join/action iznini içeren yerleşik Ağ Katkıda Bulunanı rolünü kullanabilirsiniz.
Hizmet Sorumlusu Kullanma
Kubernetes gizli dizisini kullanarak ARM'ye AGIC erişimi sağlamak da mümkündür.
Bir Active Directory Hizmet Sorumlusu oluşturun ve base64 ile kodlayın. JSON blobunun Kubernetes'e kaydedilmesi için base64 kodlaması gereklidir.
az ad sp create-for-rbac --role Contributor --sdk-auth | base64 -w0
base64 kodlanmış JSON blobunu dosyaya
helm-config.yaml
ekleyin. Hakkındahelm-config.yaml
daha fazla bilgi sonraki bölümdedir.armAuth: type: servicePrincipal secretJSON: <Base64-Encoded-Credentials>
Azure Uygulaması Lication Gateway Giriş Denetleyicisi Eklentisini Dağıtma
Giriş Denetleyicisi dağıtım bildirimi oluşturma
---
# file: pet-supplies-ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: pet-supplies-ingress
spec:
ingressClassName: azure-application-gateway
rules:
- http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: store-front
port:
number: 80
- path: /order-service
pathType: Prefix
backend:
service:
name: order-service
port:
number: 3000
- path: /product-service
pathType: Prefix
backend:
service:
name: product-service
port:
number: 3002
Giriş Denetleyicisini Dağıtma
$namespace="namespace"
$file="pet-supplies-ingress.yaml"
kubectl apply -f $file -n $namespace
Giriş Denetleyicisini Helm Grafiği Olarak Yükleme
İlk birkaç adımda Kubernetes kümenize Helm Tiller'ı yükleyeceğiz. AGIC Helm paketini yüklemek için Cloud Shell kullanın:
Helm depoyu
application-gateway-kubernetes-ingress
ekleme ve helm güncelleştirmesi gerçekleştirmehelm repo add application-gateway-kubernetes-ingress https://appgwingress.blob.core.windows.net/ingress-azure-helm-package/ helm repo update
AGIC'i yapılandıran helm-config.yaml dosyasını indirin:
wget https://raw.githubusercontent.com/Azure/application-gateway-kubernetes-ingress/master/docs/examples/sample-helm-config.yaml -O helm-config.yaml
Veya aşağıdaki YAML dosyasını kopyalayın:
# This file contains the essential configs for the ingress controller helm chart # Verbosity level of the App Gateway Ingress Controller verbosityLevel: 3 ################################################################################ # Specify which application gateway the ingress controller must manage # appgw: subscriptionId: <subscriptionId> resourceGroup: <resourceGroupName> name: <applicationGatewayName> # Setting appgw.shared to "true" creates an AzureIngressProhibitedTarget CRD. # This prohibits AGIC from applying config for any host/path. # Use "kubectl get AzureIngressProhibitedTargets" to view and change this. shared: false ################################################################################ # Specify which kubernetes namespace the ingress controller must watch # Default value is "default" # Leaving this variable out or setting it to blank or empty string would # result in Ingress Controller observing all accessible namespaces. # # kubernetes: # watchNamespace: <namespace> ################################################################################ # Specify the authentication with Azure Resource Manager # # Two authentication methods are available: # - Option 1: Azure-AD-workload-identity armAuth: type: workloadIdentity identityClientID: <identityClientId> ## Alternatively you can use Service Principal credentials # armAuth: # type: servicePrincipal # secretJSON: <<Generate this value with: "az ad sp create-for-rbac --role Contributor --sdk-auth | base64 -w0" >> ################################################################################ # Specify if the cluster is Kubernetes RBAC enabled or not rbac: enabled: false # true/false # Specify aks cluster related information. THIS IS BEING DEPRECATED. aksClusterConfiguration: apiServerAddress: <aks-api-server-address>
helm-config.yaml dosyasını düzenleyin ve ve
armAuth
değerleriniappgw
doldurun.Not
<identity-client-id>
, önceki bölümde ayarladığınız Microsoft Entra İş Yükü Kimliği bir özelliğidir. Şu komutu çalıştırarak bu bilgileri alabilirsiniz:az identity show -g <resourcegroup> -n <identity-name>
, burada<resourcegroup>
AKS kümesi, Application Gateway ve yönetilen kimlikle ilgili altyapı kaynaklarını barındıran kaynak grubudur.Helm grafiğini
application-gateway-kubernetes-ingress
önceki adımdakihelm-config.yaml
yapılandırmayla yüklemehelm install -f <helm-config.yaml> application-gateway-kubernetes-ingress/ingress-azure
Alternatif olarak ve Helm komutunu tek adımda birleştirebilirsiniz
helm-config.yaml
:helm install ./helm/ingress-azure \ --name ingress-azure \ --namespace default \ --debug \ --set appgw.name=applicationgatewayABCD \ --set appgw.resourceGroup=your-resource-group \ --set appgw.subscriptionId=subscription-uuid \ --set appgw.shared=false \ --set armAuth.type=servicePrincipal \ --set armAuth.secretJSON=$(az ad sp create-for-rbac --role Contributor --sdk-auth | base64 -w0) \ --set rbac.enabled=true \ --set verbosityLevel=3 \ --set kubernetes.watchNamespace=default \ --set aksClusterConfiguration.apiServerAddress=aks-abcdefg.hcp.westus2.azmk8s.io
Düzgün başlatılıp başlatılmadığını doğrulamak için yeni oluşturulan podun günlüğünü denetleyin
Paylaşılan Application Gateway
Varsayılan olarak AGIC, bağlı olduğu Application Gateway'in tam sahipliğini varsayar. AGIC sürüm 0.8.0 ve üzeri, tek bir Application Gateway'i diğer Azure bileşenleriyle paylaşabilir. Örneğin, Sanal Makine Ölçek Kümesi ve AKS kümesinde barındırılan bir uygulama için aynı Application Gateway'i kullanabiliriz.
Bu ayarı etkinleştirmeden önce Application Gateway yapılandırmanızı yedekleyin:
- Azure portalından örneğinize
Application Gateway
gidin - Otomasyon bölümünde Şablonu dışarı aktar'ı ve ardından İndir'i seçin.
İndirdiğiniz zip dosyası, Application Gateway'i geri yüklemek için kullanabileceğiniz JSON şablonları, bash ve PowerShell betiklerini içerir
Örnek Senaryo
Şimdi iki web sitesi için trafiği yöneten hayali bir Application Gateway'e bakalım:
dev.contoso.com
- Application Gateway ve AGIC kullanarak yeni bir AKS kümesinde barındırılarakprod.contoso.com
- Azure Sanal Makine Ölçek Kümesinde barındır
AGIC, varsayılan ayarlarla, işaret edilen Application Gateway'in %100 sahipliğini varsayar. AGIC, App Gateway'in tüm yapılandırmasının üzerine yazar. Kubernetes Girişinde tanımlamadan (Application Gateway'de) için prod.contoso.com
el ile bir dinleyici oluşturursanız AGIC yapılandırmayı prod.contoso.com
saniyeler içinde siler.
AGIC'i yüklemek ve Sanal Makine Ölçek Kümesi makinelerimizden hizmet vermek prod.contoso.com
için AGIC'i yalnızca yapılandırmayla dev.contoso.com
sınırlamamız gerekir. Bu, aşağıdaki CRD örneği başlatılarak kolaylaştırılır:
cat <<EOF | kubectl apply -f -
apiVersion: "appgw.ingress.k8s.io/v1"
kind: AzureIngressProhibitedTarget
metadata:
name: prod-contoso-com
spec:
hostname: prod.contoso.com
EOF
Yukarıdaki komut bir AzureIngressProhibitedTarget
nesne oluşturur. Bu, AGIC'nin (sürüm 0.8.0 ve üzeri) Application prod.contoso.com
Gateway yapılandırmasının varlığından haberdar olmasını sağlar ve bu konak adıyla ilgili yapılandırmaların değiştirilmesini önlemek için açıkça yönerge verir.
Yeni AGIC yüklemesi ile etkinleştirme
AGIC'yi (sürüm 0.8.0 ve üzeri) Application Gateway yapılandırmasının bir alt kümesiyle sınırlamak için şablonu değiştirin helm-config.yaml
.
appgw:
bölümünün altında anahtar ekleyin shared
ve olarak true
ayarlayın.
appgw:
subscriptionId: <subscriptionId> # existing field
resourceGroup: <resourceGroupName> # existing field
name: <applicationGatewayName> # existing field
shared: true # <<<<< Add this field to enable shared Application Gateway >>>>>
Helm değişikliklerini uygulama:
CRD'nin
AzureIngressProhibitedTarget
şu şekilde yüklendiğinden emin olun:kubectl apply -f https://raw.githubusercontent.com/Azure/application-gateway-kubernetes-ingress/7b55ad194e7582c47589eb9e78615042e00babf3/crds/AzureIngressProhibitedTarget-v1-CRD-v1.yaml
Helm'i Güncelleştir:
helm upgrade \ --recreate-pods \ -f helm-config.yaml \ ingress-azure application-gateway-kubernetes-ingress/ingress-azure
Sonuç olarak AKS kümenizin adlı prohibit-all-targets
yeni bir örneği AzureIngressProhibitedTarget
vardır:
kubectl get AzureIngressProhibitedTargets prohibit-all-targets -o yaml
adından da anlaşılacağı gibi nesnesi prohibit-all-targets
AGIC'nin herhangi bir konak ve yol için yapılandırmayı değiştirmesini engeller.
AGIC ile appgw.shared=true
helm yüklemesi yapar, ancak Application Gateway'de herhangi bir değişiklik yapmaz.
İzinleri genişletme
ile Helm appgw.shared=true
ve varsayılan prohibit-all-targets
ayarı AGIC'nin yapılandırma uygulamasını engellediğinden AGIC izinlerini genişletin:
Özel kurulumunuzu içeren aşağıdaki kod parçacığıyla adlı
AzureIngressProhibitedTarget
yeni bir YAML dosyası oluşturun:cat <<EOF | kubectl apply -f - apiVersion: "appgw.ingress.k8s.io/v1" kind: AzureIngressProhibitedTarget metadata: name: your-custom-prohibitions spec: hostname: your.own-hostname.com EOF
Yalnızca kendi özel yasaklamanızı oluşturduktan sonra, çok geniş olan varsayılanı silebilirsiniz:
kubectl delete AzureIngressProhibitedTarget prohibit-all-targets
Mevcut AGIC yüklemesi için etkinleştirme
Kümemizde zaten çalışan bir AKS kümesi, Application Gateway ve yapılandırılmış AGIC olduğunu varsayalım. Için bir Girişimiz prod.contoso.com
var ve kümeden gelen trafiğe başarıyla hizmet ediyoruz. Mevcut Application Gateway'imize eklemek staging.contoso.com
istiyoruz, ancak bunu bir VM'de barındırmamız gerekiyor. Mevcut Application Gateway'i yeniden kullanacağız ve için staging.contoso.com
dinleyici ve arka uç havuzlarını el ile yapılandıracağız. Ancak Application Gateway yapılandırmasında el ile ince ayar (portal, ARM API'leri veya Terraform kullanarak) AGIC'nin tam sahiplik varsayımlarıyla çakışıyor. Değişiklikleri uyguladıktan kısa bir süre sonra AGIC bunların üzerine yazar veya siler.
AGIC'in bir yapılandırma alt kümesinde değişiklik yapmasını engelleyebiliriz.
Aşağıdaki kod parçacığıyla adlı
AzureIngressProhibitedTarget
yeni bir YAML dosyası oluşturun:cat <<EOF | kubectl apply -f - apiVersion: "appgw.ingress.k8s.io/v1" kind: AzureIngressProhibitedTarget metadata: name: manually-configured-staging-environment spec: hostname: staging.contoso.com EOF
Yeni oluşturulan nesneyi görüntüleyin:
kubectl get AzureIngressProhibitedTargets
Azure portalından Application Gateway yapılandırmasını değiştirin. Dinleyiciler, yönlendirme kuralları, arka uçlar vb. ekleyin. Oluşturduğumuz yeni nesne (
manually-configured-staging-environment
), AGIC'nin ile ilgili Application Gateway yapılandırmasının üzerine yazılmasınıstaging.contoso.com
yasaklar.