通过 Tailscale 在分布式 Kubernetes 集群中进行联网

通过 Tailscale 在分布式 Kubernetes 集群中进行联网

背景

我有两个节点,Narvi 和 Orcams,它们是 Tailnet 的一部分。它们位于物理上不同的“真实”子网中。它们可以使用 Tailscale DNS 相互通信,没有任何问题。traceroute表明这些节点之间的通信直接通过tailscale0接口进行,双向进行。

我正在尝试设置一个 Kubernetes 集群,使用kubeadmNarvi 作为控制平面节点,使用 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.0tailscale0

我尝试过各种 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 插件:编织网、印花布、法兰绒

问题

  1. 是否有已知的配置或 CNI 插件可以与 Tailscale 配合使用,以便在分布式 Kubernetes 设置中进行 Pod 网络?博客文章这里建议 Weave Net 和 Flannel (我已经测试过两者)。
  2. 如何确保通过 Tailscale 实现跨节点的无缝 pod 到 pod 通信?我知道这个问题有点笼统,但我需要帮助思考,而不是具体处理代码/管理的方法。

相关内容