Kubectl vSphere コンテキストのトラブルシューティング
search cancel

Kubectl vSphere コンテキストのトラブルシューティング

book

Article ID: 435635

calendar_today

Updated On:

Products

Tanzu Kubernetes Runtime VMware vSphere Kubernetes Service

Issue/Introduction

免責事項:これは英文の記事「Troubleshooting Kubectl vSphere Contexts」の日本語訳です。記事はベストエフォートで翻訳を進めているため、ローカライズ化コンテンツは最新情報ではない可能性があります。最新情報は英語版の記事で参照してください。
本KBは、vSphere Kubernetes Service(VKS)およびvSphere Supervisor における kubectl vsphere のコンテキストに関する問題をトラブルシューティングするための手順を提供することを目的としています。

Environment

vSphere Supervisor

vSphere Kubernetes Service (VKS)

vCenter 8.X

Cause

権限および特権は、ネームスペースレベルでのSSO権限に基づいて割り当てられます。

利用可能なコンテキストの一覧は、ログイン時に割り当てられているSSO権限に基づいて自動的に生成されます。

権限の変更は、次回の kubectl vsphere ログイン後に適用されます。

詳細については、以下の vSphere 8 ドキュメントをご参照ください:

Resolution

VKS 製品において、kubectl vsphere login は Supervisor クラスターに対して認証を行い、サーバーフラグには Supervisor クラスターのコントロールプレーンノードアドレスを指定する必要があります。これは、Workload Management または Supervisor Management(vCenter 9 の場合)から Supervisors テーブルタブに移動することで確認できます。

  • Supervisor クラスターのコンテキストにログインするには、以下のコマンドを使用します:
    kubectl vsphere login --server <Supervisor Control Plane Node Address> --vsphere-username <SSO username>

     

  • ワークロード/VKS クラスターのコンテキストの場合は、以下のようにネームスペースおよびクラスター名を指定します:
    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-contexts
  • CLUSTER 列にはコンテキストに関連付けられた IP アドレスが表示され、コンテキストの確認に使用できます。

  • Supervisor クラスターのコンテキストでは、CLUSTER の IP アドレスは上記のコントロールプレーンノードアドレスと一致します。

  • ワークロード/VKS クラスターのコンテキストでは、クラスターのコントロールプレーンエンドポイントが CLUSTER の IP アドレスと一致します。
    • vSphere Web UI では、該当クラスターのネームスペース内の Compute タブ → VMware Resources → Tanzu Kubernetes クラスター配下で確認できます。

    • Supervisor クラスターのコンテキストから、以下のコマンドで該当クラスターの想定 IP を取得できます:
      kubectl 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 つしか表示されない既知の問題があります。異なる名前の使用を推奨します。

 

 

Additional Information

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-context
    • 現在、SSOユーザーがログインしているコンテキストを表示します。
  • kubectl config get-contexts
    • ログインしているSSOユーザーに権限が付与されている、利用可能なすべてのコンテキストを一覧表示します。
  • kubectl config use-context <context name>
    • 指定したコンテキストに切り替えます。

      -----------