从外部 ssh 到 k8s 的 pod 里面

2023-12-07 13:01:57 +08:00
 HugeNature

求教大佬,从外部 ssh 到 k8s 的 pod 里面,有什么方案么?

7201 次点击
所在节点    Kubernetes
64 条回复
HugeNature
2023-12-07 13:31:32 +08:00
@killva4624 还是裸的 ssh 的适用性更强,比如 terminal ssh ,用户用 vscode 连接 pod 等等
HugeNature
2023-12-07 13:32:54 +08:00
@buffzty node 上安装 wg 的话,外面 ssh 最多到 host 上吧?进不到 pod 里应该
HugeNature
2023-12-07 13:34:25 +08:00
@defunct9 需求就是要可以 ssh ,咱也没办法,只能想办法去实现
buffzty
2023-12-07 13:35:47 +08:00
@HugeNature 我都跟你说了集群全互通 我都用了几年了
Frankcox
2023-12-07 13:36:36 +08:00
client-go tool 下有 remotecommand ,你可以用 Go+前端 webshell 包装一下,实现类似于 ssh 的效果。
hicdn
2023-12-07 13:38:42 +08:00
@HugeNature 那就在 pod 里跑一个完整系统,把 ssh 端口转发出来
HugeNature
2023-12-07 13:39:18 +08:00
@buffzty 额,大佬可以解释下“集群全互通”么? 不是很理解这个概念。谢谢啦。
HugeNature
2023-12-07 13:40:21 +08:00
@Frankcox 希望的是原生的 ssh ,用户可以用任何方式 ssh ,terminal ,vscode ,或者其他的 GUI 工具。
HugeNature
2023-12-07 13:40:57 +08:00
@hicdn 那太重了,可以安装 sshserver ,开端口转发
xuzhzzz
2023-12-07 13:43:02 +08:00
简单的方法就是部署一个 xxx 容器管理平台,里面 terminal 登录 pod 是很常见的功能
kindom
2023-12-07 13:52:12 +08:00
K8S site: kubeflow -> codeserver
Client site: VScode -> k8s plugin -> kubeflow
buffzty
2023-12-07 13:53:54 +08:00
node1 ip 172.10.0.1 ,pod ip 10.80.1.0/24
node2 ip 172.10.0.2 ,pod ip 10.80.2.0/24
node3 ip 172.10.0.3 ,pod ip 10.80.3.0/24
client 连接 wg 到任意一个你设置的 node ( wg 转发节点)
此时 client 可以访问上面的所有 ip 也可以用集群 dns 比如 mysql.default.svc.cluster.local
需要通几个 node 就在那几个 node 上开 wg
如果 node2 开了 wg node3 没开 那么 10.80.3.0/24 这个网段你访问不了
kenvix
2023-12-07 13:55:08 +08:00
@julyclyde 那你得去跟 H3C 他们讲🤣这套系统带着机器一套卖几千万
aleimu
2023-12-07 14:20:13 +08:00
这个还真可以的,就是镜像里需要启动 sshd 服务,并且 pod 要开 22 端口,密码的话随机生成或固定,这样方便开发者自己通过堡垒机登录定位问题, kubectl exec -it pod bash 只能运维人员用用, webshell 的话不好对接堡垒机还依赖浏览器环境
Kinnice
2023-12-07 14:45:29 +08:00
集群:
1. pod 里面需要开 ssh-server ,cluster IP 即可
2. 然后再任意 node ,部署[可以物理机直接部署或容器部署] openvpn/wireguard 暴露出 nodePort ,配置好到 clusterIP 段的路由和 dns
eg: https://github.com/helm/charts/tree/master/stable/openvpn
使用者:
1. 连接 openvpn/wireguerd
2. 使用 pod-ip/name 直接 ssh 即可
anubu
2023-12-07 14:46:06 +08:00
一直在 autodl 租 GPU ,容器实例就是在容器里部署 sshd 端口映射到公网,当做一个虚拟机使用。所以你这里容器部署 sshd ,nodeport 批量暴露出来应该是没有问题的。虽然不符合所谓的最佳实践,但业务上的东西一般都是各种情况的 trade-off ,不能强制追求完美。autodl 也算正经商业化的业务,举例是说明这样实现肯定不能说是很差的选择。
Kinnice
2023-12-07 14:47:02 +08:00
@Kinnice #35 还有一种就是使用者配置好 kubectl 然后通过 port-forward 把 pod 内部 ssh 端口映射到本地
https://kubernetes.io/docs/tasks/access-application-cluster/port-forward-access-application-cluster/
chronos
2023-12-07 14:54:11 +08:00
如果是自己人用,简单点就 kubectl port-forward 将 pod 的 sshd 端口映射到本地。

如果是开放到外部使用,可以考虑使用 frp ,先部署一个 frps 并开放端口用于转发流量,然后每个 sshd 的 pod 启动时里面再启动一个 frpc 连接 frps ,使用 stcp 模式,配置文件中的 name 和 secretKey 要输出给用户。用户侧 frpc 使用 stcp 连接 frps ,secretKey 要相同。这样就可以将 sshd 的端口映射到本地,然后本地的 vscode 之类的工具就可以使用映射过来的本地端口连接。

stcp 的配置参考: https://gofrp.org/zh-cn/docs/examples/stcp/
nilai
2023-12-07 14:56:45 +08:00
1. node port 方式
2.大二层方案,calico 支持
3. 最简单的,更改外部连接机器的路由表,
HugeNature
2023-12-07 15:00:06 +08:00
@nilai 2.大二层方案,calico 支持 这个方案可以介绍下么?谢啦

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/998329

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX