K8S_05_flanneld之SNAT规则优化

hdss7-21(10.4.7.21)

kubectl get pods -o wide


进入hdss7-21上面的容器中:
kubectl exec -ti nginx-ds-z546t /bin/bash





再在 hdss7-22(10.4.7.22)上面查看日志:

kubectl logs -f nginx-ds-7nbg4


如果这里看到的是宿主机的IP 地址,说明它做了SNAT 转换。但在集群内部,都在同一个网络里面,是不需要做SNAT转换。

#######++++++++++

hdss7-21(10.4.7.21)
iptables-save|grep -i postrouting


来源地址是,172.7.21.0/24 , 不是从docker0这个网络设备出网的,做源地址转换
我们需要的是:如果出网的地址是172.7.0.0/16 这个网络,也不需要做源地址转换。

#####++++++++
hdss7-21(10.4.7.21) hdss7-22(10.4.7.22) 上需都安装。

yum install iptables-services -y
systemctl start iptables
systemctl enable iptables

##########++++++++

iptables -t nat -D POSTROUTING -s 172.7.21.0/24 ! -o docker0 -j MASQUERADE



再插入一条规则:
iptables -t nat -I POSTROUTING -s 172.7.21.0/24 ! -d 172.7.0.0/16 ! -o docker0 -j MASQUERADE

源地址 是172.7.21.0/24,不是去往 目标地址172.7.0.0/16 这个网络,也不是从docker0网络设备出网的,才做源地址转换(SNAT)



######++++++++
iptables -t filter -D INPUT -j REJECT --reject-with icmp-host-prohibited
iptables -t filter -D FORWARD -j REJECT --reject-with icmp-host-prohibited





hdss7-21 hdss7-22 上面都删除这两条规则。

#########+++++++++

把当前规则 ,保存起来。

iptables-save >/etc/sysconfig/iptables






再看hdss7-22 上面的日志:



#####++++++++

接下来把hdss7-22(10.4.7.22)上面的网络也进行优化:

iptables-save|grep -i postrouting
iptables -t nat -D POSTROUTING -s 172.7.22.0/24 ! -o docker0 -j MASQUERADE
iptables -t nat -I POSTROUTING -s 172.7.22.0/24 ! -d 172.7.0.0/16 ! -o docker0 -j MASQUERADE


##########++++++++++

hdss7-21(10.4.7.21) 监控日志:


hdss7-22(10.4.7.22)上面,进入容器,curl 172.7.21.2






hdss7-21(10.4.7.21)