共用方式為


使用新的 應用程式閘道 部署來安裝 AGIC

本文中的指示假設您想要在沒有預先存在元件的環境中安裝 應用程式閘道 輸入控制器 (AGIC)。

提示

請考慮針對 Kubernetes 輸入解決方案的容器 應用程式閘道。 如需詳細資訊,請參閱快速入門:部署容器 ALB 控制器的 應用程式閘道。

安裝必要的命令行工具

我們建議針對本文中的所有命令行作業使用 Azure Cloud Shell 。 您可以選取 [啟動 Cloud Shell] 按鈕來開啟 Cloud Shell

或者,從 Azure 入口網站 開啟 Cloud Shell,方法是選取其圖示。

入口網站中的 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記錄來自 JSON 輸出的 和 password 值。 您可以在後續步驟中使用它們。

  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 的叢集,請將 設定 aksEnableRBACtrue

部署元件

下列程式會將這些元件新增至您的訂用帳戶:

若要部署元件:

  1. 下載 ARM 樣本:

    wget https://raw.githubusercontent.com/Azure/application-gateway-kubernetes-ingress/master/deploy/azuredeploy.json -O template.json
    
  2. 使用 Azure CLI 部署 ARM 範本,並視需要加以修改。 部署最多可能需要 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 叢集和 應用程式閘道 部署。 您現在已準備好將範例應用程式和輸入控制器部署到新的 Kubernetes 基礎結構。

設定 Kubernetes 認證

針對下列步驟,您必須設定 kubectl 命令,您將用來連線到新的 Kubernetes 叢集。 Cloud Shell 已安裝 kubectl。 您將使用 az (Azure CLI) 來取得 Kubernetes 的認證。

取得新部署 AKS 實例的認證。 如需下列命令的詳細資訊,請參閱 搭配 kubectl 使用 Azure RBAC 進行 Kubernetes 授權。

# 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 Pod 身分識別

Microsoft Entra Pod 身分識別提供 Azure Resource Manager 的令牌型存取

Microsoft Entra Pod 身分識別會將下列元件新增至 Kubernetes 叢集:

若要將Microsoft Entra Pod 身分識別安裝到您的叢集,請使用下列其中一個命令:

  • 已啟用 Kubernetes RBAC 的 AKS 叢集:

    kubectl create -f https://raw.githubusercontent.com/Azure/aad-pod-identity/master/deploy/infra/deployment-rbac.yaml
    
  • Kubernetes RBAC 已停用的 AKS 叢集:

    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 存放庫:

  • 已啟用 Kubernetes RBAC 的 AKS 叢集:

    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
    
  • Kubernetes RBAC 已停用的 AKS 叢集:

    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檔案,並填寫 和 armAuth的區段appgw

    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、、、AZUREGERMANCLOUDAZUREPUBLICCLOUDAZUREUSGOVERNMENTCLOUD
    • 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:可以是 aadPodIdentityservicePrincipal
    • armAuth.identityResourceID:Azure 受控識別的資源標識符。
    • armAuth.identityClientID:身分識別的用戶端識別碼。
    • armAuth.secretJSON:只有在您選擇服務主體做為秘密類型時才需要 (也就是當您將 設定 armAuth.typeservicePrincipal時)。

    注意

    您在先前的步驟中建立 identityResourceIDidentityClientID 值,以部署 元件。 您可以使用下列命令再次取得它們:

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

    在 命令中,<resource-group>是 應用程式閘道 部署的資源群組。 佔 <identity-name> 位元是所建立身分識別的名稱。 您可以使用 列出特定訂 az identity list用帳戶的所有身分識別。

  4. 安裝 AGIC 套件:

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

安裝範例應用程式

現在您已安裝 應用程式閘道、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
    
  • 如需如何使用 應用程式閘道 透過 HTTP 或 HTTPS 向因特網公開 AKS 服務的詳細資訊,請參閱本操作指南
  • 如需容器 應用程式閘道 的相關信息,請參閱此概觀文章