Overlay网络-容器跨主机通信

Overlay网络-容器跨主机通信

1 docker主机间容器通信解决方案

1 overlay

Overlay网络是指在不改变现有网络基础设施的前提下,通过某种约定通信协议,把二层报文封装在IP报文之上的新的数据格式。这样不但能够充分利用成熟的IP路由协议进程数据分发;而且在Overlay技术中采用扩展的隔离标识位数,能够突破VLAN的4000数量限制支持高达16M的用户,并在必要时可将广播流量转化为组播流量,避免广播数据泛滥。

因此,Overlay网络实际上是目前最主流的容器跨节点数据传输和路由方案。

2 docker overlay network

要想使用Docker原生Overlay网络,需要满足下列任意条件

Docker 运行在Swarm

使用键值存储的Docker主机集群

3 使用健值存储搭建docker主机集群

需满足下列条件:

集群中主机连接到键值存储,Docker支持 Consul、Etcd和Zookeeper

集群中主机运行一个Docker守护进程

集群中主机必须具有唯一的主机名,因为键值存储使用主机名来标识集群成员

集群中linux主机内核版本在3.12+,支持VXLAN数据包处理,否则可能无法通行

4 安装集群控制器consul

下载控制器: Wget https://releases.hashicorp.com/consul/0.9.2/consul_0.9.2_linux_386.zip

解压:unzip consul_1.0.6_linux_amd64.zip

移动:mv consul /usr/bin/ && chmod a+x /usr/bin/consul

开启:nohup consul agent -server -bootstrap -ui -data-dir /data/docker/consul > -client=192.168.248.172 -bind=192.168.248.172 &> /var/log/consul.log &

节点配置docker守护进程链接

[root@node1 ~]# cat /lib/systemd/system/docker.service | grep -v "#" | grep -v "^$"

[Unit]

Description=Docker Application Container Engine

Documentation=https://docs.docker.com

BindsTo=containerd.service

After=network-online.target firewalld.service containerd.service

Wants=network-online.target

Requires=docker.socket

[Service]

Type=notify

ExecStart=/usr/bin/dockerd  -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock --cluster-store consul://192.168.248.172:8500 --cluster-advertise 192.168.248.172:2375

ExecReload=/bin/kill -s HUP $MAINPID

TimeoutSec=0

RestartSec=2

Restart=always

StartLimitBurst=3

StartLimitInterval=60s

LimitNOFILE=infinity

LimitNPROC=infinity

LimitCORE=infinity

TasksMax=infinity

Delegate=yes

KillMode=process

[Install]

WantedBy=multi-user.target

[root@node2 ~]# cat /lib/systemd/system/docker.service | grep -v "#" | grep -v "^$"

[Unit]

Description=Docker Application Container Engine

Documentation=https://docs.docker.com

BindsTo=containerd.service

After=network-online.target firewalld.service containerd.service

Wants=network-online.target

Requires=docker.socket

[Service]

Type=notify

ExecStart=/usr/bin/dockerd  -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock --cluster-store consul://192.168.248.172:8500 --cluster-advertise 192.168.248.173:2375

ExecReload=/bin/kill -s HUP $MAINPID

TimeoutSec=0

RestartSec=2

Restart=always

StartLimitBurst=3

StartLimitInterval=60s

LimitNOFILE=infinity

LimitNPROC=infinity

LimitCORE=infinity

TasksMax=infinity

Delegate=yes

KillMode=process

[Install]

WantedBy=multi-user.target

两台节点更新配置信息,重新启动docker服务

systemctl daemon-reload && systemctl restart docker

查看启动控制器的情况

创建overlay网络

[root@node1 ~]# docker network create -d overlay multi_host

[root@node1 ~]# docker network ls

NETWORK ID          NAME                DRIVER              SCOPE

5182eaa02342        bridge              bridge              local

e3a2a29b5c09        docker_gwbridge     bridge              local

ad1ed3c8d4e3        host                host                local

3c6be27f09ad        multi_host          overlay             global

19655f188313        none                null                local

在控制器的作用下网络模式会进行复制,所以第二台服务器也会产生相应的网络

            -d : 指定创建网络的类型

           另一台机器会自动同步新建的网络

[root@node1 ~]# docker network inspect multi_host

[

    {

        "Name": "multi_host",

        "Id": "3c6be27f09ad794111c5569f9c18c01b0785640f167eb2920fce341b42bfab25",

        "Created": "2019-04-05T03:59:35.920445223-07:00",

        "Scope": "global",

        "Driver": "overlay",

        "EnableIPv6": false,

        "IPAM": {

            "Driver": "default",

            "Options": {},

            "Config": [

                {

                    "Subnet": "10.0.0.0/24",

                    "Gateway": "10.0.0.1"

                }

            ]

        },

        "Internal": false,

        "Attachable": false,

        "Ingress": false,

        "ConfigFrom": {

            "Network": ""

        },

        "ConfigOnly": false,

        "Containers": {},

        "Options": {},

        "Labels": {}

    }

]

分别在两台机器上使用overlay网络启动一个容器

docker run -it --net=multi_host busybox

你可能感兴趣的:(Overlay网络-容器跨主机通信)