欢迎访问我的博客,你的支持,是我最大的动力!

client-go使用token访问集群资源

Linux 小马奔腾 376℃ 评论

在kubernetes相关云原生程序的开发过程中,离不开的工具就是 client-go 这个库。目前,集群权限认证基本有两种方式,一是使用 kubeconfig 文件进行认证,另一个就是把服务运行到集群内,使用 InClusterConfig 进行认证(即 serviceaccount 拥有的集群权限),但是在实际的开发过程中,这两种方式都不够灵活。比如,需要对多个集群进行控制时,如果使用kubeconfig文件的方式,就必须指定配置文件,而InCluster只能对当前集群起作用,多个集群,势必需要在每个集群都运行一个程序

分析 InClusterConfig 函数,可以看到,实际上只需要构造一个 *rest.Config 结构体,然后返回,就可以了

那么, 这个Config中那些字段是必须的呢?

  • Host 用于提供需要访问的集群地址
  • Token 用于提供授权
  • TLSClientConfig 提供tls安全访问层的数据
    如果不考虑数据传输的安全性,可直接设置 Insecure 为 true ,此时不需要对证书进行验证,当然不建议这么做,如果要使用证书,在CAData 中放ca证书就可以了。

利用serviceaccount进行多集群访问示例:

上面的示例中,集群的配置信息直接硬编码,在实际的应用中,这部分的数据可以从配置中心、配置文件中获取

以上配置和下面直接使用curl访问的方式类似

 

# 获取服务器地址及端口
APISERVER=$(kubectl config view | grep server | cut -f 2- -d ":" | tr -d " ")
# tr -d '\t' 可能会失败 可能是空格
# TOKEN=$(kubectl describe secret $(kubectl get secrets | grep default | cut -f1 -d ' ') | grep -E '^token' | cut -f2 -d':' | tr -d '\t')
TOKEN=$(kubectl describe secret $(kubectl get secrets | grep default | cut -f1 -d ' ') | grep -E '^token' | cut -f2 -d':' | tr -d ' ')
curl $APISERVER/api/v1/namespaces/default/pods/nginx-xxxx-xxxxxxxx --header "Authorization: Bearer $TOKEN" --insecure

 

因为集群通常为rbac认证,如果没有相应的权限,则不能访问对应的资源,所以还需要serviceaccount赋予对应的权限

serviceaccount授权示例:

 

 

 

 

转载请注明:轻风博客 » client-go使用token访问集群资源

喜欢 (41)or分享 (0)