规则是
-A KUBE-SEP-G3HEJMIUHDVUA2GR -p udp -m comment --comment "kube-system/kube-dns:dns" -m udp -j DNAT --to-destination :0 --persistent --to-destination :0 --persistent --to-destination
这是 kube 服务规则的一部分:
-N KUBE-SEP-G3HEJMIUHDVUA2GR
-A KUBE-SEP-G3HEJMIUHDVUA2GR -s 10.233.64.2/32 -m comment --comment "kube-system/kube-dns:dns" -j KUBE-MARK-MASQ
-A KUBE-SEP-G3HEJMIUHDVUA2GR -p udp -m comment --comment "kube-system/kube-dns:dns" -m udp -j DNAT --to-destination :0 --persistent --to-destination :0 --persistent --to-destination
据我所知,通常这条规则会有一个特定的目的地,如下所示:
-A KUBE-SEP-XEZU3EBQ2WW4MLUB -p tcp -m comment --comment "default/nginx:https" -m tcp -j DNAT --to-destination 10.233.116.87:443
虽然第一个没有特定的目的地,这可能是因为该服务只有一个端点,但我想知道:
- 目的地“:0”是什么意思?
- 为什么“--destination”出现三次?
- 这里的“--persistent”有什么用?
- 在哪里可以找到有关 DNAT 目标的更详细文档?
答案1
这完全不是一个答案。经过深入研究,我发现 kube-proxy 容器中的 iptables 规则与主机上的 iptables 规则不同。
-N KUBE-SEP-OYL6BTTAC4W4HXLZ
-A KUBE-SEP-OYL6BTTAC4W4HXLZ -s 10.233.64.38/32 -m comment --comment "kube-system/kube-dns:dns" -j KUBE-MARK-MASQ
-A KUBE-SEP-OYL6BTTAC4W4HXLZ -p udp -m comment --comment "kube-system/kube-dns:dns" -m udp -j DNAT --to-destination :0 --persistent --to-destination :0 --persistent --to-destination
(名称和IP更改是因为我重新启动了机器)
然后我检查了两个 iptables cli 的版本,发现它们没有匹配。我之前升级过内核,这可能会导致一些问题。但我不想深入挖掘,我不是内核专家。