適用対象: ✔️ ハブ クラスターを含む Fleet Manager
Azure Kubernetes Fleet Manager (Kubernetes Fleet) リソースがハブ クラスターを使って作成された場合は、それを使って Kubernetes リソースの伝達などのシナリオを一元的に制御できます。 この記事では、Kubernetes Fleet ハブ クラスターの Kubernetes API にアクセスする方法を説明します。
開始する前に
- Azure アカウントをお持ちでない場合は、開始する前に無料アカウントを作成してください。
- ハブ クラスターとメンバー クラスターを含む Kubernetes Fleet リソースが必要です。 お持ちでない場合は、「Azure CLI を使用して Azure Kubernetes Fleet Manager リソースを作成し、メンバー クラスターを参加させる」を参照してください。
- お使いの ID (ユーザーまたはサービス プリンシパル) には、Kubernetes Fleet リソースに対する Microsoft.ContainerService/fleets/listCredentials/action アクセス許可が必要です。
Azure Kubernetes Fleet Manager (Kubernetes Fleet) リソースがプライベート ハブ クラスターで作成された場合は、それを使用して、Kubernetes リソースの伝達などのシナリオを一元的に制御できます。 この記事では、Azure Bastion のネイティブ クライアント トンネリング機能を使用して、プライベート Kubernetes Fleet ハブ クラスターの Kubernetes API に安全にアクセスする方法について説明します。
Azure Bastion を使用すると、セキュリティで保護されたアクセスを提供しながら、プライベート ハブ クラスターが外部にエンドポイントを公開しないように保護します。 詳細については、「Azure Bastion とは」を参照してください。
開始する前に
- Azure アカウントをお持ちでない場合は、開始する前に無料アカウントを作成してください。
- ハブ クラスターとメンバー クラスターを含む Kubernetes Fleet リソースが必要です。 お持ちでない場合は、「Azure CLI を使用して Azure Kubernetes Fleet Manager リソースを作成し、メンバー クラスターを参加させる」を参照してください。
- Bastion ホストが既にインストールされている仮想ネットワークが必要です。
- Fleet Manager が配置されている仮想ネットワーク用に Azure Bastion ホストを設定していることを確認します。 Azure Bastion ホストを設定するには、「 クイック スタート: 既定の設定で Bastion をデプロイする」を参照してください。
- Bastion は Standard または Premium SKU であり、構成設定でネイティブ クライアント サポートが有効になっている必要があります。
- 使用している ID (ユーザーまたはサービス プリンシパル) には、次のものが必要です。
- Kubernetes Fleet リソースに対する Microsoft.ContainerService/fleets/listCredentials/action アクセス許可。
- Microsoft.Network/bastionHosts/read を Bastion リソースで使用する。
- プライベート ハブ クラスターの仮想ネットワーク上の Microsoft.Network/virtualNetworks/read。
Kubernetes API にアクセスする
サブスクリプション ID、リソース グループ、Kubernetes Fleet リソースのための次の環境変数を設定します。
export SUBSCRIPTION_ID=<subscription-id> export GROUP=<resource-group-name> export FLEET=<fleet-name>az account setコマンドを使って、既定の Azure サブスクリプションを設定します。az account set --subscription ${SUBSCRIPTION_ID}az fleet get-credentialsコマンドを使って、Kubernetes Fleet ハブ クラスターの kubeconfig ファイルを取得します。az fleet get-credentials --resource-group ${GROUP} --name ${FLEET}出力は次の例のようになります。
Merged "hub" as current context in /home/fleet/.kube/configハブ クラスターの Kubernetes Fleet リソースの
FLEET_IDの値に、次の環境変数を設定します。export FLEET_ID=/subscriptions/${SUBSCRIPTION_ID}/resourceGroups/${GROUP}/providers/Microsoft.ContainerService/fleets/${FLEET}次のコマンドを使って、お使いの ID が Kubernetes Fleet ハブ クラスターにアクセスするのを認可します。
ROLE環境変数に対して、次の 4 つの組み込みロールの定義のいずれかを値として使用できます。- Azure Kubernetes Fleet Manager RBAC リーダー
- Azure Kubernetes Fleet Manager RBAC ライター
- Azure Kubernetes Fleet Manager RBAC 管理者
- Azure Kubernetes Fleet Manager RBAC クラスター管理者
export IDENTITY=$(az ad signed-in-user show --query "id" --output tsv) export ROLE="Azure Kubernetes Fleet Manager RBAC Cluster Admin" az role assignment create --role "${ROLE}" --assignee ${IDENTITY} --scope ${FLEET_ID}出力は次の例のようになります。
{ "canDelegate": null, "condition": null, "conditionVersion": null, "description": null, "id": "/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<GROUP>/providers/Microsoft.ContainerService/fleets/<FLEET>/providers/Microsoft.Authorization/roleAssignments/<assignment>", "name": "<name>", "principalId": "<id>", "principalType": "User", "resourceGroup": "<GROUP>", "roleDefinitionId": "/subscriptions/<SUBSCRIPTION_ID>/providers/Microsoft.Authorization/roleDefinitions/18ab4d3d-a1bf-4477-8ad9-8359bc988f69", "scope": "/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<GROUP>/providers/Microsoft.ContainerService/fleets/<FLEET>", "type": "Microsoft.Authorization/roleAssignments" }
kubectl get memberclustersコマンドを使って、API サーバーにアクセスできることを確認します。kubectl get memberclustersコマンドが成功した場合、出力は次の例のようになります。
NAME JOINED AGE aks-member-1 True 2m aks-member-2 True 2m aks-member-3 True 2m
プライベートフリートマネージャーのハブクラスターへのトンネルを開ける。
export HUB_CLUSTER_ID=<hub-cluster-id-in-FL_resourceGroup> az network bastion tunnel --name <BastionName> --resource-group ${GROUP} --target-resource-id ${HUB_CLUSTER_ID}$ --resource-port 443 --port <LocalMachinePort>新しいターミナル ウィンドウで、Bastion トンネルを介してハブ クラスターに接続し、API サーバーのアクセスを確認します。
kubectl get memberclusters --server=https://localhost:<LocalMachinePort>コマンドが成功した場合、出力は次の例のようになります。
NAME JOINED AGE aks-member-1 True 2m aks-member-2 True 2m aks-member-3 True 2m
関連コンテンツ
Azure Kubernetes Service