部署 K3s 集群在极为严格的内网内,机器仅可以访问外网,外网对内访问需映射内网端口,内网机器之间采用白名单制度,需申请开通的端口。
2台机器, 安装 Ubuntu22.04
192.168.1.10 --- K3s master
192.168.1.11 --- K3s agent
外网访问内网端口:
443是给运营的服务提供的访问端口,6443 是给访问集群提供的端口
外网IP:18086 -----> 192.168.1.10:443
外网IP:18586 -----> 192.168.1.10:6443
内网端口互联:
这一点比较麻烦,之前从没遇到过内网之间也要配置防火墙的情况,参考的文档,让网管开通了如下端口在2台机器上,配置为互通。
TCP: 80,443,6443,10250,10254,36222,51820,2379-2380,8443,9099,9100,
TCP/UDP: 30000-32767
网管配置好了,安装 K3s 的 master 和 agent 节点,起初一切正常,但后来发现 agent 上的 pod 不能连接集群中的服务,返回错误是不能解析 DNS , 试着 nc 端口,确实不能连接。
仔细看文档,原来是忘记开 8472 /UDP 端口,这个端口负责集群内部所有的网络转发,
| Protocol | Port | Source | Destination | Description |
|---|---|---|---|---|
| UDP | 8472 | All nodes | All nodes | Required only for Flannel VXLAN |
打开端口后,网络恢复正常。
起初简单用 nc 命令不能准确测试 UDP 的连通性,貌似所有的 UDP 端口测试下来返回结果都是通的,但这其实肯定是不可能的。
nc -uvz 191.168.1.10 8472
Connection to 191.168.1.10 8472 port [udp/*] succeeded!
nc -uvz 191.168.1.10 8888
Connection to 191.168.1.10 8888 port [udp/*] succeeded!
后来采用 tcpdump 的方式测试,才能正确测试 UDP 的连通性。
在 master 上 运行
sudo tcpdump -i any 'udp and src host 192.168.0.11 and dst port 8472'
在 agent 上测试
nc -uvz 192.168.1.10 8472
然后在master查看,要有如下输出才算是真正的连通
09:43:52.045892 eth0 In IP 192.168.1.11.42327 > csknode1.8472: OTV, [length 1 < 8] (invalid)
09:43:53.045984 eth0 In IP 192.168.1.11.42327 > csknode1.8472: OTV, [length 1 < 8] (invalid)
09:43:53.847407 eth0 In IP 192.168.1.11.51680 > csknode1.8472: OTV, flags [I] (0x08), overlay 0, instance 1
K3s 集群之间网络端口可参考如下官方文档:
https://docs.k3s.io/installation/requirements#inbound-rules-for-k3s-nodes
「真诚赞赏,手留余香」
真诚赞赏,手留余香
使用微信扫描二维码完成支付