免責事項:これは英文の記事「Troubleshooting Kubectl vSphere Contexts」の日本語訳です。記事はベストエフォートで翻訳を進めているため、ローカライズ化コンテンツは最新情報ではない可能性があります。最新情報は英語版の記事で参照してください。
本KBは、vSphere Kubernetes Service(VKS)およびvSphere Supervisor における kubectl vsphere のコンテキストに関する問題をトラブルシューティングするための手順を提供することを目的としています。
vSphere Supervisor
vSphere Kubernetes Service (VKS)
vCenter 8.X
権限および特権は、ネームスペースレベルでのSSO権限に基づいて割り当てられます。
利用可能なコンテキストの一覧は、ログイン時に割り当てられているSSO権限に基づいて自動的に生成されます。
権限の変更は、次回の kubectl vsphere ログイン後に適用されます。
詳細については、以下の vSphere 8 ドキュメントをご参照ください:
VKS 製品において、kubectl vsphere login は Supervisor クラスターに対して認証を行い、サーバーフラグには Supervisor クラスターのコントロールプレーンノードアドレスを指定する必要があります。これは、Workload Management または Supervisor Management(vCenter 9 の場合)から Supervisors テーブルタブに移動することで確認できます。
kubectl vsphere login --server <Supervisor Control Plane Node Address> --vsphere-username <SSO username>
kubectl vsphere login --server <Supervisor Control Plane Node Address> --vsphere-username <SSO username> --tanzu-kubernetes-cluster-namespace <namespace> --tanzu-kubernetes-cluster-name <cluster>
kubectl vsphere login を使用してログインが成功した後、利用可能なコンテキスト一覧は以下のコマンドで確認できます:
kubectl config get-contextskubectl describe cluster -n <namespace> <cluster> | grep -i endpoint -A2
以下の表は、コンテキストおよび SSO 権限に関連するエラーメッセージと推奨事項を示しています:
| エラーメッセージまたは問題 | 説明および推奨事項 |
FATA[YYYY-MM-DD HH:MM:SS.sss] Error while getting list of workloads: invalid or missing credentials | ユーザー名とパスワードの組み合わせが正しくないため、ログインに失敗しています。 正しい SSO ユーザー名およびパスワードを確認してください。 |
Error from server (Forbidden): nodes is forbidden: User "sso:<SSO user>@<SSO domain>" cannot list resource "nodes" in API group "" at the cluster scope | このエラーメッセージは、SSO ユーザーに現在のコンテキストに対する権限が割り当てられていないことを示しています。具体的には、nodes オブジェクトの参照権限がないことを意味します。 現在のコンテキストおよび、SSO ユーザーが対象コンテキストに対して適切な権限を持っているか確認してください。 「kubectl config get-contexts」で表示される CLUSTER IP を基に、現在のコンテキストが意図したものであることを確認してください。 nodes 以外のオブジェクトについては、-A(全ネームスペース)ではなく、特定のネームスペース(-n <namespace>)を指定して kubectl コマンドを実行してください。 デフォルトでは、Supervisor クラスターのコンテキストは Administrator の権限を制限しており、システムネームスペースに対するコマンド実行はできません。そのため、-A フラグを使用した場合、このエラーが表示されます。 |
| 誤ったコンテキストにログインしているが、コンテキスト名は正しいように見える場合。 | コンテキスト名が一致していても、各コンテキストは CLUSTER IP アドレスに紐付いています。現在接続しているコンテキストが、意図した CLUSTER IP と異なる可能性があります。 「kubectl config get-contexts」を実行し、CLUSTER IP アドレスと上記のコントロールプレーンアドレスを比較してください。 対象のコンテキストが一覧に存在しない場合: - ワークロード/VKS クラスターの場合、--tanzu-kubernetes-cluster オプションを指定して kubectl vsphere login を実行してください。 - SSO ユーザーが対象コンテキストに対して適切な権限を持っていることを確認してください。 *クラスター名とネームスペース名を同一にすると、コンテキスト名の混乱や、本来 2 つ(ネームスペース用とクラスター用)表示されるべきコンテキストが 1 つしか表示されない既知の問題があります。クラスター名とネームスペース名は異なる名前を使用することを推奨します。 |
| 目的のコンテキストが表示されない。 | SSO ユーザーに対象コンテキストの権限がない、またはログイン時に対象コンテキストを指定していない可能性があります。 SSO ユーザーに適切な権限が付与されていることを確認してください。 ワークロード/VKS クラスターの場合、--tanzu-kubernetes-cluster オプションを指定して kubectl vsphere login を実行してください。 クラスター名とネームスペース名を同一にすると、コンテキスト名の混乱や、想定される 2 つのコンテキストが 1 つしか表示されない既知の問題があります。異なる名前の使用を推奨します。 |
vSphere Cloud Foundation 9(VCF9)では、kubectl vsphere login は VCF CLI に置き換えられています。
コンテキストコマンド
kubectl vsphere login --server <Supervisor Control Plane Node Address>--vsphere-username <SSO username>--tanzu-kubernetes-cluster-namespace <namespace> --tanzu-kubernetes-cluster-name <cluster>--insecure-skip-tls-verify--verbose #kubectl config current-contextkubectl config get-contextskubectl config use-context <context name>