通过KooCLI+kubectl连接集群
CCE现已在华为云命令行工具服务(Koo Command Line Interface,KooCLI)中集成了凭据插件,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。
- 通过绑定EIP实现公网访问,集群存在风险,建议绑定的EIP配置DDoS高防服务或配置API Server访问策略。
- 绑定EIP将会短暂重启集群API Server并更新kubeconfig证书,请避免在此期间操作集群。
约束与限制
IAM联邦用户不支持使用本文描述的方式访问集群。
操作步骤
步骤一:下载kubectl
使用kubectl连接集群时,您需要先在客户端中安装kubectl。您可执行kubectl version命令判断是否已安装kubectl,如果已经安装kubectl,则跳过此步骤。本文以Linux环境为例安装和配置kubectl命令行工具,详情请参考安装kubectl。
- 登录到您的客户端计算机,执行以下命令,下载kubectl工具。其中,v1.35.0为指定的版本号,请根据集群版本进行替换。
cd /home curl -LO https://dl.k8s.io/release/v1.35.0/bin/linux/amd64/kubectl - 执行以下命令,安装kubectl。
chmod +x kubectl mv -f kubectl /usr/local/bin
- 执行以下命令,检查kubectl是否安装成功。
kubectl version
回显结果如下,则说明kubectl安装成功。
Client Version: xxx Kustomize Version: xxx Server Version: xxx
步骤二:安装KooCLI
您可执行hcloud version命令判断是否已经安装KooCLI,如果已安装KooCLI且版本在7.2.12及以上,则跳过此步骤。如果已安装KooCLI但版本不满足要求,则需重新安装。
安装KooCLI的步骤请参考文档快速安装。
步骤三:配置KooCLI
KooCLI支持多种配置方式,本文以常见的2种方式为例介绍如何配置KooCLI工具,更多配置方式请参考KooCLI文档。
方式一:使用永久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,可参考文档获取。
hcloud configure sso是交互式命令,参考其提示完成SSO登录。
KooCLI会将配置信息保存在本地,对于认证凭据(如AK/SK)等敏感信息会进行加密存储。
步骤四:使用KooCLI生成kubeconfig
- 执行以下命令查看当前用户下的集群。
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
- 选择目标集群,执行以下命令生成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
- 执行以下命令,检查能否通过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'.
- 使用kubectl+凭据插件访问集群时,拥有的Kubernetes权限与CCE控制台上IAM用户所拥有的权限一致。
- 如果Linux系统里面配置了KUBECONFIG环境变量,kubectl会优先加载KUBECONFIG环境变量,而不是$home/.kube/config,使用时请注意。
- 当您使用公网访问时,默认不开启域名双向认证,如需开启,可在使用update-kubeconfig时设置external-tls-verify=true 参数。