如何通过SSH隧道连接多台私有K8s集群实现kubectl上下文切换
该需求完全可以通过原生SSH实现,无需额外依赖,操作步骤如下:
实现方案(原生SSH隧道方式)
SSH支持同时配置多个本地端口转发规则,只需将三个K8s集群的6443端口分别映射到本地不同端口,再配置kubectl多上下文即可实现一键切换。
步骤1:创建多端口映射的SSH隧道
执行以下命令一次性打通三个集群的端口映射:
ssh -i /root/.ssh/id_rsa -4 -fNT \ -L 6443:192.168.220.3:6443 \ -L 6444:192.168.220.4:6443 \ -L 6445:192.168.220.5:6443 \ user@1.2.3.4
参数说明:
- 多个
-L参数对应多个端口转发规则,本地分别用6443、6444、6445端口对应三个K8s集群的6443端口 -fNT表示SSH后台运行、不执行远程命令,仅做端口转发
步骤2:配置kubectl多集群上下文
提前准备好三个集群的CA证书、用户凭证,依次执行以下命令配置kubectl:
添加集群信息
- 添加k8s-c3集群:
kubectl config set-cluster k8s-c3 --server=https://127.0.0.1:6443 --certificate-authority=/path/to/c3-ca.crt - 添加k8s-c4集群:
kubectl config set-cluster k8s-c4 --server=https://127.0.0.1:6444 --certificate-authority=/path/to/c4-ca.crt - 添加k8s-c5集群:
kubectl config set-cluster k8s-c5 --server=https://127.0.0.1:6445 --certificate-authority=/path/to/c5-ca.crt
如果出现证书校验失败,测试环境可添加--insecure-skip-tls-verify参数跳过校验,生产环境不建议使用
添加用户凭证
- 配置k8s-c3用户:
kubectl config set-credentials admin-c3 --client-certificate=/path/to/c3-admin.crt --client-key=/path/to/c3-admin.key - 配置k8s-c4用户:
kubectl config set-credentials admin-c4 --client-certificate=/path/to/c4-admin.crt --client-key=/path/to/c4-admin.key - 配置k8s-c5用户:
kubectl config set-credentials admin-c5 --client-certificate=/path/to/c5-admin.crt --client-key=/path/to/c5-admin.key
绑定上下文
kubectl config set-context k8s-c3 --cluster=k8s-c3 --user=admin-c3kubectl config set-context k8s-c4 --cluster=k8s-c4 --user=admin-c4kubectl config set-context k8s-c5 --cluster=k8s-c5 --user=admin-c5
步骤3:验证集群切换效果
执行对应命令即可直接切换集群:
- 切换到k8s-c3:
kubectl config use-context k8s-c3 - 切换到k8s-c4:
kubectl config use-context k8s-c4 - 切换到k8s-c5:
kubectl config use-context k8s-c5
切换后执行kubectl get nodes即可查看对应集群的节点信息。
简化配置(SSH配置持久化)
可以将隧道规则写入本地~/.ssh/config文件,避免每次执行长命令:
Host k8s-bastion HostName 1.2.3.4 User user IdentityFile /root/.ssh/id_rsa LocalForward 6443 192.168.220.3:6443 LocalForward 6444 192.168.220.4:6443 LocalForward 6445 192.168.220.5:6443 ExitOnForwardFailure yes ServerAliveInterval 60
后续启动隧道只需执行:ssh -fNT k8s-bastion
替代方案(SSH不满足需求时可选)
- 跳板机部署kubectl、kubectx工具,直接在跳板机上完成多集群切换操作,无需本地存储多集群凭证
- 部署VPN打通本地网络与K8s集群私有网络,本地可直接访问三个集群的内网IP,无需端口映射
- 部署Kubernetes集群联邦组件,实现多集群统一管控,适合长期多集群运维场景
内容的提问来源于stack exchange,提问作者Ali Nahid
相关产品推荐
相关产品推荐

