クラスター接続を使用すると、ファイアウォールでどの受信ポートも有効にすることなく、Azure Arc 対応 Kubernetes クラスターにどこからでも安全に接続できます。
Azure Arc 対応 Kubernetes クラスターの apiserver
にアクセスすると、次のシナリオが可能になります。
- 対話型デバッグとトラブルシューティング
- カスタムの場所やその上に作成されたその他のリソースの Azure サービスへのクラスター アクセス
開始する前に、クラスター接続機能の概念的概要を確認してください。
前提条件
アクティブなサブスクリプションが含まれる Azure アカウント。 無料でアカウントを作成できます。
Azure Arc 対応 Kubernetes に接続された既存のクラスター。
- クラスターをまだ接続していない場合は、クイックスタートを使用します。
- 最新バージョンにエージェントをアップグレードします。
Arc 対応 Kubernetes のネットワーク要件を有効にします。これには、クラスター接続に必要なエンドポイントがすべて含まれます。
最新バージョンの
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 認証オプション
お使いの 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)
適切なアクセス許可を持っているエンティティを承認します。
クラスターでの認可チェックのために 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
サービス アカウント トークン認証オプション
Kubernetes クラスターの
apiserver
を指し示すkubeconfig
ファイルを使用して、このコマンドを実行してサービス アカウントを作成します。 この例では、既定の名前空間にサービス アカウントを作成しますが、default
の他の名前空間に置き換えることができます。kubectl create serviceaccount demo-user -n default
ClusterRoleBinding を作成して、 このサービス アカウントにクラスターに対する適切なアクセス許可を付与します。 最初のコマンドで別の名前空間を使用した場合は、ここで
default
に置き換えます。kubectl create clusterrolebinding demo-user-binding --clusterrole cluster-admin --serviceaccount default:demo-user
次のようにサービス アカウント トークンを作成します。
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')
コンソールに出力するトークンを取得します
echo $TOKEN
クライアント デバイスからクラスターにアクセスする
これで、別のクライアントからクラスターにアクセスできます。 もう一方のクライアント デバイスで次のステップを実行します。
Microsoft Entra 認証またはサービス アカウント トークン認証を使用してサインインします。
使用する認証オプションに基づき、クラスターとの通信に必要なクラスター接続情報
kubeconfig
を取得します。クラスターを囲むファイアウォールの外側からでも通信が可能です。Microsoft Entra 認証の場合:
az connectedk8s proxy -n $CLUSTER_NAME -g $RESOURCE_GROUP
サービス アカウント トークン認証の場合:
az connectedk8s proxy -n $CLUSTER_NAME -g $RESOURCE_GROUP --token $TOKEN
注
このコマンドは、プロキシを開き、現在のシェルをブロックします。
別のシェル セッションで、
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
これは、既知の制限です。 このエラーを回避するには:
- サービス プリンシパルを作成します。これは、200 を超えるグループのメンバーになる可能性が高くありません。
az connectedk8s proxy
コマンドを実行する前に、サービス プリンシパルを使用して Azure CLI にサインインします。
次のステップ
- クラスター上で Microsoft Entra RBAC を設定します。
- クラスター拡張機能をデプロイして管理します。
- Azure Arc 対応 Kubernetes のセキュリティブックのガイダンスに従って、クラスターを他の方法で保護します。