Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Application Gateway Giriş Denetleyicisi (AGIC), Azure Kubernetes Service (AKS) kümenizin içindeki bir poddur. AGIC, Kubernetes Giriş kaynaklarını izler. Kubernetes kümesinin durumu temel alınarak bir Azure Application Gateway yapılandırması oluşturur ve uygular.
İpucu
Kubernetes giriş çözümünüz için Application Gateway for Containers'ı göz önünde bulundurun. Daha fazla bilgi için bkz. Quickstart: Kapsayıcılar için Application Gateway ALB Denetleyicisi dağıtma.
Önkoşullar
Bu makalede, aşağıdaki araçları ve altyapıyı zaten yüklediğiniz varsayılır:
- Azure Container Networking Interface (CNI) içeren bir AKS kümesi.
- AKS kümesiyle aynı sanal ağda Application Gateway v2 .
- Microsoft Entra İş Yükü Kimliği AKS kümeniz için yapılandırılmış.
- Azure shell ortamı olarak Azure Cloud Shell,
az(Azure CLI) vekubectlyüklüdür. Bu araçlar, bu dağıtımı yapılandırmayı destekleyen komutlar için gereklidir.
Helm deposunu ekle
Helm , Kubernetes için bir paket yöneticisidir.
application-gateway-kubernetes-ingress paketini yüklemek için kullanırsınız.
Cloud Shell kullanıyorsanız Helm'i yüklemeniz gerekmez. Cloud Shell, Helm sürüm 3 ile birlikte gelir. Kubernetes rol tabanlı erişim denetimi (RBAC) ile etkinleştirilmiş bir AKS kümesi için AGIC Helm deposunu eklemek için aşağıdaki komutları çalıştırın:
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
Application Gateway dağıtımını yedekleme
AGIC'yi yüklemeden önce Application Gateway dağıtımınızın yapılandırmasını yedekleyin:
- Azure portalında Application Gateway dağıtımınıza gidin.
- Otomasyon bölümünde Şablonu dışarı aktar'ı ve ardından İndir'i seçin.
İndirilen .zip dosyası, geri yükleme gerekirse Application Gateway'i geri yüklemek için kullanabileceğiniz JSON şablonları, Bash betikleri ve PowerShell betikleri içerir.
Resource Manager kimlik doğrulaması için kimlik oluşturma
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 veya hizmet ilkesi kullanabilirsiniz.
Microsoft Entra İş Yükü Kimliği ayarlama
Microsoft Entra İş Yükü Kimliği, yazılım iş yüküne atadığınız bir kimliktir. Bu kimlik, AKS podunuzun diğer Azure kaynaklarıyla kimlik doğrulamasına olanak tanır.
Bu yapılandırma için Azure Resource Manager'a HTTP istekleri göndermek için AGIC podunun yetkilendirmesine ihtiyacınız vardır.
Belirli bir aboneliği geçerli etkin abonelik olarak ayarlamak için Azure CLI az account set komutunu kullanın:
az account set --subscription "subscriptionID"Ardından yönetilen kimlik oluşturmak için az identity create komutunu kullanın. Kimliği düğüm kaynak grubunda oluşturmanız gerekir. Düğüm kaynak grubuna varsayılan olarak
MC_myResourceGroup_myAKSCluster_eastusgibi bir ad atanır.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ğin
principalIddeğerini belirleyin:$resourceGroup="resource-group-name" $identityName="identity-name" az identity list -g $resourceGroup --query "[?name == '$identityName'].principalId | [0]" -o tsvKimlik Katkıda Bulunan için Application Gateway dağıtımınıza erişim izni verin. Application Gateway dağıtımının kimliğine ihtiyacınız vardır ve bu kimlik şuna benzer
/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ı Sağlayan 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 $AppGatewayIDApplication Gateway kaynak grubuna Kimlik Okuyucu erişimini verin. Kaynak grubu kimliği
/subscriptions/A/resourceGroups/Bşeklinde görünür. komutunu çalıştırarakaz group list --query '[].id'tüm kaynak gruplarını alabilirsiniz.$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 uygun izinlere sahip olduğundan emin olun. Kimlik için gereken izinlerin listesi burada bulunabilir: Altyapıyı Yapılandırma - İzinler. Özel bir rol gerekli izinlerle tanımlanmamışsa, Ağ Katkıda Bulunanı rolünü kullanabilirsiniz.
Hizmet sorumlusu ayarlama
Kubernetes gizli dizisi kullanarak Azure Resource Manager'a 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 -w0Base64 kodlu JSON blobunu dosyaya
helm-config.yamlekleyin.helm-config.yamldosyası AGIC'yi yapılandırır.armAuth: type: servicePrincipal secretJSON: <Base64-Encoded-Credentials>
AGIC eklentisini dağıtma
Giriş denetleyicisi için 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ğıt
$namespace="namespace"
$file="pet-supplies-ingress.yaml"
kubectl apply -f $file -n $namespace
Giriş denetleyicisini Helm grafiği olarak yükleme
AGIC Helm paketini yüklemek için Cloud Shell kullanın:
Helm güncelleştirmesi gerçekleştirme:
helm repo updateİndir:
helm-config.yamlwget https://raw.githubusercontent.com/Azure/application-gateway-kubernetes-ingress/master/docs/examples/sample-helm-config.yaml -O helm-config.yamlVeya 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.yamldüzenleyin veappgwilearmAuthiçin değerleri doldurun.Not
<identity-client-id>, önceki bölümde ayarladığınız Microsoft Entra İş Yükü Kimliği değerinin bir özelliğidir. Aşağıdaki komutu çalıştırarak bu bilgileri alabilirsiniz:az identity show -g <resourcegroup> -n <identity-name>. Bu komutta AKS kümesi,<resourcegroup>Application Gateway ve yönetilen kimlikle ilgili altyapı kaynaklarını barındıran kaynak grubudur.Helm grafiğini önceki adımdaki
helm-config.yamlyapılandırmayla yükleyin:helm install agic-controller oci://mcr.microsoft.com/azure-application-gateway/charts/ingress-azure --version 1.8.1 -f helm-config.yamlAlternatif olarak,
helm-config.yamlve Helm komutunu tek adımda birleştirebilirsiniz.helm install oci://mcr.microsoft.com/azure-application-gateway/charts/ingress-azure \ --name agic-controller \ --version 1.8.1 \ --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.ioYeni oluşturulan podun günlüğünü denetleyerek düzgün şekilde başlatıldığını doğruladığınızdan emin olun.
Azure Application Gateway dağıtımını kullanarak bir AKS hizmetini HTTP veya HTTPS üzerinden nasıl kullanıma açabileceğinizi anlamak için bu nasıl yapılır kılavuzuna bakın.
Paylaşılan Application Gateway dağıtımı ayarlama
AGIC, bağlı olduğu Application Gateway dağıtımının tam sahipliğini varsayılan olarak kabul eder. AGIC sürüm 0.8.0 ve üzeri, tek bir Application Gateway dağıtımını diğer Azure bileşenleriyle paylaşabilir. Örneğin, Azure sanal makine ölçek kümesinde ve AKS kümesinde barındırılan bir uygulama için aynı Application Gateway dağıtımını kullanabilirsiniz.
Örnek senaryo
şimdi iki web sitesi için trafiği yöneten hayali bir Application Gateway dağıtımına göz atalım:
-
dev.contoso.com: Application Gateway ve AGIC kullanılarak yeni bir AKS kümesi üzerinde barındırılan. -
prod.contoso.com: Sanal makine ölçek setinde barındırılıyor.
Varsayılan ayarlarla AGIC, Application Gateway dağıtımının işaret edilen %100 sahipliğini varsayar. AGIC App Gateway yapılandırmasının tümünü değiştirir. Application Gateway'de Kubernetes girişinde tanımlamadan el ile dinleyici prod.contoso.com oluşturursanız AGIC, yapılandırmayı prod.contoso.com saniyeler içinde siler.
AGIC'i yüklemek ve ayrıca sanal makine ölçek kümesini kullanan makinelerden prod.contoso.com hizmetini sunmak için, AGIC'i yalnızca dev.contoso.com yapılandırmakla sınırlamanız gerekir. Aşağıdaki özel kaynak tanımının (CRD) örneğini ekleyerek bu kısıtlamayı kolaylaştırırsınız:
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 nesne AGIC'yi (sürüm 0.8.0 ve üzeri) için prod.contoso.comApplication Gateway yapılandırmasının varlığından haberdar eder. Bu nesne ayrıca AGIC'e bu ana bilgisayar adıyla ilgili yapılandırmaları değiştirmekten kaçınmasını açıkça bildirmektedir.
Yeni bir AGIC yüklemesi kullanarak paylaşılan uygulama ağ geçidi dağıtımını 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ünde bir shared anahtar ekleyin ve olarak trueayarlayı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:
AzureIngressProhibitedTargetCRD'nin yüklü olduğundan emin olun.kubectl apply -f https://raw.githubusercontent.com/Azure/application-gateway-kubernetes-ingress/7b55ad194e7582c47589eb9e78615042e00babf3/crds/AzureIngressProhibitedTarget-v1-CRD-v1.yamlHelm'i Güncelleştir:
helm upgrade \ --recreate-pods \ -f helm-config.yaml \ agic-controller oci://mcr.microsoft.com/azure-application-gateway/charts/ingress-azure
Sonuç olarak, AKS kümenizde AzureIngressProhibitedTarget adlı yeni bir prohibit-all-targets örneği vardır.
kubectl get AzureIngressProhibitedTargets prohibit-all-targets -o yaml
prohibit-all-targets nesnesi, AGIC'in herhangi bir konak ve yol için yapılandırmayı değiştirmesini engeller. Helm, appgw.shared=true ile AGIC'i kurar ve dağıtır, ancak Application Gateway'de herhangi bir değişiklik yapmaz.
İzinleri genişletme
Helm'in appgw.shared=true ve varsayılan prohibit-all-targets ile birlikte AGIC'nin bir yapılandırmayı uygulamasını engellediğinden, AGIC izinlerini genişletmeniz gerekir.
Özel kurulumunuzu içeren aşağıdaki kod parçacığıyla adlı
AzureIngressProhibitedTargetyeni 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 EOFArtık kendi özel yasaklamanızı oluşturduğunuza göre, çok geniş olan varsayılanı silebilirsiniz:
kubectl delete AzureIngressProhibitedTarget prohibit-all-targets
Mevcut AGIC yüklemesi için paylaşılan Application Gateway dağıtımını etkinleştirme
Çalışan bir AKS kümesine ve Application Gateway dağıtımına sahip olduğunuzu ve kümenizde AGIC'yi yapılandırdığınız varsayılır.
prod.contoso.com için bir girişe sahipsiniz ve kümeden gelen trafiği başarıyla yönetiyorsunuz.
Mevcut Application Gateway dağıtımınıza eklemek staging.contoso.com istiyorsunuz, ancak bunu bir sanal makinede barındırmanız gerekiyor. Mevcut Application Gateway dağıtımını yeniden kullanacak ve staging.contoso.com için dinleyici ve arka uç havuzlarını el ile yapılandıracaksınız. Ancak Application Gateway yapılandırmasında el ile yapılan ayarlamalar (Azure portalı, Resource Manager API'leri veya Terraform kullanılarak) AGIC'nin tam sahiplik varsayımlarıyla çakışıyor. Değişiklikleri uyguladıktan kısa bir süre sonra AGIC bu değişikliklerin üzerine yazar veya siler.
AGIC'in yapılandırmanın bir alt kümesinde değişiklik yapmasını yasaklayabilirsiniz:
Aşağıdaki kod parçacığını kullanarak adlı
AzureIngressProhibitedTargetyeni 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 EOFYeni oluşturulan nesneyi görüntüleyin:
kubectl get AzureIngressProhibitedTargetsAzure portalından Application Gateway yapılandırmasını değiştirin. Örneğin, dinleyiciler, yönlendirme kuralları ve backend'ler ekleyin. Oluşturduğunuz yeni nesne (
manually-configured-staging-environment),staging.contoso.comile ilgili Application Gateway yapılandırmasının AGIC tarafından üzerine yazılmasını yasaklar.