التشغيل السريع: نشر بوابة التطبيق لوحدة تحكم ALB للحاويات

وحدة تحكم ALB مسؤولة عن ترجمة واجهة برمجة تطبيقات البوابة وتكوين واجهة برمجة تطبيقات الدخول داخل Kubernetes لتحميل قواعد موازنة داخل بوابة التطبيق للحاويات. يستعرض الدليل التالي الخطوات اللازمة لتوفير وحدة تحكم ALB في مجموعة AKS جديدة أو موجودة.

المتطلبات الأساسية

تحتاج إلى إكمال المهام التالية قبل نشر بوابة التطبيق للحاويات على Azure وتثبيت وحدة تحكم ALB على نظام المجموعة:

  1. قم بإعداد اشتراك Azure والعميل الخاص بك az-cli .

    # 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. تعيين نظام مجموعة AKS لحمل العمل الخاص بك.

    إشعار

    يجب أن تكون مجموعة AKS في منطقة حيث يجب أن تستخدم بوابة التطبيق للحاويات نظام مجموعة AKS Azure CNI. يجب تمكين ميزة هوية حمل العمل في نظام مجموعة AKS. تعرف على كيفية تمكين هوية حمل العمل على مجموعة AKS موجودة.

    إذا كنت تستخدم مجموعة موجودة، فتأكد من تمكين دعم هوية حمل العمل على نظام مجموعة AKS. يمكن تمكين هويات حمل العمل عبر ما يلي:

     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
    

    إذا لم يكن لديك نظام مجموعة موجود، فاستخدم الأوامر التالية لإنشاء مجموعة AKS جديدة مع تمكين هوية حمل العمل وAzure CNI.

    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

    Helm هي أداة تغليف مفتوحة المصدر تستخدم لتثبيت وحدة تحكم ALB.

    إشعار

    Helm متاح بالفعل في Azure Cloud Shell. إذا كنت تستخدم Azure Cloud Shell، فلا يلزم تثبيت Helm إضافي.

    يمكنك أيضا استخدام الخطوات التالية لتثبيت Helm على جهاز محلي يعمل بنظام التشغيل Windows أو Linux. تأكد من تثبيت أحدث إصدار من helm.

    راجع إرشادات التثبيت للحصول على خيارات مختلفة للتثبيت. وبالمثل، إذا كان إصدار Windows الخاص بك يحتوي على مدير حزم Windows winget مثبتا، يمكنك تنفيذ الأمر التالي:

    winget install helm.helm
    

تثبيت وحدة تحكم ALB

  1. إنشاء هوية مدارة من قبل المستخدم لوحدة تحكم ALB وات توحيد الهوية كهوية حمل العمل لاستخدامها في نظام مجموعة AKS.

    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 بيانات اعتماد موحدة باسم azure-alb-identity. أي اسم بيانات اعتماد متحد آخر غير مدعوم.

    إشعار

    قد يؤدي تعيين الهوية المدارة مباشرة بعد الإنشاء إلى حدوث خطأ في أن principalId غير موجود. السماح بحوالي دقيقة من الوقت لنسخ الهوية نسخا متماثلا في معرف Microsoft Entra قبل تفويض الهوية.

  2. تثبيت وحدة تحكم ALB باستخدام Helm

    بالنسبة إلى عمليات النشر الجديدة

    لتثبيت وحدة تحكم ALB، استخدم helm install الأمر .

    helm install عند تشغيل الأمر، فإنه ينشر مخطط helm إلى مساحة الاسم الافتراضية. عند نشر وحدة تحكم alb، يتم توزيعها إلى مساحة اسم azure-alb-system . قد يتم تجاوز كل من مساحات الأسماء هذه بشكل مستقل حسب الرغبة. لتجاوز مساحة الاسم التي يتم نشر مخطط helm إليها، يمكنك تحديد المعلمة --namespace (أو -n). لتجاوز مساحة اسم azure-alb-system المستخدمة بواسطة وحدة تحكم alb، يمكنك تعيين خاصية albController.namespace أثناء التثبيت (--set albController.namespace). إذا لم --namespace يتم تعريف المعلمات أو --set albController.namespace ، يتم استخدام مساحة الاسم الافتراضية لمخطط helm ويتم استخدام مساحة اسم نظام azure-alb لمكونات وحدة تحكم ALB. وأخيرا، إذا لم يتم تعريف مساحة الاسم لمورد مخطط helm بعد، فتأكد من تحديد المعلمة --create-namespace أيضا مع --namespace المعلمات أو -n .

    يمكن تثبيت وحدة تحكم ALB عن طريق تشغيل الأوامر التالية:

    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.2 \
         --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 عن طريق تشغيل الأوامر التالية:

    إشعار

    أثناء الترقية --namespace ، يرجى التأكد من تحديد المعلمات أو --set albController.namespace إذا تم تجاوز مساحات الأسماء في التثبيت المثبت مسبقا. لتحديد مساحات الأسماء السابقة المستخدمة، يمكنك تشغيل helm list الأمر لمساحة اسم helm ووحدة kubectl get pod -A -l app=alb-controller تحكم ALB.

    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.2 \
        --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

  1. تحقق من أن وحدات تحكم ALB جاهزة:

    kubectl get pods -n azure-alb-system
    

    يجب أن ترى ما يلي:

    الاسم مستعد الحالة اعاده تشغيل العمر
    alb-controller-bootstrap-6648c5d5c-hrmpc 1/1 قيد التشغيل 0 4d6h
    alb-controller-6648c5d5c-sdd9t 1/1 قيد التشغيل 0 4d6h
    alb-controller-6648c5d5c-au234 1/1 قيد التشغيل 0 4d6h
  2. تحقق من تثبيت GatewayClass azure-application-lb على نظام المجموعة:

    kubectl get gatewayclass azure-alb-external -o yaml
    

    يجب أن ترى أن GatewayClass لديه شرط يقرأ Valid GatewayClass. يشير هذا إلى أنه تم إعداد GatewayClass افتراضي وأن أي موارد بوابة تشير إلى GatewayClass هذه تتم إدارتها بواسطة وحدة تحكم ALB تلقائيا.

    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
    

الخطوات التالية

الآن بعد أن قمت بتثبيت وحدة تحكم ALB بنجاح على نظام المجموعة الخاص بك، يمكنك توفير موارد بوابة التطبيق للحاويات في Azure.

الخطوة التالية هي ربط وحدة تحكم ALB الخاصة بك ببوابة التطبيق للحاويات. تعتمد كيفية إنشاء هذا الارتباط على استراتيجية التوزيع الخاصة بك.

هناك إستراتيجيتان للتوزيع لإدارة بوابة التطبيق للحاويات:

  • نشر (BYO) الخاص بك: في استراتيجية النشر هذه، يتم افتراض التوزيع ودورة حياة مورد Application Gateway for Containers ومورد Association ومورد Frontend عبر مدخل Microsoft Azure وCLI وPowerShell وTerraform وما إلى ذلك، والمشار إليها في التكوين داخل Kubernetes.
  • تتم إدارتها بواسطة وحدة تحكم ALB: في استراتيجية التوزيع هذه، تكون وحدة تحكم ALB المنشورة في Kubernetes مسؤولة عن دورة حياة مورد Application Gateway for Containers وموارده الفرعية. تنشئ وحدة تحكم ALB مورد بوابة تطبيق للحاويات عند تعريف مورد مخصص ApplicationLoadBalancer على نظام المجموعة. تستند دورة حياة الخدمة إلى دورة حياة المورد المخصص.

إلغاء تثبيت بوابة التطبيق للحاويات ووحدة تحكم ALB

إذا كنت ترغب في إلغاء تثبيت وحدة تحكم ALB، فأكمل الخطوات التالية.

  1. حذف بوابة التطبيق للحاويات، يمكنك حذف مجموعة الموارد التي تحتوي على بوابة التطبيق لموارد الحاويات:
az group delete --resource-group $RESOURCE_GROUP
  1. قم بإلغاء تثبيت وحدة تحكم ALB ومواردها من نظام المجموعة الخاص بك بتشغيل الأوامر التالية:
helm uninstall alb-controller
kubectl delete ns azure-alb-system
kubectl delete gatewayclass azure-alb-external

إشعار

إذا تم استخدام مساحة اسم مختلفة لتثبيت alb-controller، فتأكد من تحديد المعلمة -n على الأمر helm uninstall لتعريف مساحة الاسم المناسبة التي سيتم استخدامها. على سبيل المثال: helm uninstall alb-controller -n unique-namespace