次の方法で共有


新しい Application Gateway デプロイを使用して AGIC をインストールする

この記事の手順では、既存のコンポーネントがない環境に Application Gateway イングレス コントローラー (AGIC) をインストールすることを前提としています。

ヒント

Kubernetes イングレス ソリューションには Application Gateway for Containers を検討してください。 詳細については、「クイックスタート: Application Gateway for Containers ALB コントローラーをデプロイする」を参照してください。

必要なコマンドライン ツールをインストールする

この記事のすべてのコマンドライン操作には、Azure Cloud Shell を使用することをお勧めします。 [Cloud Shell の起動] ボタンを選択すると、Cloud Shell を開くことができます。

または、Azure portal からアイコンを選択して Cloud Shell を開きます。

ポータルの Azure PowerShell アイコン

Cloud Shell インスタンスには、すべての必要なツールが既に備わっています。 別の環境を使用する場合は、次のコマンドライン ツールがインストールされていることを確認してください。

ID の作成

以下の手順に従って、Microsoft Entra サービス プリンシパル オブジェクトを作成します。

  1. Azure ロールベースのアクセス制御 (RBAC) ロールを含む Active Directory サービス プリンシパルを作成します。

    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)
    

    JSON 出力からの appIdpassword の値を記録します。 次の手順で使用します。

  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 クラスターと Application Gateway デプロイを作成して構成しました。 これで、新しい Kubernetes インフラストラクチャにサンプル アプリとイングレス コントローラーをデプロイする準備ができました。

Kubernetes 資格情報を設定する

以下の手順では、新しい Kubernetes クラスターに接続するために使用する kubectl コマンドを設定する必要があります。 Cloud Shell には kubectl が既にインストールされています。 az (Azure CLI) を使用して Kubernetes の資格情報を取得します。

新しくデプロイされた AKS インスタンスの資格情報を取得します。 次のコマンドの詳細については、「kubectl で Kubernetes 認可に Azure RBAC を使用する」を参照してください。

# 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 ポッド ID をインストールする

Microsoft Entra ポッド ID は、Azure Resource Manager へのトークンベースのアクセスを提供します。

Microsoft Entra ポッド ID によって、次のコンポーネントが Kubernetes クラスターに追加されます。

Microsoft Entra ポッド ID をクラスターにインストールするには、次のコマンドのいずれかを使用します。

  • 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 chart をインストールする

  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. AGIC を構成する helm-config.yaml をダウンロードします。

    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 ファイルを編集し、appgwarmAuth のセクションに記入します。

    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
    

    Note

    ソブリン クラウド (Azure Government など) にデプロイする場合は、appgw.environment 構成パラメーターを追加し、適切な値に設定する必要があります。

    の値を次に示します。

    • verbosityLevel: AGIC ログ インフラストラクチャの詳細レベルを設定します。 指定できる値については、「ログ レベル」を参照してください。
    • appgw.environment: クラウド環境を設定します。 指定できる値: AZURECHINACLOUDAZUREGERMANCLOUDAZUREPUBLICCLOUDAZUREUSGOVERNMENTCLOUD
    • appgw.subscriptionId: Application Gateway が存在する Azure サブスクリプション ID。 例: aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e
    • appgw.resourceGroup: Application Gateway デプロイを作成した Azure リソース グループの名前。 例: app-gw-resource-group
    • appgw.name: Application Gateway デプロイの名前。 例: applicationgatewayd0f0
    • appgw.shared: false を既定値とするブール値フラグ。 共有 Application Gateway デプロイが必要な場合は、true に設定します。
    • kubernetes.watchNamespace: AGIC で監視する必要がある名前空間を指定します。 名前空間の値には、単一の文字列値、または名前空間のコンマ区切り一覧を指定できます。
    • armAuth.type: aadPodIdentity または servicePrincipal にできます。
    • armAuth.identityResourceID: Azure マネージド ID のリソース ID。
    • armAuth.identityClientID: ID のクライアント ID。
    • armAuth.secretJSON: シークレットの種類としてサービス プリンシパルを選択した場合 (つまり、armAuth.typeservicePrincipal に設定した場合) にのみ必要です。

    Note

    identityResourceIDidentityClientID の値は、コンポーネントをデプロイするための以前の手順で作成しました。 それらは、次のコマンドを使用して再度取得できます。

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

    コマンドの <resource-group> は、Application Gateway デプロイのリソース グループです。 <identity-name> プレースホルダーは、作成された ID の名前です。 az identity list を使用すると、特定のサブスクリプションのすべての ID を一覧表示できます。

  4. AGIC パッケージをインストールします。

    helm install agic-controller oci://mcr.microsoft.com/azure-application-gateway/charts/ingress-azure --version 1.7.5 -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
    
  • Application Gateway を使用して、HTTP または HTTPS 経由で AKS サービスをインターネットに公開する方法のその他の例については、この攻略ガイドを参照してください。
  • Application Gateway for Containers の詳細については、この概要記事を参照してください。