Hızlı Başlangıç: Kapsayıcılar için Application Gateway ALB Denetleyicisi dağıtma

ALB Denetleyicisi, Kubernetes içindeki Ağ Geçidi API'sini ve Giriş API'sini yapılandırmayı Kapsayıcılar için Application Gateway'de yük dengeleme kurallarına çevirmekle sorumludur. Aşağıdaki kılavuzda, yeni veya mevcut aks kümesine ALB Denetleyicisi sağlamak için gereken adımlar açıklanmaktadır.

Önkoşullar

Azure'da Kapsayıcılar için Application Gateway'i dağıtmadan ve kümenize ALB Denetleyicisi yüklemeden önce aşağıdaki görevleri tamamlamanız gerekir:

  1. Azure aboneliğinizi ve istemcinizi az-cli hazırlayın.

    # Sign in to your Azure subscription.
    SUBSCRIPTION_ID='<your subscription id>'
    az login
    az account set --subscription $SUBSCRIPTION_ID
    
    # Register required resource providers on Azure.
    az provider register --namespace Microsoft.ContainerService
    az provider register --namespace Microsoft.Network
    az provider register --namespace Microsoft.NetworkFunction
    az provider register --namespace Microsoft.ServiceNetworking
    
    # Install Azure CLI extensions.
    az extension add --name alb
    
  2. İş yükünüz için bir AKS kümesi ayarlayın.

    Not

    AKS kümesinin Kapsayıcılar için Application Gateway'in kullanılabilir olduğu bir bölgede olması gerekir AKS kümesi Azure CNI kullanmalıdır. AKS kümesinde iş yükü kimliği özelliği etkinleştirilmelidir. Mevcut aks kümesinde iş yükü kimliğini etkinleştirmeyi öğrenin.

    Mevcut bir küme kullanıyorsanız AKS kümenizde İş Yükü Kimliği desteğini etkinleştirdiğinizden emin olun. İş yükü kimlikleri aşağıdakiler aracılığıyla etkinleştirilebilir:

     AKS_NAME='<your cluster name>'
    RESOURCE_GROUP='<your resource group name>'
    az aks update -g $RESOURCE_GROUP -n $AKS_NAME --enable-oidc-issuer --enable-workload-identity --no-wait
    

    Mevcut bir kümeniz yoksa, Azure CNI ve iş yükü kimliği etkinleştirilmiş yeni bir AKS kümesi oluşturmak için aşağıdaki komutları kullanın.

    AKS_NAME='<your cluster name>'
    RESOURCE_GROUP='<your resource group name>'
    LOCATION='northeurope'
    VM_SIZE='<the size of the vm in AKS>' # The size needs to be available in your location
    
    az group create --name $RESOURCE_GROUP --location $LOCATION
    az aks create \
        --resource-group $RESOURCE_GROUP \
        --name $AKS_NAME \
        --location $LOCATION \
        --node-vm-size $VM_SIZE \
        --network-plugin azure \
        --enable-oidc-issuer \
        --enable-workload-identity \
        --generate-ssh-key
    
  3. Helm'i yükleme

    Helm , ALB denetleyicisini yüklemek için kullanılan bir açık kaynak paketleme aracıdır.

    Not

    Helm, Azure Cloud Shell'de zaten kullanılabilir. Azure Cloud Shell kullanıyorsanız ek Helm yüklemesi gerekmez.

    Helm'i Windows veya Linux çalıştıran yerel bir cihaza yüklemek için aşağıdaki adımları da kullanabilirsiniz. Helm'in en son sürümünün yüklü olduğundan emin olun.

    Çeşitli yükleme seçenekleri için yükleme yönergelerine bakın. Benzer şekilde, Windows sürümünüzde Windows Paket Yöneticisi winget yüklüyse aşağıdaki komutu yürütebilirsiniz:

    winget install helm.helm
    

ALB Denetleyicisi'ni yükleme

  1. ALB denetleyicisi için kullanıcı tarafından yönetilen bir kimlik oluşturun ve kimliği AKS kümesinde kullanılacak İş Yükü Kimliği olarak bir araya getirin.

    RESOURCE_GROUP='<your resource group name>'
    AKS_NAME='<your aks cluster name>'
    IDENTITY_RESOURCE_NAME='azure-alb-identity'
    
    mcResourceGroup=$(az aks show --resource-group $RESOURCE_GROUP --name $AKS_NAME --query "nodeResourceGroup" -o tsv)
    mcResourceGroupId=$(az group show --name $mcResourceGroup --query id -otsv)
    
    echo "Creating identity $IDENTITY_RESOURCE_NAME in resource group $RESOURCE_GROUP"
    az identity create --resource-group $RESOURCE_GROUP --name $IDENTITY_RESOURCE_NAME
    principalId="$(az identity show -g $RESOURCE_GROUP -n $IDENTITY_RESOURCE_NAME --query principalId -otsv)"
    
    echo "Waiting 60 seconds to allow for replication of the identity..."
    sleep 60
    
    echo "Apply Reader role to the AKS managed cluster resource group for the newly provisioned identity"
    az role assignment create --assignee-object-id $principalId --assignee-principal-type ServicePrincipal --scope $mcResourceGroupId --role "acdd72a7-3385-48ef-bd42-f606fba81ae7" # Reader role
    
    echo "Set up federation with AKS OIDC issuer"
    AKS_OIDC_ISSUER="$(az aks show -n "$AKS_NAME" -g "$RESOURCE_GROUP" --query "oidcIssuerProfile.issuerUrl" -o tsv)"
    az identity federated-credential create --name "azure-alb-identity" \
        --identity-name "$IDENTITY_RESOURCE_NAME" \
        --resource-group $RESOURCE_GROUP \
        --issuer "$AKS_OIDC_ISSUER" \
        --subject "system:serviceaccount:azure-alb-system:alb-controller-sa"
    

    ALB Denetleyicisi, azure-alb-identity adlı bir federasyon kimlik bilgisi gerektirir. Diğer federasyon kimlik bilgileri adı desteklenmiyor.

    Not

    Yönetilen kimliğin oluşturulduktan hemen sonra atanması principalId'nin mevcut olmadığı bir hataya neden olabilir. Kimliğin temsilci seçmeden önce Microsoft Entra Kimliği'nde çoğaltılması için yaklaşık bir dakika bekleyin.

  2. Helm kullanarak ALB Denetleyicisi'ni yükleme

    Yeni dağıtımlar için

    ALB Denetleyicisi'ni helm install yüklemek için komutunu kullanın.

    helm install Komut çalıştırıldığında helm grafiğini varsayılan ad alanına dağıtır. alb-controller dağıtıldığında azure-alb-system ad alanına dağıtılır. Bu ad alanlarının her ikisi de istenildiği gibi bağımsız olarak geçersiz kılınabilir. Helm grafiğinin dağıtılacağı ad alanını geçersiz kılmak için --namespace (veya -n) parametresini belirtebilirsiniz. alb-controller tarafından kullanılan azure-alb-system ad alanını geçersiz kılmak için, yükleme--set albController.namespace () sırasında albController.namespace özelliğini ayarlayabilirsiniz. --namespace veya --set albController.namespace parametreleri tanımlanmadıysa, helm grafiği için varsayılan ad alanı ve ALB denetleyicisi bileşenleri için azure-alb-system ad alanı kullanılır. Son olarak, helm grafiği kaynağının ad alanı henüz tanımlanmamışsa, veya parametreleriyle birlikte parametresinin --create-namespace de belirtildiğinden --namespace-n emin olun.

    ALB Denetleyicisi aşağıdaki komutlar çalıştırılarak yüklenebilir:

    az aks get-credentials --resource-group $RESOURCE_GROUP --name $AKS_NAME
    helm install alb-controller oci://mcr.microsoft.com/application-lb/charts/alb-controller \
         --namespace <helm-resource-namespace> \
         --version 1.0.0 \
         --set albController.namespace=<alb-controller-namespace> \
         --set albController.podIdentity.clientID=$(az identity show -g $RESOURCE_GROUP -n azure-alb-identity --query clientId -o tsv)
    

    Mevcut dağıtımlar için

    ALB, aşağıdaki komutlar çalıştırılarak yükseltilebilir:

    Not

    Yükseltme sırasında, daha önce yüklenen yüklemede --namespace ad alanları geçersiz kılındıysa veya --set albController.namespace parametrelerini belirttiğinizden emin olun. Kullanılan önceki ad alanlarını belirlemek için helm ad alanı ve kubectl get pod -A -l app=alb-controller ALB denetleyicisi için komutunu çalıştırabilirsinizhelm list.

    az aks get-credentials --resource-group $RESOURCE_GROUP --name $AKS_NAME
    helm upgrade alb-controller oci://mcr.microsoft.com/application-lb/charts/alb-controller \
        --namespace <helm-resource-namespace> \
        --version 1.0.0 \
        --set albController.namespace=<alb-controller-namespace> \
        --set albController.podIdentity.clientID=$(az identity show -g $RESOURCE_GROUP -n azure-alb-identity --query clientId -o tsv)
    

ALB Denetleyicisi yüklemesini doğrulama

  1. ALB Denetleyicisi podlarının hazır olduğunu doğrulayın:

    kubectl get pods -n azure-alb-system
    

    Şunları görmeniz gerekir:

    AD HAZIR DURUM YENİDEN BAŞLATMA SAYISI AGE (YAŞ)
    alb-controller-bootstrap-6648c5d5c-hrmpc 1/1 Çalışıyor 0 4d6h
    alb-controller-6648c5d5c-sdd9t 1/1 Çalışıyor 0 4d6h
    alb-controller-6648c5d5c-au234 1/1 Çalışıyor 0 4d6h
  2. GatewayClass'ın azure-application-lb kümenizde yüklü olduğunu doğrulayın:

    kubectl get gatewayclass azure-alb-external -o yaml
    

    GatewayClass'ın Geçerli GatewayClass değerini okuyan bir koşula sahip olduğunu görmeniz gerekir. Bu, varsayılan bir GatewayClass'ın ayarlandığını ve bu GatewayClass'a başvuran tüm ağ geçidi kaynaklarının otomatik olarak ALB Denetleyicisi tarafından yönetildiğini gösterir.

    apiVersion: gateway.networking.k8s.io/v1beta1
    kind: GatewayClass
    metadata:
      creationTimestamp: "2023-07-31T13:07:00Z"
      generation: 1
      name: azure-alb-external
      resourceVersion: "64270"
      uid: 6c1443af-63e6-4b79-952f-6c3af1f1c41e
    spec:
      controllerName: alb.networking.azure.io/alb-controller
    status:
      conditions:
        - lastTransitionTime: "2023-07-31T13:07:23Z"
        message: Valid GatewayClass
        observedGeneration: 1
        reason: Accepted
        status: "True"
        type: Accepted
    

Sonraki Adımlar

Kümenize başarıyla bir ALB Denetleyicisi yüklediğinize göre, Azure'da Kapsayıcılar için Application Gateway kaynaklarını sağlayabilirsiniz.

Sonraki adım, ALB denetleyicinizi Kapsayıcılar için Application Gateway'e bağlamaktır. Bu bağlantıyı nasıl oluşturacağınız dağıtım stratejinize bağlıdır.

Kapsayıcılar için Application Gateway yönetiminde iki dağıtım stratejisi vardır:

  • Kendi (BYO) dağıtımınızı getirin: Bu dağıtım stratejisinde Kapsayıcılar için Application Gateway kaynağı, İlişkilendirme ve Ön Uç kaynağının dağıtımı ve yaşam döngüsü Azure portalı, CLI, PowerShell, Terraform vb. aracılığıyla varsayılır ve Kubernetes'teki yapılandırmada başvurulur.
  • ALB denetleyicisi tarafından yönetilir: Bu dağıtım stratejisinde Kubernetes'te dağıtılan ALB Denetleyicisi, Kapsayıcılar için Application Gateway kaynağının ve alt kaynaklarının yaşam döngüsünden sorumludur. ALB Denetleyicisi, kümede bir ApplicationLoadBalancer özel kaynağı tanımlandığında Kapsayıcılar için Application Gateway kaynağı oluşturur. Hizmet yaşam döngüsü, özel kaynağın yaşam döngüsünü temel alır.

Kapsayıcılar ve ALB Denetleyicisi için Application Gateway'i kaldırma

ALB Denetleyicisi'ni kaldırmak istiyorsanız aşağıdaki adımları tamamlayın.

  1. Kapsayıcılar için Application Gateway'i silin; Kapsayıcılar için Application Gateway kaynaklarını içeren Kaynak Grubunu silebilirsiniz:
az group delete --resource-group $RESOURCE_GROUP
  1. ALB Denetleyicisi'ni ve kaynaklarını kümenizden kaldırın, aşağıdaki komutları çalıştırın:
helm uninstall alb-controller
kubectl delete ns azure-alb-system
kubectl delete gatewayclass azure-alb-external

Not

alb-controller yüklemesi için farklı bir ad alanı kullanıldıysa, kullanılacak uygun ad alanını tanımlamak için helm uninstall komutunda -n parametresini belirttiğinizden emin olun. Örnek: helm uninstall alb-controller -n unique-namespace