现在很多公司项目在腾讯云上会有多个tke集群用来区分不同的环境,比如测试是一个集群,生产又是另外一个集群,很多时候我们会用到kubectl来操作集群,一般会在客户端配置集群的kubeconfig来访问集群。当我们的集群有多个时候,就需要合并多个集群kubeconfig,然后用context来切换不同集群。
现在tke集群都是用每个账号的uin生成对应的kubeconfig来通过rbac鉴权,也就说你不同集群,对应的kubeconfig的user和name是一致的,都是子账号的uin,那么这里合并kubeconfig的时候就会有有一个问题,当切换集群操作的时候会出现无法访问集群的apiserver。
下面我们通过操作来描述下这个问题现象,并说明下如何解决。
首先我们准备好2个集群的kubecofig文件,这里可以看出不同集群的kubecofig的user和name都是子账号的uin。
这里我们先单独验证下这2个kubeconfig是否有操作集群的权限。
上面测试get节点是没问题的。
下面我们来合并下2个tke集群的kubeconfig,合并后会生成$HOME/.kube/config
# KUBECONFIG=b3mg1p92.config:jmdg96ew.config kubectl config view --flatten > $HOME/.kube/config
我们测试下通过context来切换集群访问
从上面的结果可以发现,我们访问第一个集群是正常的,但是切到到第二个集群就报错了error: You must be logged in to the server (Unauthorized)
这个报错大概就是kubecofng的客户端证书权限问题,但是我们之前单独指定集群的kubeconfig是可以访问。这里的问题,大概就是因为user和name是相同的,导致config读取的证书有问题。
那么这里有这个问题,后续要怎么合并多个tke集群的kubecofig呢?其实方案很简答,我们只要修改下集群kubeconfig的user和name区分开来即可。
下面我们修改下jmdg96ew.config的user和name
我们在user和name的字段加上一个jmdg96ew后缀,然后我们重新合并下kubeconfig,在切换集群访问看看
经过测试,当kubeconfig的user和name不一致时,切换集群访问是正常的。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。