Kubernets二进制安装(14)之flannel之SNAT规则优化

flannel之SNAT规则优化的目的是由于在K8S中的容器内,访问不同宿主机中的容器的资源的时候,日志文件会记录为宿主机的IP地址,而不是记录为容器本身自己的IP地址,建议在不同的宿主机上的容器互访的时候,在日志文件中查询到的IP地址均为容器的真实的IP地址。如下图所示,是为宿主机或进入宿主机的容器中进行curl访问另外node节点的容器,都会被记录成宿主机的IP地址,这样就会导致不同宿主机的容器互访,会经过一次SNAT转换,而实际上,不同宿主机容器之间的访问,应该会被记录为容器的实际IP地址而非宿主机的IP地址

image-20200510231719764

分别查询mfyxw30和mfyxw40主机是否安装iptables-services,如果未安装请先安装

安装iptables-service方法:yum -y install iptables-service

image-20200511153046814

分别查看下mfyxw30和mfyxw40主机的iptables的POSTROUTING规则

image-20200511153350694

-A POSTROUTING -s 10.10.30.0/24 ! -o docker0 -j MASQUERADE 这条规则中可以看出来,源地址为10.10.30.0/24的网段的IP地址,不从docker0网口出去的都需要做SNAT转发。这样就会导致在开头所看到的。在一台宿主机的容器要访问另外一台宿主机的容器,查询到的访问日志是被SNAT的。而在实际生产环境中,我们需要的是容器间互访,查看日志文件得到的IP地址应该是容器本身的IP地址而非宿主机的IP地址

1.先把原来的规则删除

分别在mfyxw30和mfyxw40主机上,删除-A POSTROUTING -s 10.10.30.0/24 ! -o docker0 -j MASQUERADE此规则,添加一条新的规则如下所示:

image-20200511160125549

2.添加一条新的规则

再次登录到mfyxw30主机上的容器访问mfyxw40主机上的容器,并让mfyxw40主机上的容器一直监视着logs。会发现已经容器间互访的IP变成了容器的实际的IP地址

image-20200511160313448

在mfyxw30宿主机上执行curl 10.10.40.2来访问mfyxw40宿主机上的容器的IP地址

image-20200511160706938

在mfyxw40主机上的容器上可以看到日志输出如下

image-20200511160831629

3.保存iptables

分别在mfyxw30和mfyxw40主机上执行iptables-save > /etc/sysconfig/iptables命令来保存所修改的

image-20200511160612930

posted on 2020-05-11 16:10  杨枫哥  阅读(395)  评论(0编辑  收藏  举报