从外部 ssh 到 k8s 的 pod 里面

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

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

7207 次点击
所在节点    Kubernetes
64 条回复
nilai
2023-12-07 15:04:18 +08:00
步骤比较多, 一时半会还讲不清楚, 不过你可以尝试搜索 calico bgp 关键字 应该会有很多资料的
ETiV
2023-12-07 15:34:33 +08:00
- ssh 到跳板机
- 跳板机 authorized_key 里,配置 command
- 可以在这 command 里加 kubectl exec bash 命令,当然,大概需要做一个前置的 TUI 程序,让人选择想要进入的 pod 和 container
standchan
2023-12-07 16:09:08 +08:00
把集群的连接信息保存到本地.kube/config ,然后 kubectl exec -it <pod-name> /bin/sh
LyleLaii
2023-12-07 17:10:37 +08:00
@kenvix 确实有这种需求😂
@HugeNature
之前我在公司搭的 jupyterhub 就有业务说想用 IDE 更方便,我就搞过一个小玩意作 ssh 转发。
整体逻辑是 pod 内都需要运行 sshd ,然后通过一个统一的服务进行认证,再将 ssh 的进行代理转发到指定 pod 。这个统一 服务用一个 nodeport 或者用 ingress 代理都行,可以参考下
https://github.com/LyleLaii/jupyterhub-ssh-proxy
julyclyde
2023-12-07 17:51:25 +08:00
@HugeNature 那你试试把 pod 设置为 host 模式吧
至于浮动 IP 你只能自己想办法了
bigfei
2023-12-07 18:02:24 +08:00
calico bgp 配好就行,只是可能需要你们的网管配合开一下 bgp 配置
wWjd5V5L0636B5YV
2023-12-07 18:04:39 +08:00
@defunct9 这不是 docker 命令么?
zhoujinjing09
2023-12-07 18:12:25 +08:00
有现成工具 https://containerssh.io/v0.4/ ,缺点是 ssh 是通过 k8s api server 转发 kubectl exec 的,流量大的话可能会影响集群稳定性
2n80HF9IV8d05L9v
2023-12-07 18:13:57 +08:00
如果只是临时的, 可以直接找个跳板, ssh -fNL, ssh -fNR
superchijinpeng
2023-12-07 18:23:17 +08:00
Tailscale 也行
wangbin11
2023-12-07 18:43:42 +08:00
我们的方案是,直接 k8s 跑个 wiregaurd 的 pod ,然后映射一个 udp 端口出去通过 vpn 连接到内部,有需要可以回复我,我发你方案
Daath
2023-12-07 18:46:39 +08:00
ingress-controller 修改 tcp-config 开放对应的端口直接映射到内部 pod 相关的 svc 的端口,如果还有负载均衡,那 lb 上开放 svc 对应的端口,应该就可以直通某个 pod 吧
yougg
2023-12-07 19:37:57 +08:00
干嘛非要 pod 里面做 server 端才行, 开一堆洞不好收拾烂摊子
把思路打开 反弹 shell 一样能搞定任务.
https://gist.github.com/yougg/b47f4910767a74fcfe1077d21568070e
killerirving
2023-12-07 22:38:51 +08:00
看看这个? 用 kubectl 插件实现了一个 ssh ProxyCommand 的功能
https://github.com/ciiiii/kube-ProxyCommand
```
Host develop-container
HostName develop-container
User root
Port 22
IdentityFile /path/to/private/key
ProxyCommand kube-proxyCommand --name=podName --namespace=podNamespace --port=%p
```
smilingsun
2023-12-07 23:46:14 +08:00
可以参考一下 Coder ,用 Tailscale 实现 p2p 到 pod

> When possible, we establish direct connections between users and workspaces. Direct connections are as fast as connecting to the workspace outside of Coder. When NAT traversal fails, connections are relayed through the coder server. All user <-> workspace connections are end-to-end encrypted.

https://coder.com/docs/v2/latest/networking#networking
tudou1514
2023-12-08 09:36:56 +08:00
ingress-controller 支持添加 80 、443 以外的 tcp 和 udp 协议暴漏,可以试试
Masoud2023
2023-12-08 09:40:36 +08:00
就必须得要拿 ssh 进吗?

如果不要其他特性,比如端口映射或者 scp ,感觉倒是可以自己写一个。
byte10
2023-12-08 10:01:28 +08:00
不太合理的的需求 请用不太合理的方式实现,管它是否安全,用了再说吧。
relife
2023-12-08 10:59:24 +08:00
开个新的 ssh 用户,然后 chsh 修改登录直接 exec 到容器里面
xabclink
2023-12-08 12:42:39 +08:00
https://ki.xabc.io 可以满足你的需求

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

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

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

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

© 2021 V2EX