使用k8s的过程中我们会经常访问集群的api接口,但是通常k8s的apiserver都是用https认证,当我们想直接访问api接口的时候都是需要进行认证的,这个在tke集群中同样也是如此,那么当我们需要在代码或者用curl请求去访问tke集群的api接口该怎么办呢?下面我们讲讲通过客户端证书或者集群token来访问tke集群的api接口。
既然我们想用客户端证书去访问api,那么证书该从哪里来呢?其实tke集群的kubeconfig都是通过证书进行认证的,每一个用户都有自己的kubeconfig,里面有客户端的证书用来和apiserver进行鉴权认证的,所以我们可以直接从kubeconfig中提取所需要的客户端证书。
进入到kubelet的kubeconfig目录下
cd /etc/kubernetes
依次执行以下命令,分别从 kubeconfig 文件中获取 cert、key 和 apiserver 信息
cat ./kubelet-kubeconfig |grep client-certificate-data | awk -F ' ' '{print $2}' |base64 -d > client-cert.pem
cat ./kubelet-kubeconfig |grep client-key-data | awk -F ' ' '{print $2}' |base64 -d > client-key.pem
APISERVER=`cat ./kubelet-kubeconfig |grep server | awk -F ' ' '{print $2}'`
然后执行cur命令访问apiserver
curl --cert client-cert.pem --key client-key.pem -k $APISERVER/api/
获取集群中所有namespace
curl --cert client-cert.pem --key client-key.pem -k $APISERVER/api/v1/namespaces
这里就不一一举例,其他接口的访问,可以参考官方文档https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.21/ 。
执行curl命令访问的时候会出现下面报错
因为这里发起curl请求的是匿名用户,匿名用户一般在集群的权限是不够的,所以这里需要通过rbac给匿名用户绑定下clusterrole,这里我们给绑定下集群的管理员角色tke:admin,然后访问就没问题了
kubectl create clusterrolebinding cluster-system-anonymous --clusterrole=tke:admin --user=system:anonymous
大家都知道tke集群开启了rbac后,每个账号都是通过证书和apiserver进行认证,不再提供token,但是我们这里如果需要用到token还是可以获取的,具体获取方式参考文档https://cloud.tencent.com/developer/article/1762567 ,根据文档获取到集群token后,apiserver的地址可以根据上面APISERVER获取方式获取,token和apiserver地址都获取了,然后就可以访问api了。注意,为了避免token被泄露,下面token都是被修改的。
获取集群api接口
curl -k -H "Authorization: Bearer eyJhbGciOiJSUzI1NiIsIZXQubmFtZSI6InRrZS1hZG1pbi10b2tlbi1od3F3MiIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJ0a2UtYWRtaW4iLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiJiMTJhYzU0Yi02N2I1LTQymYiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6ZGVmYXVsdDp0a2UtYWRtaW4ifQ.cVvAALd2ARAFwm5eMmrIxu2mbMB8fcvKiDlKO05-oYwBiKxagBJnZN2TQsANRkGzdMUp0IaZrZXpvvt4R48Fe5qxIzNkF7tvi0ZOQ4cY75jS7ZcpIVqRhUHGcRh8DOemWGa940UAF_k5CWX1Xf4y_odAEM-rW5IIsLesWXfdoBkf5PHfnD_XKGHBTZ0Io0OKC_cRNDQrxCYCRglcXNojCksHFec1bQVmUQpeVlkH8iAtvvpUHknM9W5KpwCeYmMgre0fVmy8v1wzLOSFrKWIBTJ_VZRoc7qMKFVRpszzoDtjfehLcJ-uualdCaXe0utsB2w9Sk15jnZtEyCb3qveZQ" https://cls-xxxxxx.ccs.tencent-cloud.com
获取集群的namespace
curl -k -H "Authorization: Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6ImphQ0RWTFBlNTJ0aXNDSUNkTUJzdHBlbTBLSFVGTmd0UF9JWGMwOFNqM2MifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhYNvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2Uiy9zZXJ2aWNlYWNjb3VudC9zZWNyZXQubmFtZSI6InRrZS1hZG1pbi10b2tlbi1od3F3MiIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJ0a2UtYWRtaW4iLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiJiMTJhYzU0Yi02N2I1LTQyNjktOTc3MC0xMGE5MTIzNDhhZmYiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6ZGVmY2mbMB8fcvKiDlKO05-oYwBiKxagBJnZN2TQsANRkGzdMUp0IaZrZXpvvt4R48Fe5qxIzNkF7tvi0ZOQ4cY75jS7ZcpIVqRhUHGcRh8DOemWGa940UAF_k5CWX1Xf4y_odAEM-rW5IIsLesWXfdoBkf5PHfnD_XKGHBTZ0Io0OKC_cRNDQrxCYCRglcXNojCksHFec1bQVmUQpeVlkH8iAtvvpUHknM9W5KpwCeYmMgre0fVmy8v1wzLOSFrKWIBTJ_VZRoc7qMKFVRpszzoDtjfehLcJ-uualdCaXe0utsB2w9Sk15jnZtEyCb3qveZQ" https://cls-xxxx.ccs.tencent-cloud.com//api/v1/namespaces
这里就不一一举例,其他接口的访问,可以参考官方文档https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.21/
这里我们也可以用postman去访问,填写token和apiserver的地址,然后发起请求即可。
1.WiFi对人体有伤害么?不清楚,反正没有WiFi我就浑身不舒服。 2.别人吃两口就...
【51CTO.com快译】企业领导者需要了解数据分析的行业趋势,以预测客户需求、提供...
如何启动程序 双击(windows系统下),或者在shell终端上执行./a.out 在shell终端...
在可视化工作中,我们通常会根据数据的维度分类来制作图表,比如用户性别、年龄...
组织中围绕开源工作的努力是否转化为了个人或团队的成果?如果没有,需要考虑改进...
事先说明: 此篇文章重在介绍:操前准备,实际操作会在下篇介绍. 里面用的游戏开发...
作者 | 甄子 来源 | 阿里技术公众号 一 概念1 什么是低代码/无代码开发?业界对...
直播主题 Tair(Redis)行业场景深度刨析-轻松构建全球多活的Session系统 直播时间...
堆排序基本介绍 堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种...
往期分享RDS MySQL RDS MySQL 实例空间问题 RDS MySQL 内存使用问题 RDS MySQL ...