次の方法で共有


Azure Kubernetes Service (AKS) でサービス コネクタを使用する

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 IdentityUser 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 では、次に示すように、資格情報構成の値は非表示になります。

AKS 接続リストの構成のスクリーンショット。

検証

Service Connector for AKS では、ユーザーのクラスター内で行われた構成値の変更が資格情報であるか、資格情報以外の構成であるかは検証されません。 ただし、Service Connector は、他のコンピューティング サービスの場合と同様に、次の検証を実行します。

  • ターゲット サービスの存在の確認
  • ターゲット サービスへのアクセスに関する IP ファイアウォール規則の確認
  • ワークロード ID がターゲット サービスにアクセスできるよう役割が割り当てられていることを確認する。

Azure CLI コマンド az aks connection validate の出力は常に success。 以下に示すように、Azure portal にも同じことが当てはまります。

AKS 接続の検証のスクリーンショット。

AKS クラスターに対してサービス コネクタによって実行される操作

AKS クラスターで Service Connector によって実行される操作は、サービス接続の作成時に選択されたターゲット サービスと認証の種類によって異なります。 サービス コネクタで行われる可能性がある操作の一覧を次に示します。

サービス コネクタの Kubernetes 拡張機能の追加

サービス接続が初めて作成されたときに、sc-extension という名前の Kubernetes 拡張機能がクラスターに追加されます。 その後、サービス接続要求が Service Connector に送信されるたびに、拡張機能はユーザーのクラスターに Kubernetes リソースを作成するのに役立ちます。 拡張機能は、Azure portal のユーザーの AKS クラスターの [拡張機能とアプリケーション ] メニューにあります。

Azure portal のスクリーンショット。AKS 拡張機能を表示しています。

クラスター接続のメタデータも拡張機能に格納されます。 拡張機能をアンインストールすると、クラスター内のすべての接続が使用できなくなります。 拡張演算子は、クラスター名前空間 sc-system でホストされます。

Kubernetes リソースの作成

Service Connector は、サービス接続の作成時にユーザーが指定する名前空間に Kubernetes リソースを作成します。 Kubernetes リソースには、ターゲット サービスと通信するためにユーザーのワークロード定義またはアプリケーション コードに必要な接続情報が格納されます。 認証の種類に応じて、異なる Kubernetes リソースが作成されます。 認証の種類が Connection StringService Principal の場合は、Kubernetes シークレットが作成されます。 認証の種類が Workload Identity の場合には、Kubernetes シークレットに加えて Kubernetes サービス アカウントも作成されます。

Azure portal での各サービス接続に対して Service Connector によって作成された Kubernetes リソースは、Kubernetes リソースの [Service Connector] メニューで確認できます。

Azure portal のスクリーンショット。サービス コネクタによって作成された Kubernetes リソースを表示しています。

サービス接続を削除しても、関連付けられている Kubernetes リソースは削除されません。 必要に応じて、 kubectl delete コマンドなどを使用して、リソースを手動で削除します。

azureKeyvaultSecretsProvider アドオンの有効化

ターゲット サービスが Azure Key Vault で、シークレット ストア CSI ドライバーが有効になっている場合、Service Connector はクラスターの azureKeyvaultSecretsProvider アドオンを有効にします。

Azure portal のスクリーンショット。接続の作成時に Key Vault に対して CSI ドライバーを有効にしています。

CSI ドライバーを使用して Azure Key Vault に接続するチュートリアルに従って、Secret Store CSI ドライバーを使用して Azure Key Vault への接続を設定します。

ワークロード ID と OpenID Connect (OIDC) 発行者の有効化

認証の種類が Workload Identity場合、Service Connector はクラスターのワークロード ID と OIDC 発行者を有効にします。

Azure portal のスクリーンショット。ワークロード ID を使用して接続を作成しています。

認証の種類が 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 クラスター拡張機能上に構築されています。 拡張機能のインストールまたは更新プロセス中に発生したエラーを確認するには、次のコマンドを使用します。

  1. k8s-extension Azure CLI 拡張機能をインストールします。

    az extension add --name k8s-extension
    
  2. サービス コネクタ拡張機能の状態を取得します。 コマンド出力の statuses プロパティを確認して、エラーを特定します。

    az k8s-extension show \
        --resource-group MyClusterResourceGroup \
        --cluster-name MyCluster \
        --cluster-type managedClusters \
        --name sc-extension
    

Kubernetes クラスター ログを確認する

拡張機能のインストール中にエラーが発生し、 statuses プロパティのエラー メッセージで十分な情報が提供されない場合は、次の手順で Kubernetes ログを確認してさらに調査できます。

  1. AKS クラスターに接続します。

    az aks get-credentials \
        --resource-group MyClusterResourceGroup \
        --name MyCluster
    
  2. サービス コネクタ拡張情報は、Helm チャートを使用して、sc-system 名前空間にインストールされます。 次のコマンドを使用して、名前空間と Helm リリースを確認します。

    • 名前空間が存在することを確認します。

      kubectl get ns
      
    • Helm リリースの状態を確認します。

      helm list -n sc-system
      
  3. 拡張機能のインストール中または更新中に、sc-job という Kubernetes ジョブによって、サービス接続用の Kubernetes リソースが作成されます。 通常、ジョブの実行が失敗すると、拡張機能が失敗します。 次のコマンドを実行して、ジョブの状態を確認します。 sc-jobsc-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 リソース プロバイダーに登録されていない場合にも発生します。

軽減策:

  1. クラスターが "成功" 状態であることを確認して、作成を再試行してください。

  2. サブスクリプションが 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

次のステップ

さまざまなターゲット サービスを統合する方法を学習し、その構成設定と認証方法についてお読みください。