AgIC'yi mevcut application gateway dağıtımlarını kullanarak yükleme
Application Gateway Giriş Denetleyicisi (AGIC), Azure Kubernetes Service (AKS) kümenizin içindeki bir poddur. AGIC, Kubernetes Giriş kaynaklarını izler. Kubernetes kümesinin durumuna göre bir Azure Uygulaması lication Gateway yapılandırması oluşturur ve uygular.
İpucu
Kubernetes giriş çözümünüz için Kapsayıcılar için Application Gateway'i göz önünde bulundurun. Daha fazla bilgi için bkz . Hızlı Başlangıç: 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 .
- aks kümeniz için yapılandırılmış Microsoft Entra İş Yükü Kimliği.
- (Azure CLI)
kubectl
vehelm
yüklü Azure shell ortamıaz
olarak Azure Cloud Shell. Bu araçlar, bu dağıtımı yapılandırmayı destekleyen komutlar için gereklidir.
Helm deposunu ekleme
Helm , Kubernetes için bir paket yöneticisidir. Paketi yüklemek application-gateway-kubernetes-ingress
için bunu 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 ayarlama
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 sorumlusu 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 gibi
MC_myResourceGroup_myAKSCluster_eastus
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
principalId
değerini belirleyin:$resourceGroup="resource-group-name" $identityName="identity-name" az identity list -g $resourceGroup --query "[?name == '$identityName'].principalId | [0]" -o tsv
Kimlik Katkıda Bulunanı'na Application Gateway dağıtımınıza erişim 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ı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 gibi
/subscriptions/A/resourceGroups/B
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'in kullandığı kimliğin Application Gateway'in dağıtıldığı alt ağa Microsoft.Network/virtualNetworks/subnets/join/action izninin atandığından emin olun. Bu izne sahip özel bir rol tanımlamadıysanız, yerleşik 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 -w0
Base64 kodlu JSON blobunu dosyaya
helm-config.yaml
ekleyin. Dosya AGIC'yihelm-config.yaml
yapılandırıyor.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ğıtma
$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.yaml
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>
ve değerlerini
appgw
düzenleyinhelm-config.yaml
vearmAuth
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.yaml
yapılandırmayla yükleyin:helm install agic-controller oci://mcr.microsoft.com/azure-application-gateway/charts/ingress-azure --version 1.7.5 -f helm-config.yaml
Alternatif olarak, ve Helm komutunu tek adımda birleştirebilirsiniz
helm-config.yaml
:helm install oci://mcr.microsoft.com/azure-application-gateway/charts/ingress-azure \ --name agic-controller \ --version 1.7.5 \ --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
Yeni oluşturulan podun günlüğünü denetleerek düzgün şekilde başlatıldığını doğrulayın.
Azure Uygulaması Lication Gateway dağıtımı kullanarak AKS hizmetini HTTP veya HTTPS üzerinden İnternet'te 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 kullanarak yeni bir AKS kümesinde barındırılan.prod.contoso.com
: Sanal makine ölçek kümesinde barındırılan.
Varsayılan ayarlarla AGIC, Application Gateway dağıtımının işaret edilen %100 sahipliğini varsayar. AGIC tüm App Gateway yapılandırmasının üzerine yazar. 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 hizmet vermek prod.contoso.com
için AGIC'i yalnızca yapılandırmayla dev.contoso.com
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.com
Application 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 application gateway dağıtımları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 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
yüklü olduğundan 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 \ agic-controller oci://mcr.microsoft.com/azure-application-gateway/charts/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
nesnesi AGIC'in prohibit-all-targets
herhangi bir konak ve yol için yapılandırmayı değiştirmesini engeller. AGIC ile appgw.shared=true
yüklenen Helm, 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şletmeniz gerekir:
Ö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
Artı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ımları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. için prod.contoso.com
girişe sahipsiniz ve kümeden gelen trafiği başarıyla gösteriyorsunuz.
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 için staging.contoso.com
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ı
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. Örneğin, dinleyiciler, yönlendirme kuralları ve arka uçlar ekleyin. Oluşturduğunuz 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.