مشاركة عبر


تثبيت AGIC باستخدام نشر Application Gateway جديد

تفترض الإرشادات الواردة في هذه المقالة أنك تريد تثبيت وحدة تحكم دخول بوابة التطبيق (AGIC) في بيئة لا تحتوي على مكونات موجودة مسبقا.

تلميح

ضع في اعتبارك بوابة التطبيق للحاويات لحل دخول Kubernetes الخاص بك. لمزيد من المعلومات، راجع التشغيل السريع: نشر بوابة التطبيق لوحدة تحكم ALB للحاويات.

تثبيت أدوات سطر الأوامر المطلوبة

نوصي باستخدام Azure Cloud Shell لجميع عمليات سطر الأوامر في هذه المقالة. يمكنك فتح Cloud Shell عن طريق تحديد زر Launch Cloud Shell .

بدلا من ذلك، افتح Cloud Shell من مدخل Microsoft Azure عن طريق تحديد أيقونته.

أيقونة Azure PowerShell في المدخل

يحتوي مثيل Cloud Shell بالفعل على جميع الأدوات الضرورية. إذا اخترت استخدام بيئة أخرى، فتأكد من تثبيت أدوات سطر الأوامر التالية:

إنشاء هوية

استخدم الخطوات التالية لإنشاء كائن أساسي لخدمة Microsoft Entra.

  1. إنشاء كيان خدمة Active Directory، والذي يتضمن دور التحكم في الوصول المستند إلى دور Azure (RBAC):

    az ad sp create-for-rbac --role Contributor --scopes /subscriptions/mySubscriptionID -o json > auth.json
    appId=$(jq -r ".appId" auth.json)
    password=$(jq -r ".password" auth.json)
    

    appId سجل القيم و password من إخراج JSON. ستستخدمها في الخطوات التالية.

  2. appId استخدم القيمة من إخراج الأمر السابق للحصول على id كيان الخدمة الجديد:

    objectId=$(az ad sp show --id $appId --query "id" -o tsv)
    

    إخراج هذا الأمر هو objectId. سجل هذه القيمة، لأنك ستستخدمها في الخطوة التالية.

  3. إنشاء ملف المعلمة الذي ستستخدمه في نشر قالب Azure Resource Manager (قالب ARM):

    cat <<EOF > parameters.json
    {
      "aksServicePrincipalAppId": { "value": "$appId" },
      "aksServicePrincipalClientSecret": { "value": "$password" },
      "aksServicePrincipalObjectId": { "value": "$objectId" },
      "aksEnableRBAC": { "value": false }
    }
    EOF
    

    لنشر مجموعة ممكنة ل Kubernetes RBAC، قم بتعيين aksEnableRBAC إلى true.

توزيع المكونات

يضيف الإجراء التالي هذه المكونات إلى اشتراكك:

لنشر المكونات:

  1. قم بتنزيل قالب ARM:

    wget https://raw.githubusercontent.com/Azure/application-gateway-kubernetes-ingress/master/deploy/azuredeploy.json -O template.json
    
  2. انشر قالب ARM باستخدام Azure CLI، وقم بتعديله حسب الحاجة. قد يستغرق النشر ما يصل إلى 5 دقائق.

    resourceGroupName="MyResourceGroup"
    location="westus2"
    deploymentName="ingress-appgw"
    
    # create a resource group
    az group create -n $resourceGroupName -l $location
    
    # modify the template as needed
    az deployment group create \
            -g $resourceGroupName \
            -n $deploymentName \
            --template-file template.json \
            --parameters parameters.json
    
  3. بعد انتهاء النشر، قم بتنزيل إخراج التوزيع في ملف يسمى deployment-outputs.json:

    az deployment group show -g $resourceGroupName -n $deploymentName --query "properties.outputs" -o json > deployment-outputs.json
    

إعداد AGIC

باستخدام الإرشادات الموجودة في القسم السابق، قمت بإنشاء وتكوين مجموعة AKS جديدة ونشر Application Gateway. أنت الآن جاهز لنشر نموذج تطبيق ووحدة تحكم دخول إلى البنية الأساسية الجديدة ل Kubernetes.

إعداد بيانات اعتماد Kubernetes

للحصول على الخطوات التالية، تحتاج إلى إعداد الأمر kubectl ، والذي ستستخدمه للاتصال بمجموعة Kubernetes الجديدة. بالفعل. ستستخدم az (Azure CLI) للحصول على بيانات اعتماد ل Kubernetes.

احصل على بيانات اعتماد لمثيل AKS المنشور حديثا. لمزيد من المعلومات حول الأوامر التالية، راجع استخدام Azure RBAC لتخويل Kubernetes مع kubectl.

# use the deployment-outputs.json file created after deployment to get the cluster name and resource group name
aksClusterName=$(jq -r ".aksClusterName.value" deployment-outputs.json)
resourceGroupName=$(jq -r ".resourceGroupName.value" deployment-outputs.json)

az aks get-credentials --resource-group $resourceGroupName --name $aksClusterName

تثبيت معرف حمل عمل Microsoft Entra

يوفر معرف حمل عمل Microsoft Entra وصولا مستندا إلى الرمز المميز إلى Azure Resource Manager.

يضيف معرف حمل عمل Microsoft Entra المكونات التالية إلى مجموعة Kubernetes الخاصة بك:

لتثبيت معرف حمل عمل Microsoft Entra على نظام المجموعة الخاص بك، استخدم أحد الأوامر التالية:

  • نظام مجموعة AKS الذي يدعم Kubernetes RBAC:

    kubectl create -f https://raw.githubusercontent.com/Azure/aad-pod-identity/master/deploy/infra/deployment-rbac.yaml
    
  • نظام مجموعة AKS معطل ل Kubernetes RBAC:

    kubectl create -f https://raw.githubusercontent.com/Azure/aad-pod-identity/master/deploy/infra/deployment.yaml
    

إضـافة مستودع Helm

Helm هو مدير حزمة لـ Kubernetes. يمكنك استخدامه لتثبيت الحزمة application-gateway-kubernetes-ingress .

إذا كنت تستخدم Cloud Shell، فلن تحتاج إلى تثبيت Helm. يأتي Cloud Shell مع Helm الإصدار 3. قم بتشغيل أحد الأوامر التالية لإضافة مستودع AGIC Helm:

  • نظام مجموعة AKS الذي يدعم Kubernetes RBAC:

    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
    
  • نظام مجموعة AKS معطل ل Kubernetes RBAC:

    helm init
    

تثبيت مخطط Helm لوحدة تحكم الدخول

  1. deployment-outputs.json استخدم الملف الذي قمت بإنشائه سابقا لإنشاء المتغيرات التالية:

    applicationGatewayName=$(jq -r ".applicationGatewayName.value" deployment-outputs.json)
    resourceGroupName=$(jq -r ".resourceGroupName.value" deployment-outputs.json)
    subscriptionId=$(jq -r ".subscriptionId.value" deployment-outputs.json)
    identityClientId=$(jq -r ".identityClientId.value" deployment-outputs.json)
    identityResourceId=$(jq -r ".identityResourceId.value" deployment-outputs.json)
    
  2. قم بتنزيل helm-config.yaml، الذي يقوم بتكوين AGIC:

    wget https://raw.githubusercontent.com/Azure/application-gateway-kubernetes-ingress/master/docs/examples/sample-helm-config.yaml -O helm-config.yaml
    

    أو انسخ ملف YAML التالي:

    # 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 will manage
    #
    appgw:
        subscriptionId: <subscriptionId>
        resourceGroup: <resourceGroupName>
        name: <applicationGatewayName>
    
        # Setting appgw.shared to "true" will create 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 will 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: AAD-Pod-Identity (https://github.com/Azure/aad-pod-identity)
    armAuth:
        type: aadPodIdentity
        identityResourceID: <identityResourceId>
        identityClientID:  <identityClientId>
    
    ## Alternatively you can use Service Principal credentials
    # armAuth:
    #    type: servicePrincipal
    #    secretJSON: <<Generate this value with: "az ad sp create-for-rbac --subscription <subscription-uuid> --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>
    
  3. قم بتحرير الملف الذي تم تنزيله helm-config.yaml حديثا واملأ المقاطع الخاصة ب appgw و armAuth:

    sed -i "s|<subscriptionId>|${subscriptionId}|g" helm-config.yaml
    sed -i "s|<resourceGroupName>|${resourceGroupName}|g" helm-config.yaml
    sed -i "s|<applicationGatewayName>|${applicationGatewayName}|g" helm-config.yaml
    sed -i "s|<identityResourceId>|${identityResourceId}|g" helm-config.yaml
    sed -i "s|<identityClientId>|${identityClientId}|g" helm-config.yaml
    

    إشعار

    إذا كنت تقوم بالنشر إلى سحابة ذات سيادة (على سبيل المثال، Azure Government)، يجب إضافة معلمة appgw.environment التكوين وتعيينها إلى القيمة المناسبة.

    فيما يلي القيم :

    • verbosityLevel: تعيين مستوى الإسهاب للبنية الأساسية لتسجيل AGIC. للحصول على القيم المحتملة، راجع مستويات التسجيل.
    • appgw.environment: تعيين بيئة السحابة. القيم المحتملة: AZURECHINACLOUD، AZUREGERMANCLOUD، AZUREPUBLICCLOUD، . AZUREUSGOVERNMENTCLOUD
    • appgw.subscriptionId: معرف اشتراك Azure الذي توجد فيه بوابة التطبيق. مثال:aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e.
    • appgw.resourceGroup: اسم مجموعة موارد Azure التي قمت بإنشاء نشر بوابة التطبيق فيها. مثال:app-gw-resource-group.
    • appgw.name: اسم نشر بوابة التطبيق. مثال:applicationgatewayd0f0.
    • appgw.shared: علامة منطقية يتم تعيينها افتراضيا إلى false. قم بتعيينه إلى true إذا كنت بحاجة إلى نشر بوابة تطبيق مشتركة.
    • kubernetes.watchNamespace: يحدد مساحة الاسم التي يجب أن تشاهدها AGIC. يمكن أن تكون قيمة مساحة الاسم قيمة سلسلة واحدة أو قائمة مفصولة بفواصل من مساحات الأسماء.
    • armAuth.type: يمكن أن يكون aadPodIdentity أو servicePrincipal.
    • armAuth.identityResourceID: معرف المورد للهوية المدارة من Azure.
    • armAuth.identityClientID: معرف العميل للهوية.
    • armAuth.secretJSON: مطلوب فقط عند اختيار كيان خدمة كنوع سري (أي عند التعيين armAuth.type إلى servicePrincipal).

    إشعار

    لقد قمت بإنشاء identityResourceID القيم و identityClientID أثناء الخطوات السابقة لنشر المكونات. يمكنك الحصول عليها مرة أخرى باستخدام الأمر التالي:

    az identity show -g <resource-group> -n <identity-name>
    

    في الأمر ، <resource-group> هي مجموعة الموارد لتوزيع Application Gateway. <identity-name> العنصر النائب هو اسم الهوية التي تم إنشاؤها. يمكنك سرد جميع الهويات لاشتراك معين باستخدام az identity list.

  4. تثبيت حزمة AGIC:

    helm install agic-controller oci://mcr.microsoft.com/azure-application-gateway/charts/ingress-azure --version 1.8.1 -f helm-config.yaml
    

تثبيت نموذج التطبيق

الآن بعد أن تم تثبيت Application Gateway وAKS وAGIC، يمكنك تثبيت نموذج تطبيق عبر Azure Cloud Shell:

cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Pod
metadata:
  name: aspnetapp
  labels:
    app: aspnetapp
spec:
  containers:
  - image: "mcr.microsoft.com/dotnet/samples:aspnetapp"
    name: aspnetapp-image
    ports:
    - containerPort: 8080
      protocol: TCP

---

apiVersion: v1
kind: Service
metadata:
  name: aspnetapp
spec:
  selector:
    app: aspnetapp
  ports:
  - protocol: TCP
    port: 80
    targetPort: 8080

---

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: aspnetapp
  annotations:
    kubernetes.io/ingress.class: azure/application-gateway
spec:
  rules:
  - http:
      paths:
      - path: /
        pathType: Exact
        backend:
          service:
            name: aspnetapp
            port:
              number: 80
        pathType: Exact
EOF

بدلا من ذلك، يمكنك:

  • قم بتنزيل ملف YAML السابق:

    curl https://raw.githubusercontent.com/Azure/application-gateway-kubernetes-ingress/master/docs/examples/aspnetapp.yaml -o aspnetapp.yaml
    
  • تطبيق ملف YAML:

    kubectl apply -f aspnetapp.yaml
    
  • لمزيد من الأمثلة حول كيفية عرض خدمة AKS على الإنترنت عبر HTTP أو HTTPS باستخدام بوابة التطبيق، راجع دليل الكيفية هذا.
  • للحصول على معلومات حول بوابة التطبيق للحاويات، راجع مقالة النظرة العامة هذه.