次の方法で共有


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

クラスター接続を使用すると、ファイアウォールでどの受信ポートも有効にすることなく、Azure Arc 対応 Kubernetes クラスターにどこからでも安全に接続できます。

Azure Arc 対応 Kubernetes クラスターの apiserver にアクセスすると、次のシナリオが可能になります。

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

開始する前に、クラスター接続機能の概念的概要を確認してください。

前提条件

  • Azure CLI をインストールするか、最新バージョンに更新します。

  • 最新バージョンの connectedk8s Azure CLI 拡張機能をインストールします。

    az extension add --name connectedk8s
    

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

    az extension update --name connectedk8s
    
  • プレースホルダーを置き換えて下記のコマンドを実行し、このドキュメントで使用する環境変数を設定します。

    CLUSTER_NAME=<cluster-name>
    RESOURCE_GROUP=<resource-group-name>
    ARM_ID_CLUSTER=$(az connectedk8s show -n $CLUSTER_NAME -g $RESOURCE_GROUP --query id -o tsv)
    

認証の設定

既存の Arc 対応クラスターで、Microsoft Entra 認証またはサービス アカウント トークンを使用して ClusterRoleBinding を作成します。

Microsoft Entra 認証オプション

  1. お使いの Microsoft Entra エンティティに関連付けられている objectId を取得します。 単一ユーザー アカウントの場合は、Microsoft Entra エンティティに関連付けられているユーザー プリンシパル名 (UPN) を取得します。

    • Microsoft Entra グループ アカウントの場合:

      AAD_ENTITY_ID=$(az ad signed-in-user show --query id -o tsv)
      
    • Microsoft Entra シングル ユーザー アカウントの場合:

      AAD_ENTITY_ID=$(az ad signed-in-user show --query userPrincipalName -o tsv)
      
    • Microsoft Entra アプリケーションの場合:

      AAD_ENTITY_ID=$(az ad sp show --id <id> --query id -o tsv)
      
  2. 適切なアクセス許可を持っているエンティティを承認します。

    • クラスターでの認可チェックのために Kubernetes ネイティブの ClusterRoleBinding または RoleBinding を使用している場合は、直接アクセスのためにクラスターの apiserver を指し示す kubeconfig ファイルを使用して、このクラスターにアクセスする必要がある Microsoft Entra エンティティにマップされるバインドを作成できます。 次に例を示します。

      kubectl create clusterrolebinding demo-user-binding --clusterrole cluster-admin --user=$AAD_ENTITY_ID
      
    • クラスターの承認チェックに Azure RBAC を使用する場合は、Microsoft Entra エンティティにマップされた適用可能な Azure ロールの割り当てを 作成できます。 次に例を示します。

      az role assignment create --role "Azure Arc Kubernetes Viewer" --assignee $AAD_ENTITY_ID --scope $ARM_ID_CLUSTER
      az role assignment create --role "Azure Arc Enabled Kubernetes Cluster User Role" --assignee $AAD_ENTITY_ID --scope $ARM_ID_CLUSTER
      

サービス アカウント トークン認証オプション

  1. Kubernetes クラスターの apiserver を指し示す kubeconfig ファイルを使用して、このコマンドを実行してサービス アカウントを作成します。 この例では、既定の名前空間にサービス アカウントを作成しますが、default の他の名前空間に置き換えることができます。

    kubectl create serviceaccount demo-user -n default
    
  2. ClusterRoleBinding を作成して、 このサービス アカウントにクラスターに対する適切なアクセス許可を付与します。 最初のコマンドで別の名前空間を使用した場合は、ここで default に置き換えます。

    kubectl create clusterrolebinding demo-user-binding --clusterrole cluster-admin --serviceaccount default:demo-user
    
  3. 次のようにサービス アカウント トークンを作成します。

    kubectl apply -f - <<EOF
    apiVersion: v1
    kind: Secret
    metadata:
      name: demo-user-secret
      annotations:
        kubernetes.io/service-account.name: demo-user
    type: kubernetes.io/service-account-token
    EOF
    
    TOKEN=$(kubectl get secret demo-user-secret -o jsonpath='{$.data.token}' | base64 -d | sed 's/$/\n/g')
    
  4. コンソールに出力するトークンを取得します

    echo $TOKEN
    

クライアント デバイスからクラスターにアクセスする

これで、別のクライアントからクラスターにアクセスできます。 もう一方のクライアント デバイスで次のステップを実行します。

  1. Microsoft Entra 認証またはサービス アカウント トークン認証を使用してサインインします。

  2. 使用する認証オプションに基づき、クラスターとの通信に必要なクラスター接続情報 kubeconfig を取得します。クラスターを囲むファイアウォールの外側からでも通信が可能です。

    • Microsoft Entra 認証の場合:

      az connectedk8s proxy -n $CLUSTER_NAME -g $RESOURCE_GROUP
      
    • サービス アカウント トークン認証の場合:

      az connectedk8s proxy -n $CLUSTER_NAME -g $RESOURCE_GROUP --token $TOKEN
      

      このコマンドは、プロキシを開き、現在のシェルをブロックします。

  3. 別のシェル セッションで、kubectl を使用してクラスターに要求を送信します。

    kubectl get pods -A
    

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

既知の制限事項

Kubernetes クラスターへの要求を行うときに、使用する Microsoft Entra サービス プリンシパルが 200 を超えるグループに属している場合、次のエラーが発生する場合があります。

Overage claim (users with more than 200 group membership) for SPN is currently not supported. For troubleshooting, please refer to aka.ms/overageclaimtroubleshoot

これは、既知の制限です。 このエラーを回避するには:

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

次のステップ