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 セッション。
-
kubectlAKS クラスターに接続するように構成されています。 - クラスター スコープでノードを一覧表示するための Kubernetes アクセス許可。
default名前空間でポッドを作成、取得、一覧表示、監視、削除し、default名前空間のポッド ログを取得します。
Azure Copilotを使用して CanIPull をデプロイする
Azure Copilot AKS クラスター、AMD64 Linux ノード、および ACR 認証サーバーを選択し、CanIPull をデプロイできます。 診断では、選択したノードからの DNS 解決と ACR トークン交換が確認されます。 リポジトリやイメージは選択またはアクセスされません。
- Azure ポータルで、Copilotを開きます。
- 次のいずれかのプロンプトを入力します。
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.
- CanIPull を実行する AKS クラスターと AMD64 Linux ノードを選択します。
- DNS とトークン交換のチェックに使用する認証サーバーを持つ ACR インスタンスを選択します。
- 選択内容を確認し、デプロイを確認します。
- デプロイが完了したら、プロンプトに従って [実行] コマンド ウィンドウを開きます。
- 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 の詳細レベルを上げないでください。 テストが完了したらすぐにポッドを削除します。
クラスターに接続し、ノードを選択する
AKS クラスターと ACR インスタンスの変数を設定します。
RESOURCE_GROUP=<resource-group> CLUSTER_NAME=<aks-cluster-name> ACR_NAME=<acr-name>クラスターの資格情報を取得します。
az aks get-credentials \ --resource-group $RESOURCE_GROUP \ --name $CLUSTER_NAMEACR ログイン サーバーを取得します。 CanIPull では、ACR リソース名ではなく、
myregistry.azurecr.ioなどの完全修飾ログイン サーバーが必要です。ACR_LOGIN_SERVER=$(az acr show \ --name $ACR_NAME \ --query loginServer \ --output tsv) echo $ACR_LOGIN_SERVERAMD64 Linux ノードを一覧表示し、診断チェックを実行するノードを選択します。 CanIPull
v0.1.0は AMD64 ノードのみをサポートします。kubectl get nodes \ --selector kubernetes.io/os=linux,kubernetes.io/arch=amd64 \ --output wide
完全な CanIPull マニフェストを作成してデプロイする
完全なマニフェストを
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ポッドを作成します。
kubectl apply --filename canipull.yamlポッドの処理が完了するまで待機します。
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