canIPull を Azure Kubernetes Service (AKS) クラスターにデプロイする

CanIPull は、Azure Kubernetes Service (AKS)の診断ツールです。 この記事のAzure Copilotまたは完全な Kubernetes マニフェストを使用してデプロイします。 CanIPull は、選択した 1 つのノードからクラスター ID 構成を読み取り、Azure Container Registry (ACR) 認証サーバーの DNS 解決を確認し、最初の ACR トークン交換を検証します。

この記事では、Azure Copilotまたは Kubernetes マニフェストを使用して CanIPull を実行する方法について説明します。 CanIPull v0.1.0 は、一度に 1 つの AMD64 Linux ノードで実行されます。 サポートされている他のノードでチェックを繰り返して、接続または構成を比較します。

Important

CanIPull は、エンドツーエンドのイメージ プル テストではありません。 CanIPull ではイメージが選択またはプルされないため、成功した結果ではリポジトリ、イメージ マニフェスト、またはイメージ レイヤーへのアクセスは確認されません。

前提条件

開始する前に、次のものが必要です。

  • 少なくとも 1 つの AMD64 Linux ノードを持つ既存の AKS クラスター。
  • テストする既存の ACR インスタンス。

Azure Copilotを使用して CanIPull をデプロイするには、Azure ポータルでAzure Copilotにアクセスする必要もあります。

CanIPull を手動でデプロイするには、次も必要です。

  • Azure CLIがインストールされています。
  • AKS クラスターのユーザー資格情報を取得し、ACR インスタンスを読み取るためのアクセス許可を持つ認証済みのAzure CLI セッション。
  • kubectl AKS クラスターに接続するように構成されています。
  • クラスター スコープでノードを一覧表示するための Kubernetes アクセス許可。 default 名前空間でポッドを作成、取得、一覧表示、監視、削除し、 default 名前空間のポッド ログを取得します。

Azure Copilotを使用して CanIPull をデプロイする

Azure Copilot AKS クラスター、AMD64 Linux ノード、および ACR 認証サーバーを選択し、CanIPull をデプロイできます。 診断では、選択したノードからの DNS 解決と ACR トークン交換が確認されます。 リポジトリやイメージは選択またはアクセスされません。

  1. Azure ポータルで、Copilotを開きます。
  2. 次のいずれかのプロンプトを入力します。
  • Help me deploy CanIPull to my AKS cluster.
  • Can an AMD64 Linux node in my AKS cluster resolve and authenticate to a specific Azure Container Registry?
  • Help me test ACR token exchange from an AMD64 Linux node in my AKS cluster.
  1. CanIPull を実行する AKS クラスターと AMD64 Linux ノードを選択します。
  2. DNS とトークン交換のチェックに使用する認証サーバーを持つ ACR インスタンスを選択します。
  3. 選択内容を確認し、デプロイを確認します。
  4. デプロイが完了したら、プロンプトに従って [実行] コマンド ウィンドウを開きます。
  5. CANIPull ログで、DNS、クラスター ID、および ACR トークン交換の結果を確認します。

このエクスペリエンスの詳細については、「CanIPull をAzure Copilotで使用する」を参照してください。

CanIPull を手動でデプロイする

CanIPull を手動でデプロイするには、クラスターに接続し、AMD64 Linux ノードを選択し、完全修飾 ACR ログイン サーバーを取得し、このセクションで提供されている完全なポッド マニフェストを canipull.yamlとして保存し、 kubectl apply --filename canipull.yaml実行します。 ワンショット ポッドを使用すると、ターゲット ノードを選択し、 kubectlを使用して診断ログを直接検査できます。

Important

マニフェストは、選択したノードから /etc/kubernetes/azure.json マウントされます。 このファイルには、機密性の高いクラスター ID 構成が含まれています。 信頼されたクラスター管理者である場合にのみ、ポッドをデプロイします。 レベルが高くなると、アクセス トークンが印刷されてしまう可能性があるため、CanIPull の詳細レベルを上げないでください。 テストが完了したらすぐにポッドを削除します。

クラスターに接続し、ノードを選択する

  1. AKS クラスターと ACR インスタンスの変数を設定します。

    RESOURCE_GROUP=<resource-group>
    CLUSTER_NAME=<aks-cluster-name>
    ACR_NAME=<acr-name>
    
  2. クラスターの資格情報を取得します。

    az aks get-credentials \
      --resource-group $RESOURCE_GROUP \
      --name $CLUSTER_NAME
    
  3. ACR ログイン サーバーを取得します。 CanIPull では、ACR リソース名ではなく、 myregistry.azurecr.ioなどの完全修飾ログイン サーバーが必要です。

    ACR_LOGIN_SERVER=$(az acr show \
      --name $ACR_NAME \
      --query loginServer \
      --output tsv)
    
    echo $ACR_LOGIN_SERVER
    
  4. AMD64 Linux ノードを一覧表示し、診断チェックを実行するノードを選択します。 CanIPull v0.1.0 は AMD64 ノードのみをサポートします。

    kubectl get nodes \
      --selector kubernetes.io/os=linux,kubernetes.io/arch=amd64 \
      --output wide
    

完全な CanIPull マニフェストを作成してデプロイする

  1. 完全なマニフェストを canipull.yaml という名前のファイルにコピーします。 <target-linux-node>と<acr-login-server>を、前のセクションのノード名と ACR ログイン サーバーに置き換えます。 マニフェストは、選択したノードに CanIPull をピン留めし、サービス アカウント トークンのマウントと特権エスカレーションを無効にし、必要なノード構成を読み取り専用としてマウントします。

    apiVersion: v1
    kind: Pod
    metadata:
      name: canipull
      namespace: default
      labels:
        app: canipull
    spec:
      automountServiceAccountToken: false
      nodeName: <target-linux-node>
      restartPolicy: Never
      containers:
        - name: canipull
          image: mcr.microsoft.com/aks/canipull:v0.1.0
          imagePullPolicy: IfNotPresent
          args:
            - <acr-login-server>
          securityContext:
            allowPrivilegeEscalation: false
            capabilities:
              drop:
                - ALL
            readOnlyRootFilesystem: true
          volumeMounts:
            - name: azure-config
              mountPath: /etc/kubernetes/azure.json
              readOnly: true
      volumes:
        - name: azure-config
          hostPath:
            path: /etc/kubernetes/azure.json
            type: File
    
  2. ポッドを作成します。

    kubectl apply --filename canipull.yaml
    
  3. ポッドの処理が完了するまで待機します。

    kubectl get pod canipull --watch
    

    ポッドの状態がCompletedまたはErrorに変わったら、Ctrl+C キーを押します。

CanIPull の結果を確認する

診断出力を表示します。

kubectl logs canipull

成功したテストには、次の結果が含まれます。

  • ACR 認証サーバーは DNS を介して解決されます。
  • CanIPull は、ノードからAzure構成を読み取ります。
  • クラスターの kubelet ID またはサービス プリンシパルは認証できます。
  • ACR は、最初のトークン交換を受け入れます。

これらの結果は、選択したノードが ACR 認証サーバーを解決できることと、クラスター ID が初期トークン交換を完了できることのみを確認します。 CanIPull は、イメージをプルしたり、リポジトリ、イメージ マニフェスト、またはイメージ レイヤーへのアクセスを検証したりしません。

ツールの最終的な成功メッセージでは、テストのスコープよりも広い文言が使用され、次の出力のようになります。

Your cluster can pull images from <acr-login-server>!

エンドツーエンドのイメージ プルを確認するには、ターゲット リポジトリ内のイメージを参照するワークロードをデプロイします。

テストが失敗した場合は、 FAILEDマークされたログ行を確認します。 一般的な原因には、次のようなものがあります。

  • ACR 認証サーバーは、選択されたノードからは解決されません。
  • 選択したノードに /etc/kubernetes/azure.jsonが含まれません。
  • クラスター ID の資格情報が無効です。
  • ACR は、kubelet ID またはサービス プリンシパルのトークン交換を拒否します。

ID が ACR にアクセスする権限がないためにトークン交換が失敗する場合は、「 AKS からの ACR による認証」を参照してください。

リソースをクリーンアップする

CanIPull ポッドを削除し、ノード構成へのアクセスを削除します。

kubectl delete pod canipull