|
本文档采用自动化机器翻译技术翻译。 尽管我们力求提供准确的译文,但不对翻译内容的完整性、准确性或可靠性作出任何保证。 若出现任何内容不一致情况,请以原始 英文 版本为准,且原始英文版本为权威文本。 |
网络
本页面列出的命令/步骤可用于检查集群中的网络相关问题。
确保您配置了正确的 kubeconfig(例如,export KUBECONFIG=$PWD/kube_config_cluster.yml 用于 Rancher HA),或者通过 UI 使用嵌入式 kubectl。
仔细检查您的(主机)防火墙中是否已打开所有必需的端口。
仔细检查您的(主机)防火墙中是否已打开所有的 必需端口。与所有其他必需的 TCP 端口相比,覆盖网络使用 UDP。
检查覆盖网络是否正常工作。
Pod 可以调度到您为集群使用的任何主机,但这意味着 NGINX 入口控制器需要能够将请求从 NODE_1 路由到 NODE_2。这发生在覆盖网络上。如果覆盖网络无法正常工作,您将会遇到间歇性的 TCP/HTTP 连接失败,因为 NGINX 入口控制器无法路由到 Pod。
要测试覆盖网络,您可以启动以下 DaemonSet 定义。这将在每个主机上运行一个 swiss-army-knife 容器(该镜像由 Rancher 工程师开发,可以在这里找到: https://github.com/rancherlabs/swiss-army-knife),,我们将用它在所有主机之间运行 ping 测试)。
|
|
-
将以下文件保存为
overlaytest.yml。apiVersion: apps/v1 kind: DaemonSet metadata: name: overlaytest spec: selector: matchLabels: name: overlaytest template: metadata: labels: name: overlaytest spec: tolerations: - operator: Exists containers: - image: rancherlabs/swiss-army-knife imagePullPolicy: Always name: overlaytest command: ["sleep", "infinity"] terminationMessagePath: /dev/termination-log -
使用
kubectl create -f overlaytest.yml启动它。 -
等待直到
kubectl rollout status ds/overlaytest -w返回:daemon set "overlaytest" successfully rolled out。 -
从相同位置运行以下脚本。 它将使每个
overlaytest容器在每个主机上相互 ping:#!/bin/bash echo "=> Start network overlay test" kubectl get pods -l name=overlaytest -o jsonpath='{range .items[*]}{@.metadata.name}{" "}{@.spec.nodeName}{"\n"}{end}' | while read spod shost do kubectl get pods -l name=overlaytest -o jsonpath='{range .items[*]}{@.status.podIP}{" "}{@.spec.nodeName}{"\n"}{end}' | while read tip thost do kubectl --request-timeout='10s' exec $spod -c overlaytest -- /bin/sh -c "ping -c2 $tip > /dev/null 2>&1" RC=$? if [ $RC -ne 0 ] then echo FAIL: $spod on $shost cannot reach pod IP $tip on $thost else echo $shost can reach $thost fi done done echo "=> End network overlay test" -
当此命令完成运行时,它将输出每个路由的状态:
=> Start network overlay test Error from server (NotFound): pods "wk2" not found FAIL: overlaytest-5bglp on wk2 cannot reach pod IP 10.42.7.3 on wk2 Error from server (NotFound): pods "wk2" not found FAIL: overlaytest-5bglp on wk2 cannot reach pod IP 10.42.0.5 on cp1 Error from server (NotFound): pods "wk2" not found FAIL: overlaytest-5bglp on wk2 cannot reach pod IP 10.42.2.12 on wk1 command terminated with exit code 1 FAIL: overlaytest-v4qkl on cp1 cannot reach pod IP 10.42.7.3 on wk2 cp1 can reach cp1 cp1 can reach wk1 command terminated with exit code 1 FAIL: overlaytest-xpxwp on wk1 cannot reach pod IP 10.42.7.3 on wk2 wk1 can reach cp1 wk1 can reach wk1 => End network overlay test
如果您在输出中看到错误,则两个主机之间的 Pod 路由存在一些问题。 在上述输出中,节点
wk2在覆盖网络上没有连通性。这可能是因为 必需端口 未为wk2打开。 -
您现在可以通过运行
kubectl delete ds/overlaytest来清理 DaemonSet。
检查主机和对等/隧道设备上的 MTU 是否正确配置。
当 MTU 配置不正确时(无论是在运行 Rancher 的主机、创建/导入的集群中的节点,还是在中间的设备上),Rancher 和代理中将记录错误消息,类似于:
-
websocket: bad handshake -
Failed to connect to proxy -
read tcp: i/o timeout
请参见 Google Cloud VPN: MTU 注意事项,了解如何在 Rancher 和集群节点之间使用 Google Cloud VPN 时正确配置 MTU 的示例。