# 通过KooCLI+kubectl连接集群
CCE现已在华为云命令行工具服务（Koo Command Line Interface，KooCLI）中集成了[凭据插件](https://kubernetes.io/zh-cn/docs/reference/access-authn-authz/authentication/#client-go-credential-plugins)，kubectl可通过执行凭据插件获得用户的IAM凭据来访问集群。该种方式避免了在本地保存用户静态证书，并且支持审计精准追溯至具体操作用户。
#### 前提条件
- CCE集群版本在v1.29.15-r80、v1.30.14-r80、v1.31.14-r40、v1.32.13-r10、v1.33.10-r10、v1.34.6-r10、v1.35.3-r10、v1.36.1-r0及以上。
- 当您使用内网访问时，请确保客户端与待访问集群在同一VPC内。
- 当您使用公网访问时，请确保待访问集群已绑定公网地址。关于集群绑定公网地址的具体步骤，请参见[为API Server绑定EIP](https://support.huaweicloud.com/usermanual-cce/cce_10_0864.html#cce_10_0864__section128889371044)。
  ![](https://support.huaweicloud.com/usermanual-cce/public_sys-resources/note_3.0-zh-cn.png)
  - 通过绑定EIP实现公网访问，集群存在风险，建议绑定的EIP配置DDoS高防服务或[配置API Server访问策略](https://support.huaweicloud.com/usermanual-cce/cce_10_0864.html#cce_10_0864__section1953155515411)。
  
  - 绑定EIP将会短暂重启集群API Server并更新kubeconfig证书，请避免在此期间操作集群。
    
 
#### 约束与限制
IAM联邦用户不支持使用本文描述的方式访问集群。
#### 操作步骤
#### 步骤一：下载kubectl
使用kubectl连接集群时，您需要先在客户端中安装kubectl。您可执行**kubectl version** 命令判断是否已安装kubectl，如果已经安装kubectl，则跳过此步骤。本文以Linux环境为例安装和配置kubectl命令行工具，详情请参考[安装kubectl](https://kubernetes.io/zh-cn/docs/tasks/tools/#kubectl)。
1. 登录到您的客户端计算机，执行以下命令，下载kubectl工具。其中，*v1.35.0* 为指定的版本号，请根据集群版本进行替换。
   
   ```
   cd /home
   curl -LO https://dl.k8s.io/release/v1.35.0/bin/linux/amd64/kubectl
   ```
   
   
2. 执行以下命令，安装kubectl。 
   ```
   chmod +x kubectl
   mv -f kubectl /usr/local/bin
   ```
   
   
3. 执行以下命令，检查kubectl是否安装成功。 
   ```
   kubectl version
   ```
   回显结果如下，则说明kubectl安装成功。
   ```
   Client Version: xxx
   Kustomize Version: xxx
   Server Version: xxx
   ```
   
   
 
#### 步骤二：安装KooCLI
您可执行**hcloud version** 命令判断是否已经安装KooCLI，如果已安装KooCLI且版本在**7.2.12**及以上，则跳过此步骤。如果已安装KooCLI但版本不满足要求，则需重新安装。
安装KooCLI的步骤请参考文档[快速安装](https://support.huaweicloud.com/qs-hcli/hcli_02_003.html)。
#### 步骤三：配置KooCLI
KooCLI支持多种配置方式，本文以常见的2种方式为例介绍如何配置KooCLI工具，更多配置方式请参考[KooCLI文档](https://support.huaweicloud.com/qs-hcli/hcli_02_004.html)。
**方式一：使用永久AK/SK配置（适用于大部分用户）**
执行以下命令进行配置：
```
hcloud configure set --cli-profile=${profileName} --cli-region=${region} --cli-mode=AKSK --cli-access-key=${AK} --cli-secret-key=${SK}
```
查看是否配置成功
```
hcloud configure show --cli-profile=${profileName}
```
其中*${profileName}* 为用户自定义的KooCLI配置名，*${region}* 为局点ID，*${AK}* 为访问密钥（永久AK/SK）中的访问密钥ID，*${SK}*为访问密钥（永久AK/SK）中的密码访问密钥。
**方式二：使用SSO登录配置（适用于IAM身份中心用户）**
执行以下命令进行配置：
```
# 第一步
hcloud configure set --cli-mode=SSO --cli-profile=${profileName} --cli-sso-start-url=${sso_start_url} --cli-sso-region=${region} --cli-region=${region}
# 第二步
hcloud configure sso --cli-profile=${profileName}
```
其中*${profileName}* 为用户自定义的KooCLI配置名，*${region}* 为局点ID，*${sso_start_url}* 为IAM身份中心用户门户URL，可参考[文档](https://support.huaweicloud.com/qs-identitycenter/iic_02_0006.html)获取。
**hcloud configure sso**是交互式命令，参考其提示完成SSO登录。
![](https://support.huaweicloud.com/usermanual-cce/public_sys-resources/note_3.0-zh-cn.png)
KooCLI会将配置信息保存在本地，对于认证凭据（如AK/SK）等敏感信息会进行加密存储。
#### 步骤四：使用KooCLI生成kubeconfig
1. 执行以下命令查看当前用户下的集群。 
   ```
   hcloud cce list-cluster
   ```
   执行成功回显如下：
   ```
   UID                                      NAME                                     VERSION         STATUS          ACCESS              
   ----------------------------------------------------------------------------------------------------------------------------------
   9e07d2cf-02db-11ef-acea-0255ac100b08     cce-cluster-1                            v1.28           Unavailable     Internal                     
   6a533499-e9e8-11f0-b1d8-0255ac1001b8     cce-cluster-2                            v1.33           Available       Internal/External
   ```
   
   
2. 选择目标集群，执行以下命令生成kubeconfig。 
   ```
   # 内网访问
   hcloud cce update-kubeconfig --cluster-id=${clusterID}
   # 公网访问(仅集群绑定了公网地址的情况下支持公网访问)
   hcloud cce update-kubeconfig --cluster-id=${clusterID} --external=true
   ```
   其中，*$(clusterID)*为集群的UID。生成成功回显如下：
   ```
   Successfully generated/updated kubeconfig at: /root/.kube/config 
   Context: ***** 
   Cluster: *****
   ```
   **hcloud cce update-kubeconfig** 支持多种可配参数如下表所示，您也可通过**hcloud cce update-kubeconfig --help**命令查看。
   
   | 参数                   | 说明                                                 |
   |:---|:---|
   | --output            | 生成的kubeconfig文件保存位置，默认为\~/.kube/config             |
   | --external        | 是否通过公网访问集群，默认为false                                 |
   | --external-tls-verify | 通过公网访问集群时是否开启双向认证，默认为false                          |
   | --ak               | Access Key ID，默认从KooCLI的配置里获取                       |
   | --sk                | Secret Access Key，默认从KooCLI的配置里获取                     |
   | --security-token      | Security token，默认从KooCLI的配置里获取                      |
   | --region             | 局点ID，默认从KooCLI的配置里获取                               |
   | --project-id         | 项目ID，默认从KooCLI的配置里获取                                 |
   | --user-name         | 生成kubeconfig中的username，默认为{cluster-name}-user       |
   | --context-name       | 生成kubeconfig中的contextname，默认为{cluster-name}-context |
   | --cce-endpoint      | CCE服务的访问域名，默认为https://cce.{region}.myhuaweicloud.com |
      
   
   
3. 执行以下命令，检查能否通过kubectl连接集群。 
   ```
   kubectl cluster-info
   ```
   若回显结果如下，则说明能够通过kubectl连接集群。
   ```
   Kubernetes control plane is running at https://xx.xx.xx.xx:5443 CoreDNS is running at https://xx.xx.xx.xx:5443/api/v1/namespaces/kube-system/services/coredns:dns/proxy 
   To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
   ```
   ![](https://support.huaweicloud.com/usermanual-cce/public_sys-resources/note_3.0-zh-cn.png)
   - 使用kubectl+凭据插件访问集群时，拥有的Kubernetes权限与CCE控制台上IAM用户所拥有的权限一致。
   
   - 如果Linux系统里面配置了KUBECONFIG环境变量，kubectl会优先加载KUBECONFIG环境变量，而不是$home/.kube/config，使用时请注意。
   
   - 当您使用公网访问时，默认不开启域名双向认证，如需开启，可在使用update-kubeconfig时设置external-tls-verify=true 参数。
    
   
   
 
#### 相关文档
- 为用户[配置命名空间权限（Kubernetes RBAC授权）](https://support.huaweicloud.com/usermanual-cce/cce_10_0189.html)。
 
