华为云UCS-获取KubeConfig文件:第三方云厂商集群

时间:2024-05-08 17:06:48

第三方云厂商集群

由于第三方云厂商集群提供的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对象。

support.huaweicloud.com/usermanual-ucs/ucs_01_0351.html