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 bir Azure Kubernetes Service (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.

    Uyarı

    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 veya Azure CNI Katmanı kullanmalıdır. AKS kümesinde iş yükü kimliği özelliği etkinleştirilmelidir. Mevcut bir 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ğıdaki komutlar 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.

    Uyarı

    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'
    FEDERATED_IDENTITY_NAME='azure-alb-identity'
    CONTROLLER_NAMESPACE='azure-alb-system' # the namespace the controller will be provisioned to
    
    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 $FEDERATED_IDENTITY_NAME \
        --identity-name "$IDENTITY_RESOURCE_NAME" \
        --resource-group $RESOURCE_GROUP \
        --issuer "$AKS_OIDC_ISSUER" \
        --subject "system:serviceaccount:$CONTROLLER_NAMESPACE:alb-controller-sa"
    

    Uyarı

    Yönetilen kimliğin oluşturulduktan hemen sonra atanması, principalId'nin mevcut olmadığı bir hata mesajına 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ükleyin

    Yeni dağıtımlar için

    helm install komutunu kullanarak ALB Denetleyicisi'ni yükleyin.

    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 adlı 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 chart'ının 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 sırasında albController.namespace özelliğini ayarlayabilirsiniz --set albController.namespace. Ne --namespace ne de --set albController.namespace parametreleri tanımlanmamışsa, helm grafiği için varsayılan namespace ve ALB denetleyicisi bileşenleri için azure-alb-system namespace kullanılır. Son olarak, helm grafiği kaynağının ad alanı henüz tanımlanmamışsa, hem --create-namespace hem de --namespace veya -n parametrelerinin belirtildiğinden emin olun.

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

    HELM_NAMESPACE='<namespace for deployment>'
    CONTROLLER_NAMESPACE='azure-alb-system' # ensure this matches the namespace provided in your managed identity
    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_NAMESPACE \
         --version 1.11.4 \
         --set albController.namespace=$CONTROLLER_NAMESPACE \
         --set albController.podIdentity.clientID=$(az identity show -g $RESOURCE_GROUP -n $IDENTITY_RESOURCE_NAME --query clientId -o tsv)
    

    Mevcut dağıtımlar için

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

    Uyarı

    Yükseltme sırasında, önceki kurulumda --namespace ve --set albController.namespace parametrelerini belirttiğinizden emin olun, eğer ad alanları geçersiz kılındıysa. Önceki ad alanlarının kullanımını belirlemek için, helm ad alanı için helm list ve ALB denetleyicisi için kubectl get pod -A -l app=alb-controller komutunu çalıştırabilirsiniz.

    HELM_NAMESPACE='<your cluster name>'
    CONTROLLER_NAMESPACE='azure-alb-system'
    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_NAMESPACE \
        --version 1.11.4 \
        --set albController.namespace=$CONTROLLER_NAMESPACE \
        --set albController.podIdentity.clientID=$(az identity show -g $RESOURCE_GROUP -n $IDENTITY_RESOURCE_NAME --query clientId -o tsv)
    

ALB Denetleyicisi kurulumunu doğrula

  1. ALB Controller podlarının hazır olduğunu kontrol edin:

    kubectl get pods -n azure-alb-system
    

    Aşağıdaki çıkışı görmeniz gerekir:

    İSİM HAZIR STATUS YENİDEN BAŞLATMALAR AGE (YAŞ)
    alb-controller-6648c5d5c-sdd9t 1/1 Koşmak 0 4 gün 6 saat
    alb-controller-6648c5d5c-au234 1/1 Koşmak 0 4 gün 6 saat
  2. GatewayClass'ın azure-alb-external kümenizde yüklü olduğunu doğrulayın:

    kubectl get gatewayclass azure-alb-external -o yaml
    

    GatewayClass'ın Valid GatewayClass değerini okuyan bir koşula sahip olduğunu görmeniz gerekir. Bu koşul, 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 dağıtımınızı yapın (BYO): Bu dağıtım stratejisinde, Kapsayıcılar için Application Gateway kaynağının, İlişkilendirme kaynağının ve Ön uç kaynağının dağıtımı ve yaşam döngüsü Azure portalı, CLI, PowerShell, Terraform gibi araçlar kullanılarak gerçekleştirilir ve Kubernetes üzerindeki yapılandırmada referans alınır.
  • 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 bir 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
    
  2. 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
    

Uyarı

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. Örneğin: helm uninstall alb-controller -n unique-namespace