ip-masq-agent
ip-masq-agent 是一個用來管理 IP 僞裝的擴展,即管理節點中 IP 網段的 SNAT 規則。
ip-masq-agent 配置 iptables 規則,以便將流量發送到集群節點之外的目標時處理 IP 僞裝。默認情況下,RFC 1918 定一個的三個私有 IP 範圍是非僞裝網段,即 10.0.0.0/8、172.16.0.0/12 和 192.168.0.0/16。另外,鏈接本地地址(169.254.0.0/16)也被視爲非僞裝網段。

部署方法
首先,標記要運行 ip-masq-agent 的 Node
kubectl label nodes my-node beta.kubernetes.io/masq-agent-ds-ready=true
然後部署 ip-masq-agent:
kubectl create -f https://raw.githubusercontent.com/kubernetes-incubator/ip-masq-agent/master/ip-masq-agent.yaml
部署好,查看 iptables 規則,可以發現
iptables -t nat -L IP-MASQ-AGENT
RETURN all -- anywhere 169.254.0.0/16 /* ip-masq-agent: cluster-local traffic should not be subject to MASQUERADE */ ADDRTYPE match dst-type !LOCAL
RETURN all -- anywhere 10.0.0.0/8 /* ip-masq-agent: cluster-local traffic should not be subject to MASQUERADE */ ADDRTYPE match dst-type !LOCAL
RETURN all -- anywhere 172.16.0.0/12 /* ip-masq-agent: cluster-local traffic should not be subject to MASQUERADE */ ADDRTYPE match dst-type !LOCAL
RETURN all -- anywhere 192.168.0.0/16 /* ip-masq-agent: cluster-local traffic should not be subject to MASQUERADE */ ADDRTYPE match dst-type !LOCAL
MASQUERADE all -- anywhere anywhere /* ip-masq-agent: outbound traffic should be subject to MASQUERADE (this match must come after cluster-local CIDR matches) */ ADDRTYPE match dst-type !LOCAL
使用方法
自定義 SNAT 網段的方法:
cat >config <<EOF
nonMasqueradeCIDRs:
- 10.0.0.0/8
resyncInterval: 60s
EOF
kubectl create configmap ip-masq-agent --from-file=config --namespace=kube-system
這樣,查看 iptables 規則可以發現
$ iptables -t nat -L IP-MASQ-AGENT
Chain IP-MASQ-AGENT (1 references)
target prot opt source destination
RETURN all -- anywhere 169.254.0.0/16 /* ip-masq-agent: cluster-local traffic should not be subject to MASQUERADE */ ADDRTYPE match dst-type !LOCAL
RETURN all -- anywhere 10.0.0.0/8 /* ip-masq-agent: cluster-local
MASQUERADE all -- anywhere anywhere /* ip-masq-agent: outbound traffic should be subject to MASQUERADE (this match must come after cluster-local CIDR matches) */ ADDRTYPE match dst-type !LOCAL
Windows IP 僞裝
ip-masq-agent 只支持 Linux, 而在 Windows 節點中可以通過 CNI 配置實現類似的功能 (把不需要做 SNAT 的網段加入到 OutBoundNAT 策略的 ExceptionList 中):
{
"name": "cbr0",
"type": "win-bridge",
"dns": {
"nameservers": [
"11.0.0.10"
],
"search": [
"svc.cluster.local"
]
},
"policies": [
{
"name": "EndpointPolicy",
"value": {
"Type": "OutBoundNAT",
"ExceptionList": [
"192.168.0.0/16",
"11.0.0.0/8",
"10.137.196.0/23"
]
}
},
{
"name": "EndpointPolicy",
"value": {
"Type": "ROUTE",
"DestinationPrefix": "11.0.0.0/8",
"NeedEncap": true
}
},
{
"name": "EndpointPolicy",
"value": {
"Type": "ROUTE",
"DestinationPrefix": "10.137.198.27/32",
"NeedEncap": true
}
}
],
"loopbackDSR": true
}
Last updated