更新时间:2024-11-12 GMT+08:00

获取KubeConfig文件

KubeConfig文件用于配置对Kubernetes集群的访问,KubeConfig文件中包含访问注册Kubernetes集群所需要的认证凭据以及Endpoint(访问地址),通常与kubectl命令行工具或其他客户端结合使用。详细介绍可参见Kubernetes文档

本章节将指导您获取集群的KubeConfig文件,由于各集群提供商的KubeConfig文件格式略有差异,请根据您的集群进行相应的操作。

KubeConfig文件中包含集群认证信息,存在安全泄露风险,请您务必妥善保存。

华为云集群

  1. 登录CCE控制台,单击目标集群名进入集群信息页面。
  2. “连接信息”中单击kubectl后的“配置”按钮。
  3. 参照页面中的提示信息,下载kubectl配置文件(公网地址变更后需重新下载)。
  4. 使用3中下载的配置文件接入集群,详细步骤请继续参考注册附着集群(公网接入)注册附着集群(私网接入)

第三方云厂商集群

由于第三方云厂商集群提供的KubeConfig文件格式存在差异,您需要自行创建一个具有所有集群资源操作权限的ServiceAccount,并获取这个ServiceAccount的token,用于配置UCS支持的KubeConfig文件。

  1. 通过kubectl连接集群。
  2. 创建ucs-service-account.yaml文件。

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: ucs-user
    ---
    apiVersion: v1
    kind: Secret
    metadata:
      name: ucs-user-token
      annotations:
        kubernetes.io/service-account.name: "ucs-user"
    type: kubernetes.io/service-account-token
    ---
    apiVersion: rbac.authorization.k8s.io/v1  
    kind: ClusterRole
    metadata:
      name: ucs-user-role
    rules:
    - apiGroups:
      - '*'
      resources:
      - '*'
      verbs:
      - '*'
    - nonResourceURLs:
      - '*'
      verbs:
      - get
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRoleBinding
    metadata:
      name: ucs-user-role-binding
    subjects:
      - kind: ServiceAccount
        name: ucs-user
        namespace: default
    roleRef:
      kind: ClusterRole
      name: ucs-user-role
      apiGroup: rbac.authorization.k8s.io

  3. 在集群中执行以下命令创建ServiceAccount。

    kubectl apply -f ucs-service-account.yaml

  4. 使用以下命令获取token。

    kubectl get secret ucs-user-token -n default -oyaml | grep token: | awk '{print $2}' | base64 -d ;echo

  5. 配置KubeConfig文件。

    参考以下示例创建一个kubeconfig.yaml文件,并将token替换为4中获取的值。

    kubeconfig.yaml:

    kind: Config
    apiVersion: v1
    preferences: {}
    clusters:
      - name: internalCluster
        cluster:
          server: 'https://kubernetes.default.svc.cluster.local:443'
          insecure-skip-tls-verify: true
    users:
      - name: ucs-user
        user:
          token: 'MIIFbAYJKo*****'
    contexts:
      - name: internal
        context:
          cluster: internalCluster
          user: ucs-user
    current-context: internal
    KubeConfig文件中的关键参数说明如下:

    参数名

    参数值

    说明

    是否可选

    server

    'https://kubernetes.default.svc.cluster.local:443'

    APIServer的集群内访问地址。由于部分厂商集群对APIServer地址做了外部访问限制,可能导致UCS无法正常接入集群,因此建议使用集群内访问地址。

    必选

    insecure-skip-tls-verify

    true

    如使用该参数,表示跳过证书认证,参数值必须为true。

    二选一

    说明:

    当server字段为集群内访问地址时,优选跳过证书认证。

    certificate-authority-data

    base64加密字符串

    如使用该参数,表示集群开启双向认证,参数值为经base64加密后的服务端证书。

    原生K8s集群的服务端证书默认地址为master节点的“/etc/kubernetes/pki/ca.crt”

    token

    base64加密字符串

    用户以token方式进行认证,参数值为4中获取的token值。

    三选一

    说明:

    优选token方式,UCS不支持除这三种方式外的其他认证方式。

    • client-certificate-data
    • client-key-data

    base64加密字符串

    用户以证书加私钥的方式进行认证。

    • client-certificate-data:经base64加密后的客户端证书。
    • client-key-data:经base64加密后的客户端私钥。
    • username
    • password

    字符串

    用户通过用户名密码进行认证。

    • username:访问集群的用户名。
    • password:用户名对应的密码。

  6. 使用5中配置的KubeConfig文件接入集群,详细步骤请继续参考注册附着集群(公网接入)注册附着集群(私网接入)

    使用UCS期间,创建的ServiceAccount、ClusterRole、ClusterRoleBinding对象均不能删除,否则token将会失效。

    如集群不再接入UCS,可使用kubectl delete -f ucs-service-account.yaml命令删除UCS创建的SA对象。

    如修改集群kubeconfig.yaml文件的server地址为集群的apiserver地址后,集群接入到UCS无法打开,解决方案请参见附着集群接入失败--排查集群kube-apiserver状态

自建集群

如果您的集群是通过Kubernetes官方二进制文件或Kubeadm等部署工具搭建的标准集群,可直接使用以下方法获取KubeConfig文件。

该方法不适用于云服务商提供的商用集群,商用集群的KubeConfig文件获取请参考第三方云厂商集群

  1. 登录集群Master节点。
  2. 查看集群访问凭证。默认情况下,自建集群的配置文件路径为Master节点的“$HOME/.kube/config”,如您的集群指定了其他KubeConfig配置文件,请自行更换路径。

    cat $HOME/.kube/config

  3. 复制该凭证内容。
  4. 在本地创建一个YAML文件,将上一步中复制的凭证内容粘贴至该文件并保存。
  5. 使用4中的YAML文件接入集群,详细步骤请继续参考注册附着集群(公网接入)注册附着集群(私网接入)

本地集群

关于本地集群KubeConfig详情请参见本地集群KubeConfig文件

获取本地集群的KubeConfig需要使用ucs-ctl工具,获取步骤如下:

  1. 使用ucs-ctl获取集群名称。

    ./ucs-ctl get cluster

  2. 使用ucs-ctl导出指定集群的KubeConfig。

    ./ucs-ctl get kubeconfig -c test-redhat86 -o kubeconfig

    可以使用ucs-ctl get kubeconfig -h查看获取KubeConfig所使用到的参数。

    • -c, --cluster:指定待导出KubeConfig的集群名。
    • -e, --eip:指定API server的eip。
    • -o, --output:指定KubeConfig导出文件名。