Azure Kubernetes Service (AKS) は、サービス コネクタでサポートされているコンピューティング サービスの 1 つです。
この記事では、次について説明します。
- AKS 用 Service Connector と他のコンピューティング サービスの違い。
- サービス接続の作成時にクラスターで実行された操作。
- サービス接続の作成時にターゲット サービスで実行された操作。
- Service Connector によって作成された Kubernetes リソースの使用。
- AKS クラスター内でのサービスコネクターログのトラブルシューティングと表示。
前提条件
- このガイドは、サービス コネクタの基本的な概念を既に理解していることを想定しています。
AKS 用 Service Connector とその他のコンピューティング サービスの違い
AKS 用 Service Connector は、 Service Connector でサポートされている他のコンピューティング サービス といくつかの方法で動作する方法とは異なります。 各 API 操作の AKS 固有のオプションと動作の概要を次に示します。
創造
AKS 固有の作成オプションを次に示します。 AKS で新しい接続を作成する方法については、 Azure portal または Azure CLI のクイックスタートを参照してください。
- Service Connector for AKS では、Kubernetes リソースを作成する場所を指定するために、
Kubernetes namespace
パラメーターが必要です。 既定では、default
名前空間が使用されます。 - Service Connector for AKS では、セキュリティで保護された資格情報認証オプションとして
Workload Identity
がサポートされていますが、他のコンピューティング サービスにはSystem Managed Identity
とUser Managed Identity
オプションが用意されています。 - シークレット ストア CSI ドライバーが有効になっているターゲット サービスとして Azure Key Vault を使用する場合、Service Connector は認証に AKS
azure-keyvault-secrets-provider
アドオンのユーザー割り当てマネージド ID を使用します。ユーザーは認証の種類を指定する必要はありません。 - Service Connector for AKS では
Firewall Rules
ネットワーク オプションのみがサポートされますが、他のコンピューティング サービスではPrivate Link
オプションとVirtual Network
オプションもサポートされる場合があります。
構成を一覧表示する
Service Connector for AKS では、資格情報以外の構成のみがリスト構成ビューに表示されます。 ユーザーは、必要に応じて 、関連付けられている Kubernetes リソース の資格情報を手動で確認する必要があります。
Azure CLI コマンド az aks connection list-configuration を使用すると、資格情報構成の値は空の文字列になります。 Azure portal では、次に示すように、資格情報構成の値は非表示になります。
検証
Service Connector for AKS では、ユーザーのクラスター内で行われた構成値の変更が資格情報であるか、資格情報以外の構成であるかは検証されません。 ただし、Service Connector は、他のコンピューティング サービスの場合と同様に、次の検証を実行します。
- ターゲット サービスの存在の確認
- ターゲット サービスへのアクセスに関する IP ファイアウォール規則の確認
- ワークロード ID がターゲット サービスにアクセスできるよう役割が割り当てられていることを確認する。
Azure CLI コマンド az aks connection validate の出力は常に success
。 以下に示すように、Azure portal にも同じことが当てはまります。
AKS クラスターに対してサービス コネクタによって実行される操作
AKS クラスターで Service Connector によって実行される操作は、サービス接続の作成時に選択されたターゲット サービスと認証の種類によって異なります。 サービス コネクタで行われる可能性がある操作の一覧を次に示します。
サービス コネクタの Kubernetes 拡張機能の追加
サービス接続が初めて作成されたときに、sc-extension
という名前の Kubernetes 拡張機能がクラスターに追加されます。 その後、サービス接続要求が Service Connector に送信されるたびに、拡張機能はユーザーのクラスターに Kubernetes リソースを作成するのに役立ちます。 拡張機能は、Azure portal のユーザーの AKS クラスターの [拡張機能とアプリケーション ] メニューにあります。
クラスター接続のメタデータも拡張機能に格納されます。 拡張機能をアンインストールすると、クラスター内のすべての接続が使用できなくなります。 拡張演算子は、クラスター名前空間 sc-system
でホストされます。
Kubernetes リソースの作成
Service Connector は、サービス接続の作成時にユーザーが指定する名前空間に Kubernetes リソースを作成します。 Kubernetes リソースには、ターゲット サービスと通信するためにユーザーのワークロード定義またはアプリケーション コードに必要な接続情報が格納されます。 認証の種類に応じて、異なる Kubernetes リソースが作成されます。 認証の種類が Connection String
と Service Principal
の場合は、Kubernetes シークレットが作成されます。 認証の種類が Workload Identity
の場合には、Kubernetes シークレットに加えて Kubernetes サービス アカウントも作成されます。
Azure portal での各サービス接続に対して Service Connector によって作成された Kubernetes リソースは、Kubernetes リソースの [Service Connector] メニューで確認できます。
サービス接続を削除しても、関連付けられている Kubernetes リソースは削除されません。 必要に応じて、 kubectl delete
コマンドなどを使用して、リソースを手動で削除します。
azureKeyvaultSecretsProvider
アドオンの有効化
ターゲット サービスが Azure Key Vault で、シークレット ストア CSI ドライバーが有効になっている場合、Service Connector はクラスターの azureKeyvaultSecretsProvider
アドオンを有効にします。
CSI ドライバーを使用して Azure Key Vault に接続するチュートリアルに従って、Secret Store CSI ドライバーを使用して Azure Key Vault への接続を設定します。
ワークロード ID と OpenID Connect (OIDC) 発行者の有効化
認証の種類が Workload Identity
場合、Service Connector はクラスターのワークロード ID と OIDC 発行者を有効にします。
認証の種類が Workload Identity
場合、フェデレーション ID 資格情報を作成するには、ユーザー割り当てマネージド ID が必要です。 ワークロード ID の詳細を確認するか、次のチュートリアルを参照して、ワークロード ID を使用して Azure Storage への接続を設定します。
ターゲット サービスに対して Service Connector によって実行される操作
AKS 用 Service Connector は、ターゲット サービスに対して他のコンピューティング サービスと同じ操作を実行します。 ただし、操作はターゲット サービスの種類と認証方法によって異なります。 考えられる操作の一覧を次に示します。
接続構成の取得
Service Connector は、ターゲット サービスから必要な接続構成を取得し、ユーザーのクラスターで Kubernetes シークレットとして設定します。 接続の構成は、ターゲット サービスの種類と認証方法によって異なります。
Connection String
認証の種類の場合、構成には通常、サービス シークレットまたは接続文字列が含まれます。Workload Identity
認証の種類の場合、通常はサービス エンドポイントが含まれます。Service Principal
認証の種類には、サービス プリンシパルのテナント ID、クライアント ID、クライアント シークレットが含まれます。
特定のターゲット サービスの詳細については、 Azure AI サービス ガイドなどの対応するドキュメントを参照してください。
IP ベースのファイアウォール規則を作成する
Service Connector は、AKS クラスターから送信パブリック IP を取得し、ターゲット サービスに IP ファイアウォール規則を作成して、クラスターからのネットワーク アクセスを許可します。
Microsoft Entra ID のロール割り当てを作成する
Workload Identity
認証の種類を使用すると、Service Connector によって ID のロールの割り当てが自動的に作成されます。 割り当てられたロールは、適切なアクセスを確保するために、ターゲット サービスによって異なります。
ユーザーは、必要に応じてロールの割り当てをカスタマイズすることもできます。 詳細については、「ロールの カスタマイズ」を参照してください。
Service Connector によって作成された Kubernetes リソースを使用する
Service Connector では、選択したターゲット サービスの種類と認証の種類に応じて、さまざまな Kubernetes リソースが作成されます。 以降のセクションでは、サービス コネクタによって作成された Kubernetes リソースをクラスター ワークロード定義とアプリケーション コードで使用する方法について説明します。
Kubernetes シークレット
認証の種類が Connection String
または Service Principal
のいずれかに設定されている場合は、Kubernetes シークレットが作成されます。 クラスター ワークロード定義は、シークレットを直接参照できます。 例を次のスニペットに示します。
apiVersion: batch/v1
kind: Job
metadata:
namespace: default
name: sc-sample-job
spec:
template:
spec:
containers:
- name: raw-linux
image: alpine
command: ['printenv']
envFrom:
- secretRef:
name: <SecretCreatedByServiceConnector>
restartPolicy: OnFailure
アプリケーション コードを使用すると、環境変数のシークレット内の接続文字列を使用できます。 次のサンプル コードを確認して、環境変数の名前と、これをアプリケーション コードに使用してさまざまなターゲット サービスに対して認証を行う方法について詳しく学習します。
Kubernetes サービス アカウント
認証の種類が Workload Identity
に設定されている場合は、Kubernetes サービス アカウントとシークレットが作成されます。 クラスター ワークロード定義は、サービス アカウントとシークレットを参照して、ワークロード ID を使用して認証できます。 例を次のスニペットに示します。
apiVersion: batch/v1
kind: Job
metadata:
namespace: default
name: sc-sample-job
labels:
azure.workload.identity/use: "true"
spec:
template:
spec:
serviceAccountName: <ServiceAccountCreatedByServiceConnector>
containers:
- name: raw-linux
image: alpine
command: ['printenv']
envFrom:
- secretRef:
name: <SecretCreatedByServiceConnector>
restartPolicy: OnFailure
次のチュートリアルを確認して、ワークロード ID を使用して Azure Storage に接続する方法を学習します。
トラブルシューティングとログの表示
サービス接続の作成時にエラーが発生し、再試行しても解決できない場合は、次の方法を使用してトラブルシューティングに関する詳しい情報を収集できます。
Service Connector の Kubernetes 拡張機能を確認する
サービス コネクタの Kubernetes 拡張機能は、Azure Arc 対応 Kubernetes クラスター拡張機能上に構築されています。 拡張機能のインストールまたは更新プロセス中に発生したエラーを確認するには、次のコマンドを使用します。
k8s-extension
Azure CLI 拡張機能をインストールします。az extension add --name k8s-extension
サービス コネクタ拡張機能の状態を取得します。 コマンド出力の
statuses
プロパティを確認して、エラーを特定します。az k8s-extension show \ --resource-group MyClusterResourceGroup \ --cluster-name MyCluster \ --cluster-type managedClusters \ --name sc-extension
Kubernetes クラスター ログを確認する
拡張機能のインストール中にエラーが発生し、 statuses
プロパティのエラー メッセージで十分な情報が提供されない場合は、次の手順で Kubernetes ログを確認してさらに調査できます。
AKS クラスターに接続します。
az aks get-credentials \ --resource-group MyClusterResourceGroup \ --name MyCluster
サービス コネクタ拡張情報は、Helm チャートを使用して、
sc-system
名前空間にインストールされます。 次のコマンドを使用して、名前空間と Helm リリースを確認します。名前空間が存在することを確認します。
kubectl get ns
Helm リリースの状態を確認します。
helm list -n sc-system
拡張機能のインストール中または更新中に、
sc-job
という Kubernetes ジョブによって、サービス接続用の Kubernetes リソースが作成されます。 通常、ジョブの実行が失敗すると、拡張機能が失敗します。 次のコマンドを実行して、ジョブの状態を確認します。sc-job
がsc-system
名前空間に存在していない場合は、正常に実行されています。 このジョブは、正常に実行された後に自動的に削除されるように設計されています。ジョブが存在することを確認します。
kubectl get job -n sc-system
ジョブの状態を取得します。
kubectl describe job/sc-job -n sc-system
ジョブ ログを表示します。
kubectl logs job/sc-job -n sc-system
一般的なエラーと軽減策
拡張機能の作成エラー
エラー メッセージ:
Unable to get a response from the agent in time
。Extension pods can't be scheduled if all the node pools in the cluster are "CriticalAddonsOnly" tainted
軽減策:
「拡張機能の作成エラー」を参照してください
Helm エラー
エラー メッセージ:
Unable to download the Helm chart from the repo URL
このエラーは、エグレス ブロックの問題に加えて、クラスターとファイアウォールの間で発生する接続の問題によって発生します。
この問題を解決するには、 Azure Kubernetes Service (AKS) クラスターの送信ネットワークと FQDN 規則を参照し、Service Connector Helm チャートをプルするために必要な FQDN を追加します。 scaksextension.azurecr.io
エラー メッセージ:
Timed out waiting for resource readiness
Helm chart rendering failed with given values
Resource already exists in your cluster
Operation is already in progress for Helm
軽減策:
「Helm エラー」を参照してください
競合
エラー メッセージ:
Operation returned an invalid status code: Conflict
。
理由:
このエラーは通常、Azure Kubernetes Service (AKS) クラスターが更新中の状態のときにサービス接続を作成しようとすると発生します。 サービス接続の更新が、進行中の更新と競合しています。 このエラーは、サブスクリプションが Microsoft.KubernetesConfiguration
リソース プロバイダーに登録されていない場合にも発生します。
軽減策:
クラスターが "成功" 状態であることを確認して、作成を再試行してください。
サブスクリプションが
Microsoft.KubernetesConfiguration
リソース プロバイダーに登録されていることを確認するには、次のコマンドを実行します。az provider register -n Microsoft.KubernetesConfiguration
未承認のリソース アクセス
エラー メッセージ:
You do not have permission to perform ... If access was recently granted, please refresh your credentials
。
理由:
ユーザーの代わりに接続操作を実行するために、サービス コネクタに、接続先の Azure リソースを操作するためのアクセス許可が必要です。 このエラーは、一部の Azure リソースに対する必要なアクセス許可がないことを示しています。
軽減策:
このエラー メッセージ内で指定されている Azure リソースに対するアクセス許可を確認します。 必要なアクセス許可を取得して、作成を再試行してください。
サブスクリプション未登録
エラー メッセージ:
The subscription is not registered to use namespace 'Microsoft.KubernetesConfiguration'
理由:
サービス コネクタは、Azure Arc 対応 Kubernetes クラスター拡張機能用のリソース プロバイダーである Microsoft.KubernetesConfiguration
にサブスクリプションを登録する必要があります。
軽減策:
次のコマンドを実行して、Microsoft.KubernetesConfiguration
リソース プロバイダーを登録します。 リソース プロバイダーの登録エラーに関する詳細については、「リソース プロバイダーの登録エラーの解決」を参照してください。
az provider register -n Microsoft.KubernetesConfiguration
次のステップ
さまざまなターゲット サービスを統合する方法を学習し、その構成設定と認証方法についてお読みください。