gpt4 book ai didi

database - Kubernetes 传出连接

转载 作者:行者123 更新时间:2023-12-02 11:40:06 24 4
gpt4 key购买 nike

我将保持简单并询问,有没有办法查看哪个 pod 与端点(如数据库端点)有事件连接?

我的集群包含数百个命名空间,我的数据库提供商刚刚告诉我几乎达到了最大连接量,我想查明同时使用多个连接到我们的数据库端点的 pod。

我可以从我的数据库集群中看到连接来 self 的集群节点的 IP...但它不会说明是哪些 pod...而且我有很多 pod...

感谢帮助

最佳答案

每个容器都使用自己的网络命名空间,因此要检查容器命名空间内的网络连接,您需要在该命名空间内运行命令。

幸运的是,Pod 中的所有容器都共享相同的网络命名空间,因此您可以向 Pod 添加小型 sidecar 容器,以打印到打开连接日志。

或者,您可以在 pod 中运行 netstat 命令(如果 pod 的文件系统上有它):

kubectl get pods | grep Running | awk '{ print $1 }' | xargs -I % sh -c 'echo == Pod %; kubectl exec -ti % -- netstat -tunaple' >netstat.txt
# or
kubectl get pods | grep Running | awk '{ print $1 }' | xargs -I % sh -c 'echo == Pod %; kubectl exec -ti % -- netstat -tunaple | grep ESTABLISHED' >netstat.txt

之后,您的磁盘上就会有一个文件 (netstat.txt),其中包含有关 pod 中连接的所有信息。

第三种方式最多complex .您需要使用 docker ps 找到容器 ID,然后运行以下命令获取 PID

$ pid = "$(docker inspect -f '{{.State.Pid}}' "container_name | Uuid")"

然后,您需要创建命名空间:(你可以使用任何你想要的名字,或者 container_name/Uuid/Pod_Name 来代替 namespace_name)

sudo mkdir -p /var/run/netns
sudo ln -sf /proc/$pid/ns/net "/var/run/netns/namespace_name"

现在您可以在该命名空间中运行命令:

sudo ip netns exec "namespace_name" netstat -tunaple | grep ESTABLISHED

您需要为每个节点上的每个 pod 执行此操作。因此,对特定容器进行故障排除可能很有用,但它需要更多的自动化来完成您的任务。

安装 Istio 可能对您有所帮助到你的集群。它具有此 answer 中提到的几个有趣的功能

关于database - Kubernetes 传出连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53400039/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com