calico+docker环境下网络分析

一、背景说明

    在docker+calico环境下,通过抓取数据包的方式简单分析的数据包走向

二、初始环境介绍

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 版本介绍

    calico+docker环境下网络分析_第1张图片
    docker版本

  2. calico 版本介绍

    calico+docker环境下网络分析_第2张图片
    calico版本

  3. etcd 版本介绍

    calico+docker环境下网络分析_第3张图片
    etcd版本

2.3 当前实例运行情况介绍

master节点

slave1节点

slave2节点

2.4 准备测试镜像

  1. 创建Dockerfile

    vim Dockerfile

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

    docker build -t mybusybox .
    

2.5 测试工具

tcpdump
进行抓包

三、单节点容器流量走向分析

3.1 测试准备阶段

  1. 创建calico网络net1、net2

    docker network create --driver calico --ipam-driver calico-ipam net1
    docker network create --driver calico --ipam-driver calico-ipam net2
    
    calico+docker环境下网络分析_第4张图片
    create net1
  2. 查看net1的默认策略

    calicoctl get profile net1 -oyaml 
    
    calico+docker环境下网络分析_第5张图片
    net1 profile
  3. calico采用的模式

    calico+docker环境下网络分析_第6张图片
    calico网络采用的网络模式

  4. 创建容器

    docker run --net net1 --name web1 -itd  mybusybox    
    docker run --net net1 --name web2 -itd  mybusybox  
    docker run --net net2 --name web3 -itd  mybusybox  
    
    calico+docker环境下网络分析_第7张图片
    create container web1, web2, web3

3.2 新生成的网卡说明

  1. 查看master节点路由信息
    ip r s
    
    calico+docker环境下网络分析_第8张图片
    master节点

    calico+docker环境下网络分析_第9张图片
    web1容器
  2. 新生成的网卡calif51b85e3399跟容器中的网卡的关系
    calico+docker环境下网络分析_第10张图片
    master新生成的网卡跟web1网卡之间的关系
  3. 删除直连路由?
    calico+docker环境下网络分析_第11张图片
    删掉直连路由

3.3 测试阶段

3.3.1 同一个calico网络内的容器通信测试

物理机跟容器之间的通信,是如何完成的?

3.3.1.1 master节点 ping web1?

  1. 数据包流向图

    calico+docker环境下网络分析_第12张图片
    数据包流向图

  2. master ping web1

    ping 172.20.219.82
    
  3. 删除web1的直连路由

    route del -host 172.20.219.82 dev calif51b85e3399 
    
  4. ens33网卡,calif51b85e3399网卡 抓包

    tcpdump -nn -i ens33 icmp and dst 
    tcpdump -nn -i calif51b85e3399 icmp 
    

    calico+docker环境下网络分析_第13张图片
    master ping web1

    calico+docker环境下网络分析_第14张图片
    tcpdump

  5. 总结:

    • 从物理机直接访问本节点上的容器,不会走物理机的网卡eth0或者ens33
    • 直接发到容器的网卡

3.3.2 同一节点上,容器之间的通信,是如何完成的?

  1. 数据包流向图

    calico+docker环境下网络分析_第15张图片
    数据包流向图

  2. web1 ping web2

    calico+docker环境下网络分析_第16张图片
    ping命令

    • 如果数据包的方向是,web1容器 ping web2容器的话,用的是
      172.20.219.83 dev cali6eea1d7a4a3 scope link
    • 如果数据包的方向是,web2容器 ping web1容器的话,用的是
      172.20.219.82 dev calif51b85e3399 scope link
    • 如果ping不通的话,可以查看对应的路由是否存在

3.3.3 不同calico网络间的容器通信测试

  1. web1 ping web3
    calico+docker环境下网络分析_第17张图片
    不同Calico网络间容器通信

四、跨节点容器流量走向分析

4.1 在slave1节点上,创建一容器b-web1

  1. 创建容器b-web1(slave1节点操作)
    docker run --net net1 --name b-web1 -itd mybusybox  
    
    calico+docker环境下网络分析_第18张图片
    create b-web1 container
  2. 查看slave1节点上路由、网卡信息(slave1节点操作)
    ip r s  
    ip a s 
    
    calico+docker环境下网络分析_第19张图片
    路由,网卡信息
  3. 查看容器b-web1的网卡信息(slave1节点操作)
    docker exec -it b-web1 ip a s
    
    calico+docker环境下网络分析_第20张图片
    b-web1网卡信息

4.2 物理机master节点 ping b-web1

  1. 数据包流向图

    calico+docker环境下网络分析_第21张图片
    数据包流向图

  2. 登陆到master节点上(master节点操作)

    ping 172.20.140.193
    

    calico+docker环境下网络分析_第22张图片
    物理机ping容器b-web1

    calico+docker环境下网络分析_第23张图片
    物理机ping容器b-web1

4.3 b-web1 ping web1(master节点操作)

  1. 数据包流向图
    calico+docker环境下网络分析_第24张图片
    数据包流向图
  2. web1 ping b-web1
    docker exec -it web1 ping -c 2 b-web1     
    
  • master节点 上 进行抓包
    calico+docker环境下网络分析_第25张图片
    web1 ping b-web1
  • slave1节点 上 进行抓包
    calico+docker环境下网络分析_第26张图片
    web1 ping b-web1

4.4 总结:

  • 默认情况下,其他节点物理IP不能访问本节点上的容器
  • 不同节点上的容器的IP是唯一的,对方可以看的到,不用进行NAT转换,从抓包中可以看出来,ip并没有进行变化。

你可能感兴趣的:(calico+docker环境下网络分析)