「Kubernetes」- 配置 kubectl 访问多个集群

  CREATED BY JENKINSBOT

问题描述

我们需要使用 kubectl 命令管理多个 Kubernetes 集群,这需要使用 kubectl config Context 相关配置来实现。

该章节将记录:如何使用 kubectl 命令来管理多个 Kubernetes 集群,以及相关问题的处理方法。

解决方案

方法一、通过 TOKEN 管理

适用场景:在这种情况下,管理员负责管理集群,并分发 TOKEN 给我们,我们通过 TOKEN 管理集群。

操作分为四步,为了记忆能够这样理解:
1)添加 Cluster 信息;
2)添加访问 Cluster 所使用的 TOKEN 信息;
3)创建 Context 以将 TOKEN 与 Cluster 进行绑定(关联);
4)切换到 Context 以使用该 Context 来访问集群;

详细操作过程如下:

# kubectl config set-cluster "example-k8s-staging" --insecure-skip-tls-verify=true --server=https://k8scp-endpoint.example.xyz:6443

# kubectl config set-credentials "example-k8s-staging-admin-token" --token='eyJhbGciOiJSUzI1NiIsIm...'

# kubectl config set-context "example-k8s-staging-ctx" --cluster="example-k8s-staging" --user="example-k8s-staging-admin-token"

# kubectl config use-context "example-k8s-staging-ctx"

补充说明:
1)选项 –token 所使用的 token 参数应该向集群管理员索取(参考 Using RBAC Authorization 笔记,以了解创建 TOKEN 的方法)
2)–insecure-skip-tls-verify=true:鉴于我们集群是自签名证书,所以应该使用 –certificate-authority 指定 CA 信息,但我们使用该选项偷懒;

方法二、合并 .kube/config 文件

我们本就是集群管理员,我们部署多套 Kubernetes 集群,所以有多个集群的 .kube/config 配置文件。所以,我们希望合并这些配置文件。

第一步:被合并的多个 config 文件的 name: 字段不能相同,否则仅能保留其中某个配置。我们使用如下脚本进行修改:

sed -i -E 's/kubernetes-admin/kubernetes-admin-foo/' config-foo
sed -i -E 's/kubernetes$/kubernetes-foo/' config-foo

直接使用 kubectl 命令:

KUBECONFIG=~/.kube/config:/path/to/config-foo kubectl config view --flatten > .kube/config-merged

我们也能够使用 kubectl konfig merge 命令:
1)安装 krew 插件,参考 krew 笔记;
2)安装 konfig 插件:kubectl krew install config
3)导入:kubectl konfig import -s new.yaml
4)或者,合并:kubectl konfig merge ./config1 ./config2

方法三、使用 –kubeconfig 选项

kubectl get pods --kubeconfig=file1

参考文献

Configure Access to Multiple Clusters | Kubernetes
ssl – kubectl unable to connect to server: x509: certificate signed by unknown authority – Stack Overflow
kubernetes – How to merge kubectl config file with ~/.kube/config? – Stack Overflow
Mastering the KUBECONFIG file