VMware vSphere with Tanzu Kubernetes 客户机集群中的默认 kubeconfig 文件包含一个令牌,默认情况下,该令牌在 10 小时后过期,并产生一条警告消息。为避免出现该警告,请与您的 Kubernetes 基础架构管理员一起生成有效的 TKG Cluster on Supervisor 配置文件,其中包含可在 NSX Application Platform 部署期间使用的未过期令牌。

在默认 kubeconfig 文件中的令牌过期时,将在 NSX Manager UI 中看到有关 NSX Application Platform 的以下警告消息。

无法连接,系统由于 Kubernetes 配置过期而遇到连接问题。请更新 Kubernetes 配置以解决该问题。(Unable to connect, system has encountered a connectivity issue due to the expiry of Kubernetes Configuration.)

该警告不会影响 NSX Application Platform 功能或当前激活的任何 NSX 安全功能。不过,如果在 Tanzu Kubernetes 客户机集群上部署 NSX Application Platform 10 小时后未替换默认令牌,每次执行以下操作时,您都必须生成一个有效(未过期)的令牌:
  • 部署 NSX Application Platform
  • 升级 NSX Application Platform
  • 删除 NSX Application Platform

要生成 TKG Cluster on Supervisor 配置文件,并在其中包含可在 NSX Application Platform 部署期间使用的未过期令牌,请与 Kubernetes 基础架构管理员一起执行以下过程。

过程

  1. 使用以下命令登录到 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
  2. 单独运行以下每个命令以生成管理员服务帐户并创建集群角色绑定。
    kubectl create serviceaccount napp-admin -n kube-system
    
    kubectl create clusterrolebinding napp-admin --serviceaccount=kube-system:napp-admin --clusterrole=cluster-admin
  3. (必选) (对于 Kubernetes 版本 1.24 及更高版本)手动为管理员服务帐户创建身份验证令牌。请使用以下信息。
    1. 使用服务帐户创建 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"
    2. 使用以下命令创建具有服务帐户的身份验证令牌。
      kubectl apply -f <filename create above.yaml>
      使用上一步中的示例 YAML 文件,要使用的命令如下所示。
      kubectl apply -f napp-admin.yaml
      将生成身份验证令牌或密钥。
  4. 要获取管理员服务帐户的身份验证令牌和集群证书颁发机构,请分别运行以下命令。
    对于支持的 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
  5. 获取 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}')
  6. 为 TKG Cluster on Supervisor 生成一个包含未过期令牌的配置文件。
    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
  7. (可选) 删除 ca.crt,这是在生成新的 kubeconfig 文件期间创建的临时文件。
  8. NSX Application Platform 部署期间使用新生成的 kubeconfig 文件。