使用iptables规则链分析在docker+calico环境下数据包的流向

一、背景介绍

    在docker+calico环境下,分析数据包都经过了哪些iptables规则链。
分析目的:

  • 了解数据包的走向
  • 为接下来重点分析kubernetes+calico+docker环境下,数据包的走向打下基础

    本文分析使用iptables规则链,也就是分析数据包在网络层是如何走的,ebtables规则链暂不考虑。
    主要使用nat表,filter表。

二、环境介绍

2.1 物理环境介绍

系统类型 IP role cpu memory hostname
CentOS 7.4.1708 172.16.91.195 master 4 2G master
CentOS 7.4.1708 172.16.91.196 worker 2 1G slave1
CentOS 7.4.1708 172.16.91.197 worker 2 1G slave2

2.2 运行服务介绍

  1. docker 版本介绍

    使用iptables规则链分析在docker+calico环境下数据包的流向_第1张图片
    docker版本

  2. calico 版本介绍

    使用iptables规则链分析在docker+calico环境下数据包的流向_第2张图片
    calico版本

  3. etcd 版本介绍

    使用iptables规则链分析在docker+calico环境下数据包的流向_第3张图片
    etcd版本

  4. ip路由转发规则要开启

    • 经测试,如果不开启的话,calico集群的其他节点不当访问当前节点上的容器
    • 不开启的话,本节点访问当前节点上的容器是没有问题的。
    • sysctl -a | grep net.ipv4.ip_forward 如果为1,说明开启了。
    • vim /etc/sysctl.conf
      • 添加net.ipv4.ip_forward = 1
      • sysctl -p (保存即可了)

三、准备工作

3.1 设置iptables调试日志(master节电,slave1节点)

步骤一 设置iptables规则

iptables -t raw -A OUTPUT -p icmp -j LOG  
iptables -t raw -A PREROUTING -p icmp -j LOG 

iptables -t raw -A OUTPUT -p icmp -j TRACE   
iptables -t raw -A PREROUTING -p icmp -j TRACE   

设置iptables

备注:

  • 不知道为什么,我这里必须同时设置LOG,TRACE这两个动作,调式日志才能打印出来
  • 重启虚拟机后,这些规则会消失

步骤二

设置日志存储路径

vim /etc/rsyslog.conf    
kern.*  /var/log/iptables.log  

步骤三

重启rsyslog服务

service rsyslog status  
service rsyslog restart

3.2 镜像准备

  1. 创建Dockerfile

    vim Dockerfile

    FROM nginx
    RUN apt-get update 
    RUN apt-get install -y iputils-ping iproute2 wget
    
  2. 构建镜像

    docker build -t mybusybox .
    

3.3 创建测试容器

  1. 创建calico网络net1(master节点)
    docker network create --driver calico --ipam-driver calico-ipam net1
    
  2. 创建容器(master节点)
    docker run --net net1 --name web1 -itd  mybusybox    
    docker run --net net1 --name web2 -itd  mybusybox  
    
  3. 创建容器(slave1节点)
    docker run --net net1 --name web3 -itd  mybusybox      
    

四、测试

下图展示了iptables规则链的方向:

使用iptables规则链分析在docker+calico环境下数据包的流向_第4张图片
iptables规则链

我的困惑是,在calico+docker环境下,数据包是如何在网卡之间进行通信的,方向是什么?
所以才有了下面的场景测试,希望通过这些测试,了解数据包的走向。
为什么,要了解一下呢?
好多上层应用功能的实现,底层几乎都是 iptables规则链来实现的。如:

  • kubernetes中的networkpolicy
  • calico中的profile
  • kubernetes中的kube-proxy的原理
    如果对iptables,ipset有了深入的了解,假如线上生产环境出了相关问题,知道如何去排查。

接下来,从以下场景进行测试:

  • 容器与宿主机之间的通信
  • 容器与calico集群中非宿主机之间的通信
  • 同节点上,不同容器之间的通信
  • 跨节点环境下,不同容器之间的通信

4.1 场景一: 从宿主机到容器

  1. 展示图:
    使用iptables规则链分析在docker+calico环境下数据包的流向_第5张图片
    从宿主机到容器
  2. ping -c 1 172.20.219.80
    使用iptables规则链分析在docker+calico环境下数据包的流向_第6张图片
    ping
  3. 查看ens33, 以及web1容器对应的网卡
    使用iptables规则链分析在docker+calico环境下数据包的流向_第7张图片
    ens33网卡

    使用iptables规则链分析在docker+calico环境下数据包的流向_第8张图片
    web1网卡
  4. tai -f /var/log/iptables
    调试日志,很多,只留下nat,filter表日志,其他表日志删除。
Dec  1 03:35:44 localhost kernel: TRACE: nat:OUTPUT:rule:1 IN= OUT=calid55c454dfaa SRC=172.16.91.225 DST=172.20.219.80 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=45708 DF PROTO8 CODE=0 ID=3584 SEQ=1 UID=0 GID=0 
Dec  1 03:35:44 localhost kernel: TRACE: nat:cali-OUTPUT:rule:1 IN= OUT=calid55c454dfaa SRC=172.16.91.225 DST=172.20.219.80 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=45708 DF TYPE=8 CODE=0 ID=3584 SEQ=1 UID=0 GID=0 
Dec  1 03:35:44 localhost kernel: TRACE: nat:cali-fip-dnat:return:1 IN= OUT=calid55c454dfaa SRC=172.16.91.225 DST=172.20.219.80 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=45708CMP TYPE=8 CODE=0 ID=3584 SEQ=1 UID=0 GID=0 
Dec  1 03:35:44 localhost kernel: TRACE: nat:cali-OUTPUT:return:2 IN= OUT=calid55c454dfaa SRC=172.16.91.225 DST=172.20.219.80 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=45708 DP TYPE=8 CODE=0 ID=3584 SEQ=1 UID=0 GID=0 
Dec  1 03:35:44 localhost kernel: TRACE: nat:OUTPUT:policy:3 IN= OUT=calid55c454dfaa SRC=172.16.91.225 DST=172.20.219.80 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=45708 DF PROE=8 CODE=0 ID=3584 SEQ=1 UID=0 GID=0 

Dec  1 03:35:44 localhost kernel: TRACE: filter:OUTPUT:rule:1 IN= OUT=calid55c454dfaa SRC=172.16.91.225 DST=172.20.219.80 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=45708 DF PRPE=8 CODE=0 ID=3584 SEQ=1 UID=0 GID=0 
Dec  1 03:35:44 localhost kernel: TRACE: filter:cali-OUTPUT:rule:2 IN= OUT=calid55c454dfaa SRC=172.16.91.225 DST=172.20.219.80 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=45708 MP TYPE=8 CODE=0 ID=3584 SEQ=1 UID=0 GID=0 
Dec  1 03:35:44 localhost kernel: TRACE: filter:OUTPUT:policy:2 IN= OUT=calid55c454dfaa SRC=172.16.91.225 DST=172.20.219.80 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=45708 DF TYPE=8 CODE=0 ID=3584 SEQ=1 UID=0 GID=0 

Dec  1 03:35:44 localhost kernel: TRACE: nat:POSTROUTING:rule:1 IN= OUT=calid55c454dfaa SRC=172.16.91.225 DST=172.20.219.80 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=45708 DF TYPE=8 CODE=0 ID=3584 SEQ=1 UID=0 GID=0 
Dec  1 03:35:44 localhost kernel: TRACE: nat:cali-POSTROUTING:rule:1 IN= OUT=calid55c454dfaa SRC=172.16.91.225 DST=172.20.219.80 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=4570ICMP TYPE=8 CODE=0 ID=3584 SEQ=1 UID=0 GID=0 
Dec  1 03:35:44 localhost kernel: TRACE: nat:cali-fip-snat:return:1 IN= OUT=calid55c454dfaa SRC=172.16.91.225 DST=172.20.219.80 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=45708CMP TYPE=8 CODE=0 ID=3584 SEQ=1 UID=0 GID=0 
Dec  1 03:35:44 localhost kernel: TRACE: nat:cali-POSTROUTING:rule:2 IN= OUT=calid55c454dfaa SRC=172.16.91.225 DST=172.20.219.80 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=4570ICMP TYPE=8 CODE=0 ID=3584 SEQ=1 UID=0 GID=0 
Dec  1 03:35:44 localhost kernel: TRACE: nat:cali-nat-outgoing:return:2 IN= OUT=calid55c454dfaa SRC=172.16.91.225 DST=172.20.219.80 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=4TO=ICMP TYPE=8 CODE=0 ID=3584 SEQ=1 UID=0 GID=0 
Dec  1 03:35:44 localhost kernel: TRACE: nat:cali-POSTROUTING:return:3 IN= OUT=calid55c454dfaa SRC=172.16.91.225 DST=172.20.219.80 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=45O=ICMP TYPE=8 CODE=0 ID=3584 SEQ=1 UID=0 GID=0 
Dec  1 03:35:44 localhost kernel: TRACE: nat:POSTROUTING:policy:3 IN= OUT=calid55c454dfaa SRC=172.16.91.225 DST=172.20.219.80 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=45708 DP TYPE=8 CODE=0 ID=3584 SEQ=1 UID=0 GID=0 

Dec  1 03:35:44 localhost kernel: TRACE: filter:INPUT:rule:1 IN=calid55c454dfaa OUT= MAC=d6:c3:32:3b:a6:bb:ee:ee:ee:ee:ee:ee:08:00 SRC=172.20.219.80 DST=172.16.91.225 LE00 PREC=0x00 TTL=64 ID=29622 PROTO=ICMP TYPE=0 CODE=0 ID=3584 SEQ=1 MARK=0x4000000 
Dec  1 03:35:44 localhost kernel: TRACE: filter:cali-INPUT:rule:2 IN=calid55c454dfaa OUT= MAC=d6:c3:32:3b:a6:bb:ee:ee:ee:ee:ee:ee:08:00 SRC=172.20.219.80 DST=172.16.91.2OS=0x00 PREC=0x00 TTL=64 ID=29622 PROTO=ICMP TYPE=0 CODE=0 ID=3584 SEQ=1 MARK=0x4000000 
Dec  1 03:35:44 localhost kernel: TRACE: filter:cali-wl-to-host:rule:1 IN=calid55c454dfaa OUT= MAC=d6:c3:32:3b:a6:bb:ee:ee:ee:ee:ee:ee:08:00 SRC=172.20.219.80 DST=172.16=84 TOS=0x00 PREC=0x00 TTL=64 ID=29622 PROTO=ICMP TYPE=0 CODE=0 ID=3584 SEQ=1 MARK=0x4000000 
Dec  1 03:35:44 localhost kernel: TRACE: filter:cali-from-wl-dispatch:rule:10 IN=calid55c454dfaa OUT= MAC=d6:c3:32:3b:a6:bb:ee:ee:ee:ee:ee:ee:08:00 SRC=172.20.219.80 DST225 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=29622 PROTO=ICMP TYPE=0 CODE=0 ID=3584 SEQ=1 MARK=0x4000000 
Dec  1 03:35:44 localhost kernel: TRACE: filter:cali-from-wl-dispatch-d:rule:1 IN=calid55c454dfaa OUT= MAC=d6:c3:32:3b:a6:bb:ee:ee:ee:ee:ee:ee:08:00 SRC=172.20.219.80 DS.225 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=29622 PROTO=ICMP TYPE=0 CODE=0 ID=3584 SEQ=1 MARK=0x4000000 
Dec  1 03:35:44 localhost kernel: TRACE: filter:cali-fw-calid55c454dfaa:rule:1 IN=calid55c454dfaa OUT= MAC=d6:c3:32:3b:a6:bb:ee:ee:ee:ee:ee:ee:08:00 SRC=172.20.219.80 DS.225 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=29622 PROTO=ICMP TYPE=0 CODE=0 ID=3584 SEQ=1 MARK=0x4000000
使用iptables规则链分析在docker+calico环境下数据包的流向_第9张图片
TYPE=8 CODE=0与TYPE=0 CODE=0说明

将上面的iptables 日志,转换成下面的流向图:

使用iptables规则链分析在docker+calico环境下数据包的流向_第10张图片
从宿主机到容器的数据包

iptables日志格式说明

使用iptables规则链分析在docker+calico环境下数据包的流向_第11张图片
iptables日志格式说明

https://blog.csdn.net/liukuan73/article/details/78635655
使用iptables规则链分析在docker+calico环境下数据包的流向_第12张图片
iptables日志格式说明

  1. 总结(从宿主机到容器的数据包流向图):
  • 宿主机到容器 走的是OUTPUT ---> POSTROUTING
  • 容器给宿主机的答复,走的是 INPUT链
  • 只能是主链之间的跳转,不能是子链调主链

4.2 场景二:从容器到宿主机

  1. 数据包流向图:

    使用iptables规则链分析在docker+calico环境下数据包的流向_第13张图片
    从容器到宿主机数据包流向图

  2. docker exec -it web1 ping -c 1 172.16.91.225


    使用iptables规则链分析在docker+calico环境下数据包的流向_第14张图片
    ping
  3. tail -f iptables.log

Dec  2 03:10:15 master kernel: TRACE: nat:PREROUTING:rule:1 IN=cali282b0776936 OUT= MAC=4a:0c:7a:74:5d:26:ee:ee:ee:ee:ee:ee:08:00 SRC=172.20.219.81 DST=172.16.91.225 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=45306 DF PROTO=ICMP TYPE=8 CODE=0 ID=12 SEQ=1 MARK=0x4000000 
Dec  2 03:10:15 master kernel: TRACE: nat:cali-PREROUTING:rule:1 IN=cali282b0776936 OUT= MAC=4a:0c:7a:74:5d:26:ee:ee:ee:ee:ee:ee:08:00 SRC=172.20.219.81 DST=172.16.91.225 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=45306 DF PROTO=ICMP TYPE=8 CODE=0 ID=12 SEQ=1 MARK=0x4000000 
Dec  2 03:10:15 master kernel: TRACE: nat:cali-fip-dnat:return:1 IN=cali282b0776936 OUT= MAC=4a:0c:7a:74:5d:26:ee:ee:ee:ee:ee:ee:08:00 SRC=172.20.219.81 DST=172.16.91.225 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=45306 DF PROTO=ICMP TYPE=8 CODE=0 ID=12 SEQ=1 MARK=0x4000000 
Dec  2 03:10:15 master kernel: TRACE: nat:cali-PREROUTING:return:2 IN=cali282b0776936 OUT= MAC=4a:0c:7a:74:5d:26:ee:ee:ee:ee:ee:ee:08:00 SRC=172.20.219.81 DST=172.16.91.225 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=45306 DF PROTO=ICMP TYPE=8 CODE=0 ID=12 SEQ=1 MARK=0x4000000 
Dec  2 03:10:15 master kernel: TRACE: nat:PREROUTING:rule:2 IN=cali282b0776936 OUT= MAC=4a:0c:7a:74:5d:26:ee:ee:ee:ee:ee:ee:08:00 SRC=172.20.219.81 DST=172.16.91.225 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=45306 DF PROTO=ICMP TYPE=8 CODE=0 ID=12 SEQ=1 MARK=0x4000000 
Dec  2 03:10:15 master kernel: TRACE: nat:DOCKER:return:2 IN=cali282b0776936 OUT= MAC=4a:0c:7a:74:5d:26:ee:ee:ee:ee:ee:ee:08:00 SRC=172.20.219.81 DST=172.16.91.225 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=45306 DF PROTO=ICMP TYPE=8 CODE=0 ID=12 SEQ=1 MARK=0x4000000 
Dec  2 03:10:15 master kernel: TRACE: nat:PREROUTING:policy:3 IN=cali282b0776936 OUT= MAC=4a:0c:7a:74:5d:26:ee:ee:ee:ee:ee:ee:08:00 SRC=172.20.219.81 DST=172.16.91.225 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=45306 DF PROTO=ICMP TYPE=8 CODE=0 ID=12 SEQ=1 MARK=0x4000000 


Dec  2 03:10:15 master kernel: TRACE: filter:INPUT:rule:1 IN=cali282b0776936 OUT= MAC=4a:0c:7a:74:5d:26:ee:ee:ee:ee:ee:ee:08:00 SRC=172.20.219.81 DST=172.16.91.225 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=45306 DF PROTO=ICMP TYPE=8 CODE=0 ID=12 SEQ=1 MARK=0x4000000 
Dec  2 03:10:15 master kernel: TRACE: filter:cali-INPUT:rule:2 IN=cali282b0776936 OUT= MAC=4a:0c:7a:74:5d:26:ee:ee:ee:ee:ee:ee:08:00 SRC=172.20.219.81 DST=172.16.91.225 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=45306 DF PROTO=ICMP TYPE=8 CODE=0 ID=12 SEQ=1 MARK=0x4000000 
Dec  2 03:10:15 master kernel: TRACE: filter:cali-wl-to-host:rule:1 IN=cali282b0776936 OUT= MAC=4a:0c:7a:74:5d:26:ee:ee:ee:ee:ee:ee:08:00 SRC=172.20.219.81 DST=172.16.91.225 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=45306 DF PROTO=ICMP TYPE=8 CODE=0 ID=12 SEQ=1 MARK=0x4000000 
Dec  2 03:10:15 master kernel: TRACE: filter:cali-from-wl-dispatch:rule:3 IN=cali282b0776936 OUT= MAC=4a:0c:7a:74:5d:26:ee:ee:ee:ee:ee:ee:08:00 SRC=172.20.219.81 DST=172.16.91.225 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=45306 DF PROTO=ICMP TYPE=8 CODE=0 ID=12 SEQ=1 MARK=0x4000000 
Dec  2 03:10:15 master kernel: TRACE: filter:cali-from-wl-dispatch-2:rule:1 IN=cali282b0776936 OUT= MAC=4a:0c:7a:74:5d:26:ee:ee:ee:ee:ee:ee:08:00 SRC=172.20.219.81 DST=172.16.91.225 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=45306 DF PROTO=ICMP TYPE=8 CODE=0 ID=12 SEQ=1 MARK=0x4000000 
Dec  2 03:10:15 master kernel: TRACE: filter:cali-fw-cali282b0776936:rule:3 IN=cali282b0776936 OUT= MAC=4a:0c:7a:74:5d:26:ee:ee:ee:ee:ee:ee:08:00 SRC=172.20.219.81 DST=172.16.91.225 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=45306 DF PROTO=ICMP TYPE=8 CODE=0 ID=12 SEQ=1 MARK=0x4000000 
Dec  2 03:10:15 master kernel: TRACE: filter:cali-fw-cali282b0776936:rule:4 IN=cali282b0776936 OUT= MAC=4a:0c:7a:74:5d:26:ee:ee:ee:ee:ee:ee:08:00 SRC=172.20.219.81 DST=172.16.91.225 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=45306 DF PROTO=ICMP TYPE=8 CODE=0 ID=12 SEQ=1 MARK=0x4000000 
Dec  2 03:10:15 master kernel: TRACE: filter:cali-pro-net1:rule:1 IN=cali282b0776936 OUT= MAC=4a:0c:7a:74:5d:26:ee:ee:ee:ee:ee:ee:08:00 SRC=172.20.219.81 DST=172.16.91.225 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=45306 DF PROTO=ICMP TYPE=8 CODE=0 ID=12 SEQ=1 MARK=0x4000000 
Dec  2 03:10:15 master kernel: TRACE: filter:cali-pro-net1:rule:2 IN=cali282b0776936 OUT= MAC=4a:0c:7a:74:5d:26:ee:ee:ee:ee:ee:ee:08:00 SRC=172.20.219.81 DST=172.16.91.225 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=45306 DF PROTO=ICMP TYPE=8 CODE=0 ID=12 SEQ=1 MARK=0x5000000 
Dec  2 03:10:15 master kernel: TRACE: filter:cali-fw-cali282b0776936:rule:5 IN=cali282b0776936 OUT= MAC=4a:0c:7a:74:5d:26:ee:ee:ee:ee:ee:ee:08:00 SRC=172.20.219.81 DST=172.16.91.225 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=45306 DF PROTO=ICMP TYPE=8 CODE=0 ID=12 SEQ=1 MARK=0x5000000 
Dec  2 03:10:15 master kernel: TRACE: filter:cali-wl-to-host:rule:2 IN=cali282b0776936 OUT= MAC=4a:0c:7a:74:5d:26:ee:ee:ee:ee:ee:ee:08:00 SRC=172.20.219.81 DST=172.16.91.225 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=45306 DF PROTO=ICMP TYPE=8 CODE=0 ID=12 SEQ=1 MARK=0x5000000 

Dec  2 03:10:15 master kernel: TRACE: nat:INPUT:policy:1 IN=cali282b0776936 OUT= MAC=4a:0c:7a:74:5d:26:ee:ee:ee:ee:ee:ee:08:00 SRC=172.20.219.81 DST=172.16.91.225 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=45306 DF PROTO=ICMP TYPE=8 CODE=0 ID=12 SEQ=1 MARK=0x5000000 

Dec  2 03:10:15 master kernel: TRACE: filter:OUTPUT:rule:1 IN= OUT=cali282b0776936 SRC=172.16.91.225 DST=172.20.219.81 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=20759 PROTO=ICMP TYPE=0 CODE=0 ID=12 SEQ=1 
Dec  2 03:10:15 master kernel: TRACE: filter:cali-OUTPUT:rule:2 IN= OUT=cali282b0776936 SRC=172.16.91.225 DST=172.20.219.81 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=20759 PROTO=ICMP TYPE=0 CODE=0 ID=12 SEQ=1 
Dec  2 03:10:15 master kernel: TRACE: filter:OUTPUT:policy:2 IN= OUT=cali282b0776936 SRC=172.16.91.225 DST=172.20.219.81 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=20759 PROTO=ICMP TYPE=0 CODE=0 ID=12 SEQ=1 

使用iptables规则链分析在docker+calico环境下数据包的流向_第15张图片
iptables规则说明
  1. 将上面的日志,转换成下面的流向图

    使用iptables规则链分析在docker+calico环境下数据包的流向_第16张图片
    流向图说明

  2. 总结(从容器到宿主机数据包流向图)

  • 容器到宿主机走的是路线是: PREOUTING ---> INPUT
  • 宿主机 答复 容器的 走的路线是: OUTPUT

4.3 场景三:从容器访问calico集群中的非宿主机

  1. 数据包流向图:

    使用iptables规则链分析在docker+calico环境下数据包的流向_第17张图片
    从容器到宿主机数据包流向图

  2. docker exec -it web1 ping -c 1 172.16.91.226


    使用iptables规则链分析在docker+calico环境下数据包的流向_第18张图片
    web1容器 ping slave1
  3. tail -f iptables.log
    master节点上iptables的日志

Dec  2 03:38:09 master kernel: TRACE: nat:PREROUTING:rule:1 IN=cali282b0776936 OUT= MAC=4a:0c:7a:74:5d:26:ee:ee:ee:ee:ee:ee:08:00 SRC=172.20.219.81 DST=172.16.91.226 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=13891 DF PROTO=ICMP TYPE=8 CODE=0 ID=17 SEQ=1 MARK=0x4000000 
Dec  2 03:38:09 master kernel: TRACE: nat:cali-PREROUTING:rule:1 IN=cali282b0776936 OUT= MAC=4a:0c:7a:74:5d:26:ee:ee:ee:ee:ee:ee:08:00 SRC=172.20.219.81 DST=172.16.91.226 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=13891 DF PROTO=ICMP TYPE=8 CODE=0 ID=17 SEQ=1 MARK=0x4000000 
Dec  2 03:38:09 master kernel: TRACE: nat:cali-fip-dnat:return:1 IN=cali282b0776936 OUT= MAC=4a:0c:7a:74:5d:26:ee:ee:ee:ee:ee:ee:08:00 SRC=172.20.219.81 DST=172.16.91.226 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=13891 DF PROTO=ICMP TYPE=8 CODE=0 ID=17 SEQ=1 MARK=0x4000000 
Dec  2 03:38:09 master kernel: TRACE: nat:cali-PREROUTING:return:2 IN=cali282b0776936 OUT= MAC=4a:0c:7a:74:5d:26:ee:ee:ee:ee:ee:ee:08:00 SRC=172.20.219.81 DST=172.16.91.226 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=13891 DF PROTO=ICMP TYPE=8 CODE=0 ID=17 SEQ=1 MARK=0x4000000 
Dec  2 03:38:09 master kernel: TRACE: nat:PREROUTING:policy:3 IN=cali282b0776936 OUT= MAC=4a:0c:7a:74:5d:26:ee:ee:ee:ee:ee:ee:08:00 SRC=172.20.219.81 DST=172.16.91.226 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=13891 DF PROTO=ICMP TYPE=8 CODE=0 ID=17 SEQ=1 MARK=0x4000000 

Dec  2 03:38:09 master kernel: TRACE: filter:FORWARD:rule:1 IN=cali282b0776936 OUT=ens33 MAC=4a:0c:7a:74:5d:26:ee:ee:ee:ee:ee:ee:08:00 SRC=172.20.219.81 DST=172.16.91.226 LEN=84 TOS=0x00 PREC=0x00 TTL=63 ID=13891 DF PROTO=ICMP TYPE=8 CODE=0 ID=17 SEQ=1 MARK=0x4000000 
Dec  2 03:38:09 master kernel: TRACE: filter:cali-FORWARD:rule:1 IN=cali282b0776936 OUT=ens33 MAC=4a:0c:7a:74:5d:26:ee:ee:ee:ee:ee:ee:08:00 SRC=172.20.219.81 DST=172.16.91.226 LEN=84 TOS=0x00 PREC=0x00 TTL=63 ID=13891 DF PROTO=ICMP TYPE=8 CODE=0 ID=17 SEQ=1 MARK=0x4000000 
Dec  2 03:38:09 master kernel: TRACE: filter:cali-from-wl-dispatch:rule:3 IN=cali282b0776936 OUT=ens33 MAC=4a:0c:7a:74:5d:26:ee:ee:ee:ee:ee:ee:08:00 SRC=172.20.219.81 DST=172.16.91.226 LEN=84 TOS=0x00 PREC=0x00 TTL=63 ID=13891 DF PROTO=ICMP TYPE=8 CODE=0 ID=17 SEQ=1 MARK=0x4000000 
Dec  2 03:38:09 master kernel: TRACE: filter:cali-from-wl-dispatch-2:rule:1 IN=cali282b0776936 OUT=ens33 MAC=4a:0c:7a:74:5d:26:ee:ee:ee:ee:ee:ee:08:00 SRC=172.20.219.81 DST=172.16.91.226 LEN=84 TOS=0x00 PREC=0x00 TTL=63 ID=13891 DF PROTO=ICMP TYPE=8 CODE=0 ID=17 SEQ=1 MARK=0x4000000 
Dec  2 03:38:09 master kernel: TRACE: filter:cali-fw-cali282b0776936:rule:3 IN=cali282b0776936 OUT=ens33 MAC=4a:0c:7a:74:5d:26:ee:ee:ee:ee:ee:ee:08:00 SRC=172.20.219.81 DST=172.16.91.226 LEN=84 TOS=0x00 PREC=0x00 TTL=63 ID=13891 DF PROTO=ICMP TYPE=8 CODE=0 ID=17 SEQ=1 MARK=0x4000000 
Dec  2 03:38:09 master kernel: TRACE: filter:cali-fw-cali282b0776936:rule:4 IN=cali282b0776936 OUT=ens33 MAC=4a:0c:7a:74:5d:26:ee:ee:ee:ee:ee:ee:08:00 SRC=172.20.219.81 DST=172.16.91.226 LEN=84 TOS=0x00 PREC=0x00 TTL=63 ID=13891 DF PROTO=ICMP TYPE=8 CODE=0 ID=17 SEQ=1 MARK=0x4000000 
Dec  2 03:38:09 master kernel: TRACE: filter:cali-pro-net1:rule:1 IN=cali282b0776936 OUT=ens33 MAC=4a:0c:7a:74:5d:26:ee:ee:ee:ee:ee:ee:08:00 SRC=172.20.219.81 DST=172.16.91.226 LEN=84 TOS=0x00 PREC=0x00 TTL=63 ID=13891 DF PROTO=ICMP TYPE=8 CODE=0 ID=17 SEQ=1 MARK=0x4000000 
Dec  2 03:38:09 master kernel: TRACE: filter:cali-pro-net1:rule:2 IN=cali282b0776936 OUT=ens33 MAC=4a:0c:7a:74:5d:26:ee:ee:ee:ee:ee:ee:08:00 SRC=172.20.219.81 DST=172.16.91.226 LEN=84 TOS=0x00 PREC=0x00 TTL=63 ID=13891 DF PROTO=ICMP TYPE=8 CODE=0 ID=17 SEQ=1 MARK=0x5000000 
Dec  2 03:38:09 master kernel: TRACE: filter:cali-fw-cali282b0776936:rule:5 IN=cali282b0776936 OUT=ens33 MAC=4a:0c:7a:74:5d:26:ee:ee:ee:ee:ee:ee:08:00 SRC=172.20.219.81 DST=172.16.91.226 LEN=84 TOS=0x00 PREC=0x00 TTL=63 ID=13891 DF PROTO=ICMP TYPE=8 CODE=0 ID=17 SEQ=1 MARK=0x5000000 
Dec  2 03:38:09 master kernel: TRACE: filter:cali-FORWARD:rule:3 IN=cali282b0776936 OUT=ens33 MAC=4a:0c:7a:74:5d:26:ee:ee:ee:ee:ee:ee:08:00 SRC=172.20.219.81 DST=172.16.91.226 LEN=84 TOS=0x00 PREC=0x00 TTL=63 ID=13891 DF PROTO=ICMP TYPE=8 CODE=0 ID=17 SEQ=1 MARK=0x5000000 

Dec  2 03:38:09 master kernel: TRACE: nat:POSTROUTING:rule:1 IN= OUT=ens33 SRC=172.20.219.81 DST=172.16.91.226 LEN=84 TOS=0x00 PREC=0x00 TTL=63 ID=13891 DF PROTO=ICMP TYPE=8 CODE=0 ID=17 SEQ=1 MARK=0x5000000 
Dec  2 03:38:09 master kernel: TRACE: nat:cali-POSTROUTING:rule:1 IN= OUT=ens33 SRC=172.20.219.81 DST=172.16.91.226 LEN=84 TOS=0x00 PREC=0x00 TTL=63 ID=13891 DF PROTO=ICMP TYPE=8 CODE=0 ID=17 SEQ=1 MARK=0x5000000 
Dec  2 03:38:09 master kernel: TRACE: nat:cali-fip-snat:return:1 IN= OUT=ens33 SRC=172.20.219.81 DST=172.16.91.226 LEN=84 TOS=0x00 PREC=0x00 TTL=63 ID=13891 DF PROTO=ICMP TYPE=8 CODE=0 ID=17 SEQ=1 MARK=0x5000000 
Dec  2 03:38:09 master kernel: TRACE: nat:cali-POSTROUTING:rule:2 IN= OUT=ens33 SRC=172.20.219.81 DST=172.16.91.226 LEN=84 TOS=0x00 PREC=0x00 TTL=63 ID=13891 DF PROTO=ICMP TYPE=8 CODE=0 ID=17 SEQ=1 MARK=0x5000000 
Dec  2 03:38:09 master kernel: TRACE: nat:cali-nat-outgoing:rule:1 IN= OUT=ens33 SRC=172.20.219.81 DST=172.16.91.226 LEN=84 TOS=0x00 PREC=0x00 TTL=63 ID=13891 DF PROTO=ICMP TYPE=8 CODE=0 ID=17 SEQ=1 MARK=0x5000000 

Dec  2 03:38:09 master kernel: TRACE: filter:FORWARD:rule:1 IN=ens33 OUT=cali282b0776936 MAC=00:0c:29:2e:0f:7b:00:0c:29:5e:b2:88:08:00 SRC=172.16.91.226 DST=172.20.219.81 LEN=84 TOS=0x00 PREC=0x00 TTL=63 ID=45474 PROTO=ICMP TYPE=0 CODE=0 ID=17 SEQ=1 
Dec  2 03:38:09 master kernel: TRACE: filter:cali-FORWARD:rule:2 IN=ens33 OUT=cali282b0776936 MAC=00:0c:29:2e:0f:7b:00:0c:29:5e:b2:88:08:00 SRC=172.16.91.226 DST=172.20.219.81 LEN=84 TOS=0x00 PREC=0x00 TTL=63 ID=45474 PROTO=ICMP TYPE=0 CODE=0 ID=17 SEQ=1 
Dec  2 03:38:09 master kernel: TRACE: filter:cali-to-wl-dispatch:rule:3 IN=ens33 OUT=cali282b0776936 MAC=00:0c:29:2e:0f:7b:00:0c:29:5e:b2:88:08:00 SRC=172.16.91.226 DST=172.20.219.81 LEN=84 TOS=0x00 PREC=0x00 TTL=63 ID=45474 PROTO=ICMP TYPE=0 CODE=0 ID=17 SEQ=1 
Dec  2 03:38:09 master kernel: TRACE: filter:cali-to-wl-dispatch-2:rule:1 IN=ens33 OUT=cali282b0776936 MAC=00:0c:29:2e:0f:7b:00:0c:29:5e:b2:88:08:00 SRC=172.16.91.226 DST=172.20.219.81 LEN=84 TOS=0x00 PREC=0x00 TTL=63 ID=45474 PROTO=ICMP TYPE=0 CODE=0 ID=17 SEQ=1 
Dec  2 03:38:09 master kernel: TRACE: filter:cali-tw-cali282b0776936:rule:1 IN=ens33 OUT=cali282b0776936 MAC=00:0c:29:2e:0f:7b:00:0c:29:5e:b2:88:08:00 SRC=172.16.91.226 DST=172.20.219.81 LEN=84 TOS=0x00 PREC=0x00 TTL=63 ID=45474 PROTO=ICMP TYPE=0 CODE=0 ID=17 SEQ=1 

slave1节点上iptables的日志

Dec  2 03:38:09 slave1 kernel: TRACE: nat:PREROUTING:rule:1 IN=ens33 OUT= MAC=00:0c:29:5e:b2:88:00:0c:29:2e:0f:7b:08:00 SRC=172.16.91.225 DST=172.16.91.226 LEN=84 TOS=0x00 PREC=0x00 TTL=63 ID=13891 DF PROTO=ICMP TYPE=8 CODE=0 ID=17 SEQ=1 
Dec  2 03:38:09 slave1 kernel: TRACE: nat:cali-PREROUTING:rule:1 IN=ens33 OUT= MAC=00:0c:29:5e:b2:88:00:0c:29:2e:0f:7b:08:00 SRC=172.16.91.225 DST=172.16.91.226 LEN=84 TOS=0x00 PREC=0x00 TTL=63 ID=13891 DF PROTO=ICMP TYPE=8 CODE=0 ID=17 SEQ=1 
Dec  2 03:38:09 slave1 kernel: TRACE: nat:cali-fip-dnat:return:1 IN=ens33 OUT= MAC=00:0c:29:5e:b2:88:00:0c:29:2e:0f:7b:08:00 SRC=172.16.91.225 DST=172.16.91.226 LEN=84 TOS=0x00 PREC=0x00 TTL=63 ID=13891 DF PROTO=ICMP TYPE=8 CODE=0 ID=17 SEQ=1 
Dec  2 03:38:09 slave1 kernel: TRACE: nat:cali-PREROUTING:return:2 IN=ens33 OUT= MAC=00:0c:29:5e:b2:88:00:0c:29:2e:0f:7b:08:00 SRC=172.16.91.225 DST=172.16.91.226 LEN=84 TOS=0x00 PREC=0x00 TTL=63 ID=13891 DF PROTO=ICMP TYPE=8 CODE=0 ID=17 SEQ=1 
Dec  2 03:38:09 slave1 kernel: TRACE: nat:PREROUTING:rule:2 IN=ens33 OUT= MAC=00:0c:29:5e:b2:88:00:0c:29:2e:0f:7b:08:00 SRC=172.16.91.225 DST=172.16.91.226 LEN=84 TOS=0x00 PREC=0x00 TTL=63 ID=13891 DF PROTO=ICMP TYPE=8 CODE=0 ID=17 SEQ=1 
Dec  2 03:38:09 slave1 kernel: TRACE: nat:DOCKER:return:2 IN=ens33 OUT= MAC=00:0c:29:5e:b2:88:00:0c:29:2e:0f:7b:08:00 SRC=172.16.91.225 DST=172.16.91.226 LEN=84 TOS=0x00 PREC=0x00 TTL=63 ID=13891 DF PROTO=ICMP TYPE=8 CODE=0 ID=17 SEQ=1 
Dec  2 03:38:09 slave1 kernel: TRACE: nat:PREROUTING:policy:3 IN=ens33 OUT= MAC=00:0c:29:5e:b2:88:00:0c:29:2e:0f:7b:08:00 SRC=172.16.91.225 DST=172.16.91.226 LEN=84 TOS=0x00 PREC=0x00 TTL=63 ID=13891 DF PROTO=ICMP TYPE=8 CODE=0 ID=17 SEQ=1 

Dec  2 03:38:09 slave1 kernel: TRACE: filter:INPUT:rule:1 IN=ens33 OUT= MAC=00:0c:29:5e:b2:88:00:0c:29:2e:0f:7b:08:00 SRC=172.16.91.225 DST=172.16.91.226 LEN=84 TOS=0x00 PREC=0x00 TTL=63 ID=13891 DF PROTO=ICMP TYPE=8 CODE=0 ID=17 SEQ=1 
Dec  2 03:38:09 slave1 kernel: TRACE: filter:cali-INPUT:rule:3 IN=ens33 OUT= MAC=00:0c:29:5e:b2:88:00:0c:29:2e:0f:7b:08:00 SRC=172.16.91.225 DST=172.16.91.226 LEN=84 TOS=0x00 PREC=0x00 TTL=63 ID=13891 DF PROTO=ICMP TYPE=8 CODE=0 ID=17 SEQ=1 
Dec  2 03:38:09 slave1 kernel: TRACE: filter:cali-INPUT:rule:4 IN=ens33 OUT= MAC=00:0c:29:5e:b2:88:00:0c:29:2e:0f:7b:08:00 SRC=172.16.91.225 DST=172.16.91.226 LEN=84 TOS=0x00 PREC=0x00 TTL=63 ID=13891 DF PROTO=ICMP TYPE=8 CODE=0 ID=17 SEQ=1 
Dec  2 03:38:09 slave1 kernel: TRACE: filter:cali-from-host-endpoint:return:1 IN=ens33 OUT= MAC=00:0c:29:5e:b2:88:00:0c:29:2e:0f:7b:08:00 SRC=172.16.91.225 DST=172.16.91.226 LEN=84 TOS=0x00 PREC=0x00 TTL=63 ID=13891 DF PROTO=ICMP TYPE=8 CODE=0 ID=17 SEQ=1 
Dec  2 03:38:09 slave1 kernel: TRACE: filter:cali-INPUT:return:6 IN=ens33 OUT= MAC=00:0c:29:5e:b2:88:00:0c:29:2e:0f:7b:08:00 SRC=172.16.91.225 DST=172.16.91.226 LEN=84 TOS=0x00 PREC=0x00 TTL=63 ID=13891 DF PROTO=ICMP TYPE=8 CODE=0 ID=17 SEQ=1 
Dec  2 03:38:09 slave1 kernel: TRACE: filter:INPUT:policy:2 IN=ens33 OUT= MAC=00:0c:29:5e:b2:88:00:0c:29:2e:0f:7b:08:00 SRC=172.16.91.225 DST=172.16.91.226 LEN=84 TOS=0x00 PREC=0x00 TTL=63 ID=13891 DF PROTO=ICMP TYPE=8 CODE=0 ID=17 SEQ=1 
Dec  2 03:38:09 slave1 kernel: TRACE: nat:INPUT:policy:1 IN=ens33 OUT= MAC=00:0c:29:5e:b2:88:00:0c:29:2e:0f:7b:08:00 SRC=172.16.91.225 DST=172.16.91.226 LEN=84 TOS=0x00 PREC=0x00 TTL=63 ID=13891 DF PROTO=ICMP TYPE=8 CODE=0 ID=17 SEQ=1 

Dec  2 03:38:09 slave1 kernel: TRACE: filter:OUTPUT:rule:1 IN= OUT=ens33 SRC=172.16.91.226 DST=172.16.91.225 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=45474 PROTO=ICMP TYPE=0 CODE=0 ID=17 SEQ=1 
Dec  2 03:38:09 slave1 kernel: TRACE: filter:cali-OUTPUT:rule:3 IN= OUT=ens33 SRC=172.16.91.226 DST=172.16.91.225 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=45474 PROTO=ICMP TYPE=0 CODE=0 ID=17 SEQ=1 
Dec  2 03:38:09 slave1 kernel: TRACE: filter:cali-OUTPUT:rule:4 IN= OUT=ens33 SRC=172.16.91.226 DST=172.16.91.225 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=45474 PROTO=ICMP TYPE=0 CODE=0 ID=17 SEQ=1 
Dec  2 03:38:09 slave1 kernel: TRACE: filter:cali-to-host-endpoint:return:1 IN= OUT=ens33 SRC=172.16.91.226 DST=172.16.91.225 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=45474 PROTO=ICMP TYPE=0 CODE=0 ID=17 SEQ=1 
Dec  2 03:38:09 slave1 kernel: TRACE: filter:cali-OUTPUT:return:6 IN= OUT=ens33 SRC=172.16.91.226 DST=172.16.91.225 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=45474 PROTO=ICMP TYPE=0 CODE=0 ID=17 SEQ=1 
Dec  2 03:38:09 slave1 kernel: TRACE: filter:OUTPUT:policy:2 IN= OUT=ens33 SRC=172.16.91.226 DST=172.16.91.225 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=45474 PROTO=ICMP TYPE=0 CODE=0 ID=17 SEQ=1 

  1. 将上面的日志,转换成下面的流向图

    使用iptables规则链分析在docker+calico环境下数据包的流向_第19张图片
    master节点流向图说明

    使用iptables规则链分析在docker+calico环境下数据包的流向_第20张图片
    slave1节点流向图说明

  2. 总结(从容器到宿主机数据包流向图)

  • web1容器到slave1宿主机走的是路线是:
    • master节点
      • PREROUTING ---> FORWARD ---> POSTROUTING
    • slave1节点上
      • PREROUTING ---> INPUT
  • slave1宿主机 答复 web1容器的 走的路线是:
    • slave1节点上
      • OUTPUT
    • master节点上
      • FORWARD

4.4 场景四:从calico集群中非宿主机访问容器

  1. 数据包流向图:

    使用iptables规则链分析在docker+calico环境下数据包的流向_第21张图片
    从容器到宿主机数据包流向图

  2. ping -c 1 172.20.219.81

    使用iptables规则链分析在docker+calico环境下数据包的流向_第22张图片
    slave1 ping web1

    默认情况下,是ping不通的
    使用iptables规则链分析在docker+calico环境下数据包的流向_第23张图片
    slave1网卡ens33

  3. 将上面的日志,转换成下面的流向图

    使用iptables规则链分析在docker+calico环境下数据包的流向_第24张图片
    slave1节点流向图说明

    使用iptables规则链分析在docker+calico环境下数据包的流向_第25张图片
    master节点流向图说明

  4. 总结(从容器到宿主机数据包流向图)

  • slave1宿主机 到 web1容器走的是路线是:
    • slave1节点上
      • OUTPUT ---> POSTROUTING
    • master节点上
      • PREROUTING ---> FORWARD
  1. 解析下,为什么默认情况下,slave1节点ping不同master节点上的web容器
    默认情况下profile策略里规定了进入容器的规则里,含有标签net1,也就是同一个calico网络里的容器才能访问,而slave1节点不属于net1网络,因此进不去。
    使用iptables规则链分析在docker+calico环境下数据包的流向_第26张图片
    profile

    下面从iptables规则链里查看原因?
    master节点上,查看iptables的日志,如下:
Dec  2 04:20:14 master kernel: TRACE: nat:PREROUTING:rule:1 IN=ens33 OUT= MAC=00:0c:29:2e:0f:7b:00:0c:29:5e:b2:88:08:00 SRC=172.16.91.226 DST=172.20.219.81 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=21102 DF PROTO=ICMP TYPE=8 CODE=0 ID=2916 SEQ=1 
Dec  2 04:20:14 master kernel: TRACE: nat:cali-PREROUTING:rule:1 IN=ens33 OUT= MAC=00:0c:29:2e:0f:7b:00:0c:29:5e:b2:88:08:00 SRC=172.16.91.226 DST=172.20.219.81 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=21102 DF PROTO=ICMP TYPE=8 CODE=0 ID=2916 SEQ=1 
Dec  2 04:20:14 master kernel: TRACE: nat:cali-fip-dnat:return:1 IN=ens33 OUT= MAC=00:0c:29:2e:0f:7b:00:0c:29:5e:b2:88:08:00 SRC=172.16.91.226 DST=172.20.219.81 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=21102 DF PROTO=ICMP TYPE=8 CODE=0 ID=2916 SEQ=1 
Dec  2 04:20:14 master kernel: TRACE: nat:cali-PREROUTING:return:2 IN=ens33 OUT= MAC=00:0c:29:2e:0f:7b:00:0c:29:5e:b2:88:08:00 SRC=172.16.91.226 DST=172.20.219.81 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=21102 DF PROTO=ICMP TYPE=8 CODE=0 ID=2916 SEQ=1 
Dec  2 04:20:14 master kernel: TRACE: nat:PREROUTING:policy:3 IN=ens33 OUT= MAC=00:0c:29:2e:0f:7b:00:0c:29:5e:b2:88:08:00 SRC=172.16.91.226 DST=172.20.219.81 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=21102 DF PROTO=ICMP TYPE=8 CODE=0 ID=2916 SEQ=1 

Dec  2 04:20:14 master kernel: TRACE: filter:FORWARD:rule:1 IN=ens33 OUT=cali282b0776936 MAC=00:0c:29:2e:0f:7b:00:0c:29:5e:b2:88:08:00 SRC=172.16.91.226 DST=172.20.219.81 LEN=84 TOS=0x00 PREC=0x00 TTL=63 ID=21102 DF PROTO=ICMP TYPE=8 CODE=0 ID=2916 SEQ=1 
Dec  2 04:20:14 master kernel: TRACE: filter:cali-FORWARD:rule:2 IN=ens33 OUT=cali282b0776936 MAC=00:0c:29:2e:0f:7b:00:0c:29:5e:b2:88:08:00 SRC=172.16.91.226 DST=172.20.219.81 LEN=84 TOS=0x00 PREC=0x00 TTL=63 ID=21102 DF PROTO=ICMP TYPE=8 CODE=0 ID=2916 SEQ=1 
Dec  2 04:20:14 master kernel: TRACE: filter:cali-to-wl-dispatch:rule:3 IN=ens33 OUT=cali282b0776936 MAC=00:0c:29:2e:0f:7b:00:0c:29:5e:b2:88:08:00 SRC=172.16.91.226 DST=172.20.219.81 LEN=84 TOS=0x00 PREC=0x00 TTL=63 ID=21102 DF PROTO=ICMP TYPE=8 CODE=0 ID=2916 SEQ=1 
Dec  2 04:20:14 master kernel: TRACE: filter:cali-to-wl-dispatch-2:rule:1 IN=ens33 OUT=cali282b0776936 MAC=00:0c:29:2e:0f:7b:00:0c:29:5e:b2:88:08:00 SRC=172.16.91.226 DST=172.20.219.81 LEN=84 TOS=0x00 PREC=0x00 TTL=63 ID=21102 DF PROTO=ICMP TYPE=8 CODE=0 ID=2916 SEQ=1 
Dec  2 04:20:14 master kernel: TRACE: filter:cali-tw-cali282b0776936:rule:3 IN=ens33 OUT=cali282b0776936 MAC=00:0c:29:2e:0f:7b:00:0c:29:5e:b2:88:08:00 SRC=172.16.91.226 DST=172.20.219.81 LEN=84 TOS=0x00 PREC=0x00 TTL=63 ID=21102 DF PROTO=ICMP TYPE=8 CODE=0 ID=2916 SEQ=1 
Dec  2 04:20:14 master kernel: TRACE: filter:cali-tw-cali282b0776936:rule:4 IN=ens33 OUT=cali282b0776936 MAC=00:0c:29:2e:0f:7b:00:0c:29:5e:b2:88:08:00 SRC=172.16.91.226 DST=172.20.219.81 LEN=84 TOS=0x00 PREC=0x00 TTL=63 ID=21102 DF PROTO=ICMP TYPE=8 CODE=0 ID=2916 SEQ=1 
Dec  2 04:20:14 master kernel: TRACE: filter:cali-pri-net1:return:3 IN=ens33 OUT=cali282b0776936 MAC=00:0c:29:2e:0f:7b:00:0c:29:5e:b2:88:08:00 SRC=172.16.91.226 DST=172.20.219.81 LEN=84 TOS=0x00 PREC=0x00 TTL=63 ID=21102 DF PROTO=ICMP TYPE=8 CODE=0 ID=2916 SEQ=1 
Dec  2 04:20:14 master kernel: TRACE: filter:cali-tw-cali282b0776936:rule:6 IN=ens33 OUT=cali282b0776936 MAC=00:0c:29:2e:0f:7b:00:0c:29:5e:b2:88:08:00 SRC=172.16.91.226 DST=172.20.219.81 LEN=84 TOS=0x00 PREC=0x00 TTL=63 ID=21102 DF PROTO=ICMP TYPE=8 CODE=0 ID=2916 SEQ=1 

我们重点看下filter表里的规则链

使用iptables规则链分析在docker+calico环境下数据包的流向_第27张图片
master节点上分析iptables规则链1

使用iptables规则链分析在docker+calico环境下数据包的流向_第28张图片
master节点上分析iptables规则链2

使用iptables规则链分析在docker+calico环境下数据包的流向_第29张图片
master节点上分析iptables规则链3

使用iptables规则链分析在docker+calico环境下数据包的流向_第30张图片
master节点上分析iptables规则链4

使用iptables规则链分析在docker+calico环境下数据包的流向_第31张图片
master节点上分析iptables规则链5

使用iptables规则链分析在docker+calico环境下数据包的流向_第32张图片
master节点上分析iptables规则链6

使用iptables规则链分析在docker+calico环境下数据包的流向_第33张图片
master节点上分析iptables规则链7

使用iptables规则链分析在docker+calico环境下数据包的流向_第34张图片
master节点上分析iptables规则链8

使用iptables规则链分析在docker+calico环境下数据包的流向_第35张图片
master节点上分析iptables规则链9

profile文件中source属性里的tag 是由ipset模块来控制的
可以通过删除tag,添加tag来观察不同之处
source属性

4.5 场景五:同节点上,不同容器之间的访问

  1. 数据包流向图:

    使用iptables规则链分析在docker+calico环境下数据包的流向_第36张图片
    从容器到宿主机数据包流向图

  2. docker exec -it web1 ping -c 1 172.20.219.84


    使用iptables规则链分析在docker+calico环境下数据包的流向_第37张图片
    同节点上不同容器之间的ping
  3. tail -f iptables.log
    日志太多了,就不贴了。

  4. 将上面的日志,转换成下面的流向图

    使用iptables规则链分析在docker+calico环境下数据包的流向_第38张图片
    流向图说明

  5. 总结(从容器到宿主机数据包流向图)

  • web1容器到web2容器走的是路线是:
    • PREROUTING ---> FORWARD ---> POSTROUTING
  • web2容器 答复 web1容器的 走的路线是:
    • FORWARD

4.6 场景六:跨节点,容器间互相访问

  1. 数据包流向图:

    使用iptables规则链分析在docker+calico环境下数据包的流向_第39张图片
    从web1容器到web3容器数据包流向图

  2. docker exec -it web1 ping -c 1 web3


    使用iptables规则链分析在docker+calico环境下数据包的流向_第40张图片
    跨节点容器ping测试
  3. tail -f iptables.log
    日志太多,不上传了。

  4. 将上面的日志,转换成下面的流向图

    使用iptables规则链分析在docker+calico环境下数据包的流向_第41张图片
    master节点流向图说明

    使用iptables规则链分析在docker+calico环境下数据包的流向_第42张图片
    slave1节点流向图说明

  5. 总结(从容器到宿主机数据包流向图)

  • master节点上 从web1容器到web3容器走的是路线是:
    • PREROUTING ---> FORWARD ---> POSTROUTING
    • FORWARD
  • slave1节点上 走的路线是:
    • PREROUTING ---> FORWARD ---> POSTROUTING
    • FORWARD

你可能感兴趣的:(使用iptables规则链分析在docker+calico环境下数据包的流向)