• 使用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来传输数据
    每天学习一点点,重在积累!
  • 相关阅读:
    纯javascript遮罩层原理
    artDIalog 弹出层
    键盘对应ASCII码
    SQL Prompt 4安装步骤
    VSS2008 安装silverlight3.0步骤
    Jquery循环显示图片
    借助一般处理程序做验证码
    Socket编程原理及属性
    完整的HttpRequest讲解 createXmlHttpRequest Ajax请求
    年月日三级菜单 jquery
  • 原文地址:https://www.cnblogs.com/GXLo/p/15224560.html
Copyright © 2020-2023  润新知