本文永久链接: https://www.xtplayer.cn/kubernetes/test-cluster-network-connectivity/

使用 busybox 镜像通过以下命令创建 DaemonSet 类型的测试应用,

kubectl create deploy net-test --image=registry.cn-hangzhou.aliyuncs.com/rancher/busybox \
--dry-run=client -o yaml | \
sed '/null\|{}\|replicas/d;/status/,$d;s/Deployment/DaemonSet/g' | \
sed '/image: .*/a \ stdin: true\n tty: true' | \
kubectl apply -f -

等 DaemonSet pod 创建完成后,使用以下脚本去交叉测试跨节点 pod 与 pod 之间的网络连通性。

#!/bin/bash

# 获取所有 Pod 名称和 IP
PODS=$(kubectl get pods -l app=net-test -o jsonpath='{range .items[*]}{.metadata.name},{.status.podIP},{.status.hostIP}{"\n"}{end}')

echo "开始测试 Pod 网络连通性..."
echo "----------------------------------"

# 测试每个 Pod 到其他 Pod 的连通性
for TEST_POD_INFO in $PODS; do
TEST_POD_NAME=$(echo $TEST_POD_INFO | cut -d',' -f1)
TEST_POD_IP=$(echo $TEST_POD_INFO | cut -d',' -f2)
TEST_HOST_IP=$(echo $TEST_POD_INFO | cut -d',' -f3)

echo "在 Pod $TEST_POD_NAME ($TEST_POD_IP) ($TEST_HOST_IP) 中 ping:"

for TARGET_POD_INFO in $PODS; do
TARGET_POD_NAME=$(echo $TARGET_POD_INFO | cut -d',' -f1)
TARGET_POD_IP=$(echo $TARGET_POD_INFO | cut -d',' -f2)
TARGET_HOST_IP=$(echo $TARGET_POD_INFO | cut -d',' -f3)

echo -n " -> $TARGET_POD_NAME ($TARGET_POD_IP) ($TARGET_HOST_IP): "

# 测试 ping
kubectl exec $TEST_POD_NAME -- ping -c 3 $TARGET_POD_IP >/dev/null 2>&1
PING_POD_IP_RESULT=$?

kubectl exec $TEST_POD_NAME -- ping -c 3 $TARGET_HOST_IP >/dev/null 2>&1
PING_HOST_IP_RESULT=$?

if [ $PING_POD_IP_RESULT -eq 0 ]; then
printf "\e[32mPing target Pod IP OK\e[0m | "
else
printf "\e[31mPing target Pod IP FAILED\e[0m | "
fi
if [ $PING_HOST_IP_RESULT -eq 0 ]; then
printf "\e[32mPing target Host IP OK\e[0m\n"
else
printf "\e[31mPing target Host IP FAILED\e[0m\n"
fi
done
printf "\n"
done

echo "Pod 网络测试完成。"