TKE集群开启RBAC控制后如何获取集群token

2021-11-16 14:09:54 浏览数 (1)

最近TKE集群的RBAC对象级权限控制功能已经全量上线了,新的RBAC模式下kubeconfig不再提供集群的token,都是通过证书进行认证,具体变化和使用可以参考文档https://cloud.tencent.com/document/product/457/46104,但是今天的重点不是RBAC的介绍和使用。

我们很多时候我们还是会需要用到集群的token,比如jekins的kubernetes插件就需要用到集群的token进行认证,那么现在集群不像以前提供admin用户token怎么办呢,难道就不能快乐玩耍jenkins了?其实我们还是有其他方法来解决这个问题。

我们仔细想想为啥jenkins要用集群的admin这个user的token才能认证成功,说白了就是admin的权限足够大,能够对集群执行所有操作。既然admin远离我们了,那我们就创建一个新的admin来为我们提供服务。今天我们来说说如何创建一个serviceAccount用来进行jenkins的k8s插件认证。

1. 创建serviceAccount

代码语言:javascript复制
kubectl create sa tke-admin

2. 为serviceAccount绑定集群角色

我们新版的rbac权限控制有4个如下预设角色,既然我们的新的admin需要足够的权限,那就给他管理员权限。

  • 管理员(tke:admin):对所有命名空间下资源的读写权限,具备集群节点、存储卷、命名空间、配额的读写权限,可配置子账号的读写权限。
  • 运维人员(tke:ops):对所有命名空间下控制台可见资源的读写权限,具备集群节点、存储卷、命名空间、配额的读写权限。
  • 开发人员(tke:dev):对所有命名空间下控制台可见资源的读写权限。
  • 受限人员(tke:ro):对所有命名空间下控制台可见资源的只读权限。
代码语言:javascript复制
kubectl create clusterrolebinding tke-admin-binding --clusterrole=tke:admin --serviceaccount=default:tke-admin

3.获取serviceAccount对应的token

新的admin用户已经创建好了,下面我们来获取下这个账号的token用于jenkins里面认证

代码语言:javascript复制
[root@VM-0-13-centos ~]# kubectl get sa tke-admin -o=jsonpath='{.secrets[0].name}'
tke-admin-token-hwqw2
[root@VM-0-13-centos ~]# kubectl get secret tke-admin-token-hwqw2 -o=jsonpath='{.data.token}' | base64 -d    
eyJhbGciOiJSUzI1NiIsImtpZCI6ImphQ0RWTFBlNTJ0aXNDSUNkTUJzdHBlbTBLSFVGTmd0UF9JWGMwOFNqM2Mi

通过上命令获取sa的token,然后进行base64解密就是你可以使用的token了(注意防止token泄露,上面token已进行删减)

4.jenkins中进行认证

现在我们集群的token有了,那么可以到jenkisn进行认证了,看看能不能用这个token来连接tke集群

首先需要在jenkisn中安装Kubernetes plugin

插件安装好之后,可以在系统配置中,拉到最下面找到cloud配置进行k8s配置

点击配置集群,需要进行如下配置

Kubernetes 地址 :tke集群的公网访问地址,可以在集群基本信息中获取

在Kubernetes 服务证书 key中配置集群的ca证书,这个随便登录一个节点,执行命令获取

代码语言:javascript复制
[root@VM-0-3-centos ~]# sudo cat /etc/kubernetes/cluster-ca.crt 
-----BEGIN CERTIFICATE-----
MIICyDCCAbCgAwIBAgIBADANBgkqhkiG9w0BAQsFADAVMRMwEQYDVQQDEwprdWJl
cm5ldGVzMB4XDTIwMTExOTAzNDQxMVoXDTMwMTExNzAzNDQxMVowFTETMBEGA1UE
AxMKa3ViZXJuZXRlczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbN
0nC5jmQdCvC1waT0avcMPmg29AXlOwRcWJgPWktzu2J3ZhYgDWZQlRMUH1Vl9nNm
iH617/3TPzVmzGGIATgeaq9iyG4PqKXLZf2SnR5LJj3wlrD1q9GjT ZkNhVsD6fo
9ZUNk2mXVg/f53E9rSfCeGPoNxkyebOkwBYeRZ7ttUhc HlF6ruMiG3OMM xeZg7
FACtiWj3JajFLFhaCTjxW6i3RCm9vG0qPDTT1z AkAULl3u3uKmFoM2ROv2I317o
WtalEKrlXR9qqxEDzjOk5MbF252/mUi4OAxsXh9O8e5JDh/EZz0k7n3vDld2cIL5
fBPe9elH54vucruPdn8CAwEAAaMjMCEwDgYDVR0PAQH/BAQDAgKUMA8GA1UdEwEB
/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAJjrX5eYokUlJmlwknYKtmvHcKUF
pHvcbARaOOX43qcUPokd/L0TzIFOZ/ZT4zx1s/yCpvYZL9mhd5B7n7s0LbrB4etS
YwnfoFWoj7gwuKDIPNXZE4NG6IOWQs1NiwM4/UyKF5gA4yJ6eWmuO43sZC0=
-----END CERTIFICATE-----

凭据:这个把上面获取的token配置成一个凭证即可,类型选择secret text,secret填入token,id填写凭证名称

最终完整配置如下,配置完之后,点击连接测试,如果出现 Connected to Kubernetes XXXXXX 则表示连接集群成功 。

0 人点赞