用于 kubectl 的 ssh 隧道到多个 k8s 集群

Posted

技术标签:

【中文标题】用于 kubectl 的 ssh 隧道到多个 k8s 集群【英文标题】:ssh tunnel to multiple k8s clusters for kubectl 【发布时间】:2021-10-24 06:18:10 【问题描述】:

我在专用网络中有多个 k8s 集群,我只能通过 jumpbox/bastion 主机访问这些集群。

例如下面是我的 k8s 集群:

k8s-c3 端点 ip 192.168.220.3

k8s-c4 端点 ip 192.168.220.4

k8s-c5 端点 ip 192.168.220.5

我能够做的是: 一次创建一个到 1 个端点的 ssh 隧道,例如:ssh -i /root/.ssh/id_rsa -4 -fNT -L 6443:192.168.220.3:6443 user@1.2.3.4 并在我的本地机器上使用 kubectl 命令。

我想做的是: 为上面提到的所有 3 个目的地的端口 6443 创建一个到我的堡垒主机的 ssh 隧道,并使用 kubectl config use-context 从我的本地计算机切换并连接到不同的集群。

这可能吗?如果有怎么办? 如果无法使用 ssh 我还有什么其他选择?非常感谢示例代码示例。

谢谢

【问题讨论】:

【参考方案1】:

ssh 隧道允许在同一命令中打开多个隧道到多台机器。 这里的问题是您必须使用不同的端口,并在 kubectl 配置文件中更改您正在隧道的端口。

该命令将有多个-L

-L 6443:192.168.220.3:6443 -L 6444:192.168.220.4:6443 -L 6445:192.168.220.5:6443

并且.kube/config 文件中的每个cluster 条目都应具有具有正确端口(6443、6444 或 6445)的服务器。

很抱歉,我现在无法对此进行测试,但理论上我会这样做。

【讨论】:

谢谢。您能否提供更多关于 kubectl 如何了解 6444、6445 的详细信息,例如:> kubectl 的配置文件? kubectl 默认映射到 6443。 是的,正确的是 Kubernetes 服务器将从 6443 开始,但如果您通过 ssh 隧道连接,那么您也在通过隧道连接端口。使用-L 6444:192.168.220.4:6443,您从您的local:6444 指向-> k8s-4:6443 所以在您的本地~/.kube/config 上,服务器应该类似于server: http://localhost:6444

以上是关于用于 kubectl 的 ssh 隧道到多个 k8s 集群的主要内容,如果未能解决你的问题,请参考以下文章

kubectl管理多个k8s集群

用于设置临时 SSH 隧道的 Bash 脚本

用于 sftp 或 GUI 的 ssh 隧道

技术漫谈 | 远程访问和控制云端K8S服务器的方法

具有相同区域的多个 SSH TCP 端口 22 隧道

K8s kubectl 常用命令总结,建议收藏!