背景
我有两个节点,Narvi 和 Orcams,它们是 Tailnet 的一部分。它们位于物理上不同的“真实”子网中。它们可以使用 Tailscale DNS 相互通信,没有任何问题。traceroute
表明这些节点之间的通信直接通过tailscale0
接口进行,双向进行。
我正在尝试设置一个 Kubernetes 集群,使用kubeadm
Narvi 作为控制平面节点,使用 Orcams 作为工作节点。这是kubeadm init
我在 Narvi 上使用的命令:
kubeadm init --cri-socket /var/run/containerd/containerd.sock --control-plane-endpoint narvi.taileb1e1.ts.net --apiserver-advertise-address $(tailscale ip --4) --pod-network-cidr 10.25.0.0/16 --service-cidr 10.26.0.0/16 --upload-certs
问题
发布 Kubernetes 设置后,我在 pod 网络方面遇到了挑战。虽然 pod 可以使用ping
或与其他节点通信traceroute
,但我无法 ping pod 网络 CIDR 内的内部 IP 地址(10.25.0.0/16
)。运行确认通过网络ip route get
的路由正确。10.25.0.0
tailscale0
我尝试过各种 CNI 插件,包括 Weave Net、Calico 和 Flannel。无论如何,通过 Pod CIDR 进行的 Pod 到 Pod 通信几乎总是失败。我检查了 IP 路由iptables
(甚至为了测试目的完全关闭了iptables
)。我还检查了允许所有通信的 Tailscale ACL(访问控制)。
我观察到我的节点的行为(以 Calico 网络为例)是,我的工作节点可以成功加入,但 Calico 节点开始不断终止。其日志(类似于 Flannel 或 Weave Net)显示偶尔的连接被拒绝,尤其是在使用内部 pod IP 时。总的来说,我无法找到一个可能成为根本原因的错误,但我强烈感觉到这些都与 IP 路由有关。
环境
- 节点:Narvi (控制平面)、Orcams (工作者)
- 操作系统:Ubuntu(在两个节点上)
- 网络:尾标 (Tailnet)
- Kubernetes 设置:
kubeadm
- 已测试的 CNI 插件:编织网、印花布、法兰绒
问题
- 是否有已知的配置或 CNI 插件可以与 Tailscale 配合使用,以便在分布式 Kubernetes 设置中进行 Pod 网络?博客文章这里建议 Weave Net 和 Flannel (我已经测试过两者)。
- 如何确保通过 Tailscale 实现跨节点的无缝 pod 到 pod 通信?我知道这个问题有点笼统,但我需要帮助思考,而不是具体处理代码/管理的方法。