docker跨主机通讯之flannel

环境: centos 7.6.1810 内核 3.10.0-957.10.1.el7.x86_64
192.168.0.206 docker-ce-18.09.4 etcd 3.3.11 flanneld 0.7.1
192.168.0.207 docker-ce-18.09.4 etcd 3.3.11 flanneld 0.7.1
192.168.0.208 docker-ce-18.09.4 etcd 3.3.11 flanneld 0.7.1

备注:这些环境都是采用yum 安装的

  1. 安装etcd集群
    #yum -y install etcd
    修改配置
    192.168.0.206 (master)
    #vim /etc/etcd/etcd.conf
    ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
    ETCD_LISTEN_PEER_URLS=“http://0.0.0.0:2380”
    ETCD_LISTEN_CLIENT_URLS=“http://0.0.0.0:2379,http://0.0.0.0:4001”
    ETCD_NAME=“master”
    ETCD_INITIAL_ADVERTISE_PEER_URLS=“http://192.168.0.206:2380”
    ETCD_ADVERTISE_CLIENT_URLS=“http://192.168.0.206:2379,http://192.168.0.206:4001”
    ETCD_INITIAL_CLUSTER=“master=http://192.168.0.206:2380,node1=http://192.168.0.207:2380,node2=http://192.168.0.208:2380”
    ETCD_INITIAL_CLUSTER_TOKEN=“etcd-cluster”
    ETCD_INITIAL_CLUSTER_STATE=“new”

192.168.0.207 上的配置 (node1)
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS=“http://0.0.0.0:2380”
ETCD_LISTEN_CLIENT_URLS=“http://0.0.0.0:2379,http://0.0.0.0:4001”
ETCD_NAME=“node1”
ETCD_INITIAL_ADVERTISE_PEER_URLS=“http://192.168.0.207:2380”
ETCD_ADVERTISE_CLIENT_URLS=“http://192.168.0.207:2379,http://192.168.0.207:4001”
ETCD_INITIAL_CLUSTER=“master=http://192.168.0.206:2380,node1=http://192.168.0.207:2380,node2=http://192.168.0.208:2380”
ETCD_INITIAL_CLUSTER_TOKEN=“etcd-cluster”
ETCD_INITIAL_CLUSTER_STATE=“new”

192.168.0.208上的配置 (node2)
#vim /etc/etcd/etcd.conf
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS=“http://0.0.0.0:2380”
ETCD_LISTEN_CLIENT_URLS=“http://0.0.0.0:2379,http://0.0.0.0:4001”
ETCD_NAME=“node2”
ETCD_INITIAL_ADVERTISE_PEER_URLS=“http://192.168.0.208:2380”
ETCD_ADVERTISE_CLIENT_URLS=“http://192.168.0.208:2379,http://192.168.0.208:4001”
ETCD_INITIAL_CLUSTER=“master=http://192.168.0.206:2380,node1=http://192.168.0.207:2380,node2=http://192.168.0.208:2380”
ETCD_INITIAL_CLUSTER_TOKEN=“etcd-cluster”
ETCD_INITIAL_CLUSTER_STATE=“new”

  启动etcd并设置开机自启
  #systemctl start etcd
  #systemctl enable etcd
  
  将flanneld 的网络配置写入到etcd中
  #etcdctl mk /atomic.io/network/config '{ "Network": "10.10.0.0/16","SubnetLen": 24,"Backend": {"Type": "vxlan"} }'
  注释:每台主机分配到的flanneld网络是10.10.0.0/16   宿主机中docker容器分配到的网络是10.10.*.*/24 (10.10.*.* 代表宿主机分配到的flannel ip) 采用vxlan         的Backend    flanneld 有两种Backend一种是vxlan另一种是host-gw

  查看一下etcd写入情况(etcd节点查看一下)
  # etcdctl get /atomic.io/network/config
  { "Network": "10.10.0.0/16","SubnetLen": 24,"Backend": {"Type": "vxlan"} }

在这里插入图片描述
2. 安装flanneld
#yum -y install flanneld

 配置flanneld将etcd配置进去
 #vim /etc/etcd/etcd.conf
   FLANNEL_ETCD_ENDPOINTS="http://192.168.0.206:2379"         
   FLANNEL_ETCD_PREFIX="/atomic.io/network"                            (该key 是默认的,所以在配置etcd的时候用了这个key)
  
 启动flanneld并设置开机自启    
  #systemctl start flanneld
  #systemctl enable flanneld

3.docker的安装
注释:docker的安装就不写了,另外一篇已经写好了,这里我使用yum -y install docker 安装了最新版本的docker

  先查看一下flanneld分配的信息
  #cat /run/flannel/subnet.env
  FLANNEL_NETWORK=10.10.0.0/16
  FLANNEL_SUBNET=10.10.84.1/24
  FLANNEL_MTU=1450
  FLANNEL_IPMASQ=false
  
  修改docker启动文件
  #vim /usr/lib/systemd/system/docker.service
  添加--bip 和--mtu 信息  这两个信息要和上面获取到的subnet.env相同    我这里还添加了-H tcp://0.0.0.0:2376
  [Service]
  ...
  ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2376 -H fd:// --containerd=/run/containerd/containerd.sock --bip=10.10.84.1/24 --mtu=1450
  ...

docker跨主机通讯之flannel_第1张图片
重新加载daemon 启动docker并且设置开机自启
# systemctl daemon-reload
#systemctl start docker
#systemctl enable docker

 清空防火墙  (不清空防火墙的话跨主机容器不能通讯)
 iptables -P INPUT ACCEPT
 iptables -P FORWARD ACCEPT
 iptables -F

 验证:
 192.168.0.206上创建容器
 #docker run -dit --name centos centos /bin/bash
 #docker inspect centos|grep IPAddress
  SecondaryIPAddresses": null,
        "IPAddress": "10.10.84.2",
                "IPAddress": "10.10.84.2"

在这里插入图片描述
(该容器的ip是10.10.84.2)

 192.168.0.207 上创建容器
  #docker run -dit --name centos1 centos /bin/bash
  #docker exec -it centos1 /bin/bash
  
  验证跨主机通讯
  [root@ae331856624a /]#ping 10.10.84.2
  PING 10.10.84.2 (10.10.84.2) 56(84) bytes of data.
  64 bytes from 10.10.84.2: icmp_seq=1 ttl=62 time=0.864 ms
  64 bytes from 10.10.84.2: icmp_seq=2 ttl=62 time=0.166 ms
  64 bytes from 10.10.84.2: icmp_seq=3 ttl=62 time=0.166 ms

在这里插入图片描述

  验证连通外网
  [root@ae331856624a /]# ping www.baidu.com
  PING www.a.shifen.com (115.239.211.112) 56(84) bytes of data.
  64 bytes from 115.239.211.112 (115.239.211.112): icmp_seq=2 ttl=54 time=3.61 ms
  64 bytes from 115.239.211.112 (115.239.211.112): icmp_seq=3 ttl=54 time=3.55 ms
  64 bytes from 115.239.211.112 (115.239.211.112): icmp_seq=4 ttl=54 time=3.43 ms

在这里插入图片描述

实验结束!!!!!! 谢谢

你可能感兴趣的:(docker)