
# 获取KubeConfig文件
KubeConfig文件用于配置对Kubernetes集群的访问，KubeConfig文件中包含访问注册Kubernetes集群所需要的认证凭据以及Endpoint（访问地址），通常与kubectl命令行工具或其他客户端结合使用。详细介绍可参见[Kubernetes文档](https://kubernetes.io/docs/tasks/access-application-cluster/configure-access-multiple-clusters/)。
本章节将指导您获取集群的KubeConfig文件，由于各集群提供商的KubeConfig文件格式略有差异，请根据您的集群进行相应的操作。
![](https://support.huaweicloud.com/usermanual-ucs/public_sys-resources/notice_3.0-zh-cn.png)
KubeConfig文件中包含集群认证信息，存在安全泄露风险，请您务必妥善保存。
#### 华为云集群
1. 登录[CCE控制台](https://console.huaweicloud.com/cce2.0/?#/cce/cluster/list)，单击目标集群名进入集群信息页面。
2. 在"连接信息"中单击kubectl后的"配置"按钮。
3. 参照页面中的提示信息，下载kubectl配置文件（公网地址变更后需重新下载）。
4. 使用[3]中下载的配置文件接入集群，详细步骤请继续参考[注册附着集群（公网接入）](https://support.huaweicloud.com/usermanual-ucs/ucs_01_0005.html)或[注册附着集群（私网接入）](https://support.huaweicloud.com/usermanual-ucs/ucs_01_0006.html)。
 
 #### 第三方云厂商集群
由于第三方云厂商集群提供的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"。                                                                                                                                                    | 二选一 说明： 当server字段为集群内访问地址时，优选跳过证书认证。    |
   | token                                                                                                                                                                                              | 字符串                                                | 用户以token方式进行认证，参数值为[4]中获取的token值。                                                                                                                                                                                                                   | 三选一 说明： 优选token方式，UCS不支持除这三种方式外的其他认证方式。 |
   | - client-certificate-data  - client-key-data   | base64加密字符串                                        | 用户以证书加私钥的方式进行认证。 - client-certificate-data：经base64加密后的客户端证书。  - client-key-data：经base64加密后的客户端私钥。   | 三选一 说明： 优选token方式，UCS不支持除这三种方式外的其他认证方式。 |
   | - username  - password                     | 字符串                                                | 用户通过用户名密码进行认证。 - username：访问集群的用户名。  - password：用户名对应的密码。                                     | 三选一 说明： 优选token方式，UCS不支持除这三种方式外的其他认证方式。 |
      
   
   
6. 使用[5]中配置的KubeConfig文件接入集群，详细步骤请继续参考[注册附着集群（公网接入）](https://support.huaweicloud.com/usermanual-ucs/ucs_01_0005.html)或[注册附着集群（私网接入）](https://support.huaweicloud.com/usermanual-ucs/ucs_01_0006.html)。
   
   ![](https://support.huaweicloud.com/usermanual-ucs/public_sys-resources/note_3.0-zh-cn.png)
   使用UCS期间，创建的ServiceAccount、ClusterRole、ClusterRoleBinding对象均不能删除，否则token将会失效。
   如集群不再接入UCS，可使用**kubectl delete -f ucs-service-account.yaml**命令删除UCS创建的SA对象。
   如修改集群kubeconfig.yaml文件的server地址为集群的apiserver地址后，集群接入到UCS无法打开，解决方案请参见[附着集群接入失败--排查集群kube-apiserver状态](https://support.huaweicloud.com/ucs_faq/ucs_faq_0010.html#section4)。
   
   
 
#### 伙伴云集群
您需要先下载kubectl以及配置文件，拷贝到您的客户端机器，完成配置后，即可以使用访问Kubernetes集群。
请到[Kubernetes版本发布页面](https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/README.md)下载与集群版本对应的或者更新的kubectl。
**安装和配置kubectl**
1. 登录[UCS控制台](https://console.huaweicloud.com/ucs/?#/aether/dashboard)，进入集群页面。
2. 在左侧导航栏中选择"资源管理 \> 集群管理"，单击待连接集群下的"命令行工具 \> kubectl"。
3. 在集群详情页中的"kubectl"页签下，请参照界面中的提示信息完成集群连接。 
   ![](https://support.huaweicloud.com/usermanual-ucs/public_sys-resources/note_3.0-zh-cn.png)
   - 您可以在"kubectl"页签下方便地下载kubectl配置文件（kubeconfig.json），IAM用户员下载的配置文件只有30天的有效期，而伙伴侧Kubernetes集群账号下载的配置文件会长期有效。该文件用于对接认证用户集群，请用户妥善保存该认证凭据，防止文件泄露后，集群有被攻击的风险。如果不幸泄露，可以通过证书更新的方式，替换认证凭据。
   
   - 由于EIP无法固定，所以服务器端证书无法预置EIP，若从互联网访问则无法开启客户端校验服务器端。如需开启客户端校验服务器端，请使用VPC访问方式。
    
   
   
 
#### 自建集群
如果您的集群是通过Kubernetes官方二进制文件或Kubeadm等部署工具搭建的标准集群，可直接使用以下方法获取KubeConfig文件。
该方法不适用于云服务商提供的商用集群，商用集群的KubeConfig文件获取请参考[第三方云厂商集群]。
1. 登录集群Master节点。
2. 查看集群访问凭证。默认情况下，自建集群的配置文件路径为Master节点的"$HOME/.kube/config"，如您的集群指定了其他KubeConfig配置文件，请自行更换路径。 
   **cat $HOME/.kube/config**
   
   
3. 复制该凭证内容。
4. 在本地创建一个YAML文件，将上一步中复制的凭证内容粘贴至该文件并保存。
5. 使用[4]中的YAML文件接入集群，详细步骤请继续参考[注册附着集群（公网接入）](https://support.huaweicloud.com/usermanual-ucs/ucs_01_0005.html)或[注册附着集群（私网接入）](https://support.huaweicloud.com/usermanual-ucs/ucs_01_0006.html)。
 
#### 本地集群
关于本地集群KubeConfig详情请参见[本地集群KubeConfig文件](https://support.huaweicloud.com/usermanual-ucs/ucs_01_0288.html)。
获取本地集群的KubeConfig需要使用ucs-ctl工具，获取步骤如下：
1. 使用ucs-ctl获取集群名称。 
   ```
   ./ucs-ctl get cluster
   ```
   ![](https://support.huaweicloud.com/usermanual-ucs/zh-cn_image_0000002063759424.png "点击放大")
   
   
2. 使用ucs-ctl导出指定集群的KubeConfig。 
   ```
   ./ucs-ctl get kubeconfig -c test-redhat86 -o kubeconfig
   ```
   ![](https://support.huaweicloud.com/usermanual-ucs/public_sys-resources/note_3.0-zh-cn.png)
   可以使用ucs-ctl get kubeconfig -h查看获取KubeConfig所使用到的参数。
   - -c, --cluster string：指定待导出KubeConfig的集群名。
   
   - -e, --eip string：指定API server的eip。
   
   - -o, --output string：指定KubeConfig导出文件名。
   
   - -p, --secretPath string：指定待导出KubeConfig的加密物料路径。
    
   
   
 
