容器连通性(容器到某个网络是否畅通)检查方案

320 天前
 helenfrank
目前远程对 pod 的网络连通性 检查有啥比较好的方案吗, 地址可以是 domain, domain:port, ip, ip:port
1. client-go 调 exec 执行 curl, ping, nc (我目前使用的方案, 但存在存量镜像没有这些工具)
2. 再挂个工具 container (侵入性较大, 且更占资源)
3. nsenter (需要连接 node, docker inspect 获取 Pid, client-go 获取 pod dns 地址, 依赖于 node 上的工具)

还有啥比较好的方案吗
2453 次点击
所在节点    Kubernetes
39 条回复
Nooooobycat
320 天前
直接与这个地址建立 Socket 连接就行了。 上面开进程去验证属于脱裤子放屁

package main

import (
"fmt"
"net"
"time"
)

func connectTCP(address string) bool {
// 设置连接超时时间
timeout := 5 * time.Second

// 尝试建立连接
conn, err := net.DialTimeout("tcp", address, timeout)

// 检查是否出现错误
if err != nil {
fmt.Println("连接失败:", err)
return false
}

// 关闭连接
defer conn.Close()

fmt.Println("连接成功")
return true
}
helenfrank
320 天前
@Nooooobycat #1 并不是这样, 我是在做上层云平台的功能, 这个功能是为了检查运行中的 pod 到某个网络是否畅通
latteczy
320 天前
sidecar?
helenfrank
320 天前
@latteczy #3 见第二条, 目前没上 istio, 所以...
lntouchables
320 天前
在上家公司也有做过这种需求,用的 nsenter ,如果 k8s 版本支持的话可以看一下 kubectl-debug
lujiaosama
320 天前
插眼. 确实是个问题. 进到容器没 PING, CURL 还测不了接口是否联通.
leonshaw
320 天前
就走 2
ysicing
320 天前
lrh3321
320 天前
nsenter

或者把容器的网络命名空间 mount 到 /run/netns/NAME 下,然后
ip netns exec NAME cmd....
julyclyde
320 天前
@helenfrank 如果存在“有时候通”那你应该去解决网络的问题啊,而不是每次运行的时候检查一下啊
Frankcox
320 天前
在存量镜像没法修改的情况下,就用 2 的 sidecar 呗,sidecar 是一种模式,不一定跟 istio 绑定,你可以自己用 go 写一个小程序,或者就提前封装好一个镜像+bash 脚本。然后在集群部署个 mutating webhook ,当指定 deployment 部署时,自动通过 webhook 把这个 container 注入到 deployment 中。
Frankcox
320 天前
@Frankcox 另外看这个帖子学到了 nsenter ,挺好的东西
helenfrank
320 天前
@julyclyde #10 不是每次运行(我理解你的意思是启动)的时候, 是在正常运行时, 出现了一些服务不可用, 项目组成员可以通过云平台先检查下是不是网络问题
helenfrank
320 天前
@Frankcox #11 是的, 理解你的想法, 并且实践过, 如我在 2 里所提到的(侵入性较大, 且更占资源)
fengxsong
320 天前
这个不是监控要做的事吗。。
helenfrank
320 天前
@fengxsong #15 需求是可以把这个功能给到项目组成员, 让他们在运行中可以检查到某个网络是否通畅, 进而可以反馈给管理网络的人, 毕竟谁知道项目组的人想访问哪个网络呢
zjb861107
320 天前
之前看过一个观点是这个容器里运行的程序是什么语言,就用对应的语言开发一个/ping 接口或者脚本来检查该程序是否在运行,我觉得这也是个办法。一般这种逻辑也不会太复杂,定制化也容易。
helenfrank
320 天前
@zjb861107 #17 你对需求理解的有误差, 想要的是测试 pod 到某个网络是否通畅, 不是检测 pod 正常运行
yimiaoxiehou
320 天前
在所属节点创建一个特权 pod ,在 pod 中使用 nsenter -t { PID } -n { CMD } 检测
huanghanzhilian
320 天前
我也用到了 docker ,挺吃力的,不过部署成功了

我开源了一个精美的电商开源项目,如果对你有帮助,请在 github 上帮我点亮星星,这会是对我莫大的鼓励。
在线体验: http://shop.huanghanlian.com
开源项目 传送门: https://github.com/huanghanzhilian/c-shopping

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

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

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

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

© 2021 V2EX