一、Kubeconfig详解及配置多集群¶
1.1 单集群配置kubeconfig¶
单集群配置kubeconfig
[root@k8s-master01 ~]# cat zq-kubeconfig.yaml
apiVersion: v1
kind: Config
clusters:
- name: default-cluster
cluster:
server: https://10.0.0.20:6443
certificate-authority-data: LS0t...
users:
- name: zq
user:
token: eyJh...
contexts:
- name: zq-context
context:
cluster: default-cluster
user: zq
namespace: default
current-context: zq-context
1.2 多集群配置kubeconfig¶
多集群配置kubeconfig
apiVersion: v1
kind: Config
# 集群列表(可定义多个集群)
clusters:
- name: default-cluster # 集群1名称(原集群)
cluster:
server: https://10.0.0.20:6443 # 集群1的 API 地址
certificate-authority-data: LS0t... # 集群1的 CA 证书
- name: cluster-2 # 集群2名称(新增集群)
cluster:
server: https://10.1.0.10:6443 # 集群2的 API 地址
certificate-authority-data: LS0t... # 集群2的 CA 证书(不同集群的 CA 不同!)
# 用户列表(可定义多用户,每个用户对应不同集群的认证)
users:
- name: zq # 用户1(原集群的 ServiceAccount)
user:
token: eyJhbGci... # 原集群的 Token
- name: admin-cluster2 # 用户2(集群2的用户,如 kubeconfig 或 ServiceAccount)
user:
token: eyJhbGci... # 集群2的 Token
# 上下文列表(定义集群、用户、命名空间的组合)
contexts:
- name: zq-context # 上下文1(原集群)
context:
cluster: default-cluster # 关联集群1
user: zq # 关联用户1
namespace: default # 默认命名空间
- name: cluster2-context # 上下文2(新增集群)
context:
cluster: cluster-2 # 关联集群2
user: admin-cluster2 # 关联用户2
namespace: kube-system # 集群2的默认命名空间
# 当前使用的上下文
current-context: zq-context # 默认使用原集群
1.3 切换到其他集群的三种方式¶
方式一:通过 kubectl config use-context 切换
# 查看所有上下文
kubectl config get-contexts
# 切换上下文到 cluster2-context
kubectl config use-context cluster2-context
# 验证当前集群
kubectl cluster-info
方式二:通过 --context 参数临时指定
# 不切换默认上下文,临时使用 cluster2-context
kubectl get pods --context=cluster2-context -n kube-system
方式三:直接修改 kubeconfig 文件
编辑 ~/.kube/config 或你的自定义配置文件,修改 current-context 字段:
[root@k8s-master01 ~]# vim zq-kubeconfig.yaml
...
...
# 手动修改为要切换的上下文名
current-context: cluster2-context
1.4 跨集群访问的两种典型场景¶
场景 1:B 集群配置已存在独立文件中
假设 B 集群的配置保存在 b-cluster-config.yaml,直接指定该文件
# 查看 B 集群的 Pod
kubectl get pods --kubeconfig=/path/to/b-cluster-config.yaml
# 操作 B 集群的 Deployment
kubectl get deploy -n kube-system --kubeconfig=/path/to/b-cluster-config.yaml
场景 2:多集群配置在同一个文件中
若已将 A 和 B 集群的配置合并到同一文件(如 ~/.kube/config),可通过 --context 指定 B 集群的上下文:
# 指定上下文(无需 --kubeconfig,默认使用 ~/.kube/config)
kubectl get nodes --context=b-cluster-context