使用flannel插件的情况下,开启Iptables

2021/9/4 7:07:16

本文主要是介绍使用flannel插件的情况下,开启Iptables,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

背景

kubernetes: 1.16.3
CNI: flannel
因为Node有公网和内网两个IP,使用防火墙对机器进行安全加固

问题

开启防火墙后,不同节点的Node之间无法通信

# Generated by iptables-save v1.4.21 on Thu Jul  8 10:16:12 2021
*filter
:INPUT DROP [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [6:438]
-A INPUT -i lo -j ACCEPT
-A INPUT -s 127.0.0.1/32 -d 127.0.0.1/32 -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -s 10.244.0.0/16 -m comment --comment "pod Subnet" -j ACCEPT
-A INPUT -s 10.96.0.0/12 -m comment --comment "service Subnet" -j ACCEPT
-A INPUT -s 10.241.0.0/16 -m comment --comment "lan IP" -j ACCEPT
-A INPUT -p tcp -m tcp --sport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --sport 443 -j ACCEPT
-A INPUT -p udp -m udp --sport 123 -j ACCEPT
-A INPUT -p udp -m udp --dport 123 -j ACCEPT
-A INPUT -p tcp -m tcp --sport 53 -j ACCEPT
-A INPUT -p udp -m udp --sport 53 -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type any -j ACCEPT
-A INPUT -p udp -m udp --dport 161 -j ACCEPT
COMMIT
# Completed on Thu Jul  8 10:16:12 2021

node 节点内网全开

解决思路

  1. 将上述配置写入到/etc/sysconfig/iptables中,并重启防火墙配置
  2. kube-proxy和flannel检查到自身的防火墙被清理后,会自动创建
  3. 此时在A节点上Ping B节点的Pod IP,发现网络不通
  4. 通过抓包发现,对端没有回复任何包
  5. 关闭Iptables服务,并清理自己创建的规则
  6. 此时检查是通的
  7. 开启防火墙,并全开flannel数据传输的UTP 8472端口,发现也是通的
    -A INPUT -p udp --dport 8472 -j ACCEPT
    
  8. 此时可以出结论,故障出现在公网网卡上,检查flannel日志,发现果然监听的是公网IP
    I0903 09:57:22.857993       1 main.go:532] Using interface with name XXX and address XX.XXX.X.X
    I0903 09:57:22.858084       1 main.go:549] Defaulting external address to interface address (XX.XXX.X.X)
    

解决方法

重新部署flannel,并指定使用的网卡

args:
  - '--ip-masq'
  - '--kube-subnet-mgr'
  - '--iface=ens192'

总结

  1. 在双网卡的情况下,flannel默认使用第一张网卡
  2. flannel会使用网卡对应的IP的8472来传输数据


这篇关于使用flannel插件的情况下,开启Iptables的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程