クラスター接続を使用して Azure Arc 対応 Kubernetes クラスターに接続する

クラスター接続を使用すると、ファイアウォールでインバウンド ポートを有効にしなくても、Azure Arc 対応 Kubernetes クラスターに安全に接続できます。 Arc 対応 Kubernetes クラスターの apiserver にアクセスすると、次のシナリオが可能になります。

  • 対話型デバッグとトラブルシューティングを有効にする。
  • カスタムの場所やその上に作成されたその他のリソースの Azure サービスへのクラスター アクセスを提供する。

この機能の概要については、「クラスター接続 - Azure Arc 対応 Kubernetes」の記事を参照してください。

重要

Azure Arc 対応 Kubernetes のプレビュー機能は、セルフサービス、オプトイン ベースで利用できます。 プレビューは、"現状有姿のまま" および "利用可能な限度" で提供され、サービス レベル アグリーメントおよび限定保証から除外されるものとします。 Azure Arc 対応 Kubernetes のプレビューは、ベストエフォート ベースでカスタマー サポートによって部分的にカバーされます。

前提条件

  • バージョン 2.16.0 以降の Azure CLI をインストールするか、それにアップグレードします

  • connectedk8s Azure CLI 拡張機能バージョン 1.1.0 以降をインストールします。

    az extension add --name connectedk8s
    

    connectedk8s 拡張機能が既にインストールされている場合は、その拡張機能を最新バージョンに更新します。

    az extension update --name connectedk8s
    
  • Azure Arc 対応 Kubernetes に接続された既存のクラスター。

  • kubeconfig ファイルが問題のクラスターを指している状態で、マシン上で次のコマンドを実行して、任意の Azure Arc 対応 Kubernetes クラスターに対してクラスター接続を有効にします。

    az connectedk8s enable-features --features cluster-connect -n <clusterName> -g <resourceGroupName>
    
  • 送信アクセスのために、「Kubernetes クラスターを Azure Arc に接続する」で示されているエンドポイントに加えて、下記に示すものも有効にします。

    エンドポイント Port
    *.servicebus.windows.net 443
    *.guestnotificationservice.azure.com 443

使用

クラスター接続機能では、2 つの認証オプションがサポートされています。

  • Azure Active Directory (Azure AD)
  • サービス アカウント トークン

オプション 1: Azure Active Directory

  1. kubeconfig ファイルがご自分の Kubernetes クラスターの apiserver を指している状態で、アクセスを必要とする Azure AD エンティティ (サービス プリンシパルまたはユーザー) への ClusterRoleBinding または RoleBinding を作成します。

    ユーザーの場合:

    kubectl create clusterrolebinding admin-user-binding --clusterrole cluster-admin --user=<testuser>@<mytenant.onmicrosoft.com>
    

    Azure AD アプリケーションの場合:

    1. お使いの Azure AD アプリケーションに関連付けられている objectId を取得します。

      az ad sp show --id <id> --query objectId -o tsv
      
    2. このクラスターにアクセスする必要がある Azure AD エンティティ (サービス プリンシパルまたはユーザー) への ClusterRoleBinding または RoleBinding を作成します。

      kubectl create clusterrolebinding admin-user-binding --clusterrole cluster-admin --user=<objectId>
      
  2. 目的の Azure AD エンティティを使用して Azure CLI にログインした後、任意の場所から (クラスターを囲むファイアウォールの外側からでも) クラスターと通信するために必要なクラスター接続の kubeconfig を取得します。

    az connectedk8s proxy -n <cluster-name> -g <resource-group-name>
    
  3. kubectl を使用して、クラスターに要求を送信します。

    kubectl get pods
    

    これで、default 名前空間の下にあるすべてのポッドの一覧が含まれている、クラスターからの応答が表示されます。

オプション 2: サービス アカウント ベアラー トークン

  1. kubeconfig ファイルがご自分の Kubernetes クラスターの apiserver を指している状態で、任意の名前空間にサービス アカウントを作成します (次のコマンドを実行すると、既定の名前空間に作成されます)。

    kubectl create serviceaccount admin-user
    
  2. ClusterRoleBinding または RoleBinding を作成して、このサービス アカウントにクラスターに対する適切なアクセス許可を付与します。

    kubectl create clusterrolebinding admin-user-binding --clusterrole cluster-admin --serviceaccount default:admin-user
    
  3. 次のコマンドを使用して、サービス アカウントのトークンを取得します

    SECRET_NAME=$(kubectl get serviceaccount admin-user -o jsonpath='{$.secrets[0].name}')
    
    TOKEN=$(kubectl get secret ${SECRET_NAME} -o jsonpath='{$.data.token}' | base64 -d | sed $'s/$/\\\n/g')
    
  4. 任意の場所から (クラスターを囲むファイアウォールの外側からでも) クラスターと通信するために必要なクラスター接続の kubeconfig を取得します。

    az connectedk8s proxy -n <cluster-name> -g <resource-group-name> --token $TOKEN
    
  5. kubectl を使用して、クラスターに要求を送信します。

    kubectl get pods
    

    これで、default 名前空間の下にあるすべてのポッドの一覧が含まれている、クラスターからの応答が表示されます。

既知の制限事項

Kubernetes クラスターへの要求を行うときに、使用する Azure AD エンティティが 200 を超えるグループに属している場合、これは既知の制限であるため、次のエラーが発生します。

You must be logged in to the server (Error:Error while retrieving group info. Error:Overage claim (users with more than 200 group membership) is currently not supported. 

このエラーを回避するには:

  1. サービス プリンシパルを作成します。これは、200 を超えるグループのメンバーになる可能性が高くありません。
  2. az connectedk8s proxy コマンドを実行する前に、サービス プリンシパルを使用して Azure CLI にサインインします。

次の手順

ご自分のクラスターで Azure AD RBAC を設定する