VMware vSphere with Tanzu Kubernetes 客體叢集中的預設 kubeconfig 檔案包含一個 Token,依預設,該 Token 會在 10 小時後到期,並導致顯示警告訊息。為避免出現該警告,您必須與 Kubernetes 基礎結構管理員合作,以產生有效的 TKG Cluster on Supervisor 組態檔案,其中包含您可以在 NSX Application Platform 部署期間使用的未到期 Token。
預設 kubeconfig 檔案中的 Token 到期時,您會在 NSX Application Platform 的 NSX Manager UI 中看到下列警告訊息。
無法連線,系統因 Kubernetes 組態到期而發生連線問題。請更新 Kubernetes 組態以解決問題。
該警告不會影響
NSX Application Platform 的功能或目前啟用的任何 NSX 安全性功能。不過,如果在 Tanzu Kubernetes 客體叢集上部署
NSX Application Platform 10 小時後未取代預設的 Token,每次執行下列作業時,您都必須產生一個有效的 (未到期) Token:
- 部署 NSX Application Platform
- 升級 NSX Application Platform
- 刪除 NSX Application Platform
若要產生 TKG Cluster on Supervisor 組態檔案,且其中具有您可以在 NSX Application Platform 部署期間使用的未到期 Token,請與 Kubernetes 基礎結構管理員一起執行下列程序。
程序
- 使用下列命令登入 vSphere with Tanzu Kubernetes 客體叢集。
kubectl vsphere login --server <supervisor-cluster_ip> -u <user> --tanzu-kubernetes-cluster-name <tkg-cluster-name> --tanzu-kubernetes-cluster-namespace <namespace>
參數如下所示:
- <supervisor-cluster_ip> 是控制平面節點位址,您可以在 vSphere Client 中選取工作負載管理 > 主管叢集以找到該位址。
- <user> 是對 TKG Cluster on Supervisor 具有管理員存取權的帳戶。
- <tkg-cluster-name> 是 TKG Cluster on Supervisor 的名稱。
- <namespace> 是此叢集所在的 vSphere 命名空間。
例如,
kubectl vsphere login --server 192.111.33.22 -u [email protected] --tanzu-kubernetes-cluster-name napp-tkg-cluster --tanzu-kubernetes-cluster-namespace napp
- 單獨執行下列每個命令,以產生管理員服務帳戶並建立叢集角色繫結。
kubectl create serviceaccount napp-admin -n kube-system
kubectl create clusterrolebinding napp-admin --serviceaccount=kube-system:napp-admin --clusterrole=cluster-admin
- (必要) (對於 Kubernetes 1.24 版及更新版本) 手動為管理員服務帳戶建立驗證 Token。使用下列資訊。
- 使用服務帳戶建立 YAML 檔案。對於名為 napp-admin.yaml 的範例 YAML 檔案,請使用以下內容。
apiVersion: v1
kind: Secret
type: kubernetes.io/service-account-token
metadata:
name: napp-admin
namespace: kube-system
annotations:
kubernetes.io/service-account.name: "napp-admin"
- 使用以下命令建立具有服務帳戶的驗證 Token。
kubectl apply -f <filename create above.yaml>
使用上一個步驟中的範例 YAML 檔案,要使用的命令如下所示。
kubectl apply -f napp-admin.yaml
即會產生驗證 Token 或密碼。
- 若要取得管理員服務帳戶的驗證 Token 和叢集憑證授權機構,請分別執行下列命令。
對於支援的 Kubernetes 1.24 版及更新版本,請使用下列命令。
SECRET=$(kubectl get secrets napp-admin -n kube-system -ojsonpath='{.metadata.name}')
TOKEN=$(kubectl get secret $SECRET -n kube-system -ojsonpath='{.data.token}' | base64 -d)
kubectl get secrets $SECRET -n kube-system -o jsonpath='{.data.ca\.crt}' | base64 -d > ./ca.crt
對於 1.24 版之前的受支援 Kubernetes 版本,請使用下列命令。
SECRET=$(kubectl get serviceaccount napp-admin -n kube-system -ojsonpath='{.secrets[].name}')
TOKEN=$(kubectl get secret $SECRET -n kube-system -ojsonpath='{.data.token}' | base64 -d)
kubectl get secrets $SECRET -n kube-system -o jsonpath='{.data.ca\.crt}' | base64 -d > ./ca.crt
- 取得 TKG Cluster on Supervisor URL。在命令提示字元,分別執行下列命令。
CONTEXT=$(kubectl config view -o jsonpath='{.current-context}')
CLUSTER=$(kubectl config view -o jsonpath='{.contexts[?(@.name == "'"$CONTEXT"'")].context.cluster}')
URL=$(kubectl config view -o jsonpath='{.clusters[?(@.name == "'"$CLUSTER"'")].cluster.server}')
- 為 TKG Cluster on Supervisor 產生一個組態檔案,且其中含有未到期的 Token。
TO_BE_CREATED_KUBECONFIG_FILE="<file-name>"
<file-name> 參數是您嘗試建立的 kubeconfig 檔案的名稱。
kubectl config --kubeconfig=$TO_BE_CREATED_KUBECONFIG_FILE set-cluster $CLUSTER --server=$URL --certificate-authority=./ca.crt --embed-certs=true
kubectl config --kubeconfig=$TO_BE_CREATED_KUBECONFIG_FILE set-credentials napp-admin --token=$TOKEN
kubectl config --kubeconfig=$TO_BE_CREATED_KUBECONFIG_FILE set-context $CONTEXT --cluster=$CLUSTER --user=napp-admin
kubectl config --kubeconfig=$TO_BE_CREATED_KUBECONFIG_FILE use-context $CONTEXT
- (選擇性) 刪除 ca.crt,這是在產生新的 kubeconfig 檔案期間建立的暫存檔案。
- 使用在 NSX Application Platform 部署期間新產生的 kubeconfig 檔案。