docker bridge网络问题排查

问题描述

K8S宿主机使用dockerd当做csi, 业务需使用docker run启动container运行,通过docker run启动的容器无法与外界网络连接

结论先行

根因是节点的docker bridge网络问题,docker启动会对机器进行一些iptables规则添加,该机器有人使用了iptables -F 清理了规则,导致bridge模式的container无法和机器外的网络进行通信

排查

  1. 先ping同机器的其他container,确认可ping通,证明docker的vth对和netns没有问题
  2. 确认路由是至docker0网桥, ping 宿主机同网段机器,在机器上抓包,发现源IP没有进行SNAT
  3. 查看nat表的iptables规则,果然缺少关于docker默认网段172.17.0.0/16网段对应的snat规则;
  4. 加上nat相关的iptables规则之后还是无法ping通,而是梳理所有iptables规则对比

梳理前快速定位的对比,可以在docker正常的机器启动一个bridge容器,进入后ping跨主机通信的ip,然后watch iptables 的nat表和fileter表的匹配规则哪些有新增,再确认对应的链是否有规则遗漏。

docker run -d ubuntu:18.04 /bin/bash -c “tail -f /dev/null”
docker inspect $containID |grep -i pid
nsenter -n -t $pid ;; ping xxxx (宿主机同网段的其他机器,跨主机通信即可)
watch -n 1 -d sudo iptables -nvL -t nat/filter (找到持续ping数据经过iptables过滤的规则链,确认问题机器是否有缺失)

梳理了docker相关的iptables规则

nat 表
:PREROUTING ACCEPT [151:20127]
:INPUT ACCEPT [82:13633]
:OUTPUT ACCEPT [86:19935]
:POSTROUTING ACCEPT [168:28083]
:DOCKER - [0:0]
-A PREROUTING -m addrtype --dst-type LOCAL -j DOCKER
-A OUTPUT ! -d 127.0.0.0/8 -m addrtype --dst-type LOCAL -j DOCKER
-A POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j MASQUERADE
COMMIT
#docker对于nat表主要是在POSTROUTING链对不是从docker0网卡发出的源IP为172.17段的包进行SNAT

filter 表
:INPUT DROP [4:160]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [59:48132]
:DOCKER - [0:0]
:DOCKER-ISOLATION-STAGE-1 - [0:0]
:DOCKER-ISOLATION-STAGE-2 - [0:0]
:DOCKER-USER - [0:0]
-A FORWARD -j DOCKER-USER
-A FORWARD -j DOCKER-ISOLATION-STAGE-1
-A FORWARD -o docker0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -o docker0 -j DOCKER
-A FORWARD -i docker0 ! -o docker0 -j ACCEPT
-A FORWARD -i docker0 -o docker0 -j ACCEPT
-A DOCKER-ISOLATION-STAGE-1 -i docker0 ! -o docker0 -j DOCKER-ISOLATION-STAGE-2
-A DOCKER-ISOLATION-STAGE-1 -j RETURN
-A DOCKER-ISOLATION-STAGE-2 -o docker0 -j DROP
-A DOCKER-ISOLATION-STAGE-2 -j RETURN
-A DOCKER-USER -j RETURN
COMMIT
#filter表主要是将FORWAR链上包指定至docker的自定义链

补充

该机器是K8S的宿主机,iptables -F清理了规则后,为什么pod网络还可以正常使用?

KUBE相关的iptables规则是由kube-proxy组件进行维护的,kube-proxy默认30s会刷新iptables规则,而且pod的重启,service的更新都会主动刷新机器的iptables。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值