一、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