多集群管理

在实际生产环境中,往往需要维护多个k8s集群,如何实现在一台机器上操作多个集群。通过设置kubeconfig文件来实现。

合并多个kubeconfig文件

方案1:kubectl config命令

假设存在两套集群,集群1:master1/node1、集群2:master2/node2。现在在master1上配置访问master2的集群

查看两个集群

kubectl config view
#或者直接查看config文件
cat /root/.kube/config

在集群1上添加集群2的信息

#添加cluster,在集群1上
kubectl config set-cluster k8smaster2 --server=https://192.168.40.185:6443 --insecure-skip-tls-verify=true

#添加user
##集群2上获取token
kubeadm token create --print-join-command
##集群1上设置token
kubectl config set-credentials k8smaster2-user --token=xxx

#添加context,集群1上
kubectl config set-context k8smaster2-context --cluster=k8smaster2  --user=k8smaster2-user

#可以在集群1上通过切换context来操作
kubectl config use-context k8smaster2-context

方案2:KUBECONFIG 环境变量指向多个文件

通过在 KUBECONFIG 环境变量中指定多个文件,可以临时将 KUBECONFIG 文件组合在一起,并在 kubectl中使用。如下,那么kubeconfig 是在内存中做的合并:

export KUBECONFIG=~/.kube/config:~/another-config-file-location

方案3:flatten

export KUBECONFIG=~/.kube/config:~/anotherconfig
kubectl config view --flatten

--flatten:将生成的 kubeconfig 文件扁平化为自包含的输出(用于创建可移植的kubeconfig 文件)

如果需要,还可以管道输出到另外一个新文件。

方案3:kubectl插件kconfig

kubectl 有个 krew 插件包管理器,可以通过 krew 安装 konfig 实用插件来管理 kubeconfig。

安装:

kubectl krew install konfig

krew插件 konfig 可以帮助你管理 ~/.kube/config,使用 konfig 插件的语法如下:

kubectl konfig import -s new.yaml

OIDC 认证:kubelogin

来源:K8S工具推荐:告别复杂认证!Kubernetes登录神器kubelogin指南

传统 kubeconfig 使用静态证书或长期 token,存在密钥泄露风险。kubelogin 是基于 OpenID Connect(OIDC)的 kubectl 插件,实现浏览器一键登录 + 短期令牌自动刷新。

  • 官方仓库:https://github.com/int128/kubelogin

核心特性

特性 说明
浏览器一键登录 运行 kubectl 命令时自动弹出浏览器完成 OIDC 认证(支持 Google / Azure AD 等)
短期令牌 默认 1 小时有效期的 ID Token,替代长期静态凭证
自动刷新 通过 Refresh Token 自动续期,无需手动重新认证
加密存储 令牌存储在系统钥匙串中(macOS Keychain / Windows Credential Manager)
无缝集成 作为 kubectl 插件运行,不改变现有 kubectl 工作流

安装

# macOS
brew install kubelogin

# Windows
choco install kubelogin

# krew 插件方式
kubectl krew install oidc-login

kubeconfig 配置

在 kubeconfig 的 users 段使用 exec 模式调用 kubelogin:

users:
- name: oidc
  user:
    exec:
      apiVersion: client.authentication.k8s.io/v1
      command: kubectl
      args:
        - oidc-login
        - get-token
        - --oidc-issuer-url=ISSUER_URL
        - --oidc-client-id=YOUR_CLIENT_ID

配置完成后,正常执行 kubectl get pods 等命令时会自动触发浏览器认证流程。

适用场景

  • 企业 SSO 集成:接入公司统一身份认证(Azure AD、Okta、Keycloak 等)
  • 多团队共享集群:每个用户用自己的身份登录,便于审计和权限控制
  • 合规审计要求:所有操作都关联到具体用户身份,满足安全合规
  • 开发测试环境快速切换:浏览器登录比手动管理证书/token 更高效

调试

添加 -v1 参数查看详细认证日志:kubectl oidc-login get-token -v1