跨主机网络-overlay(18)

docker overlay跨主机网络

1.环境

    docker版本
    Docker version 18.02.0-ce, build fc4de44

    3台主机
    192.168.55.51  host1
    192.168.55.52  host2
    192.168.55.53  host2

2.部署Consul

    Docerk overlay 网络需要一个 key-value 数据库用于保存网络状态信息,包括 Network、Endpoint、IP 等。Consul、Etcd 和 ZooKeeper 都是 Docker 支持的 key-vlaue 软件,我们这里使用 Consul。
    在 docker 主机 host1 上部署支持的组件,比如 Consul
    docker run -d -p 8500:8500 -h consul --name consul progrium/consul -server -bootstrap

    容器启动后,可以通过 http://192.168.55.51:8500 访问 Consul。

    

3.修改docker启动项并重启docker(3台上操作)
    #修改docker daemon 的配置文件/etc/systemd/system/docker.service

    [root@host1 ~]# cat /etc/systemd/system/docker.service.d/10-machine.conf 
    [Service]
    ExecStart=
    ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2376 -H unix:///var/run/docker.sock --storage-driver devicemapper --tlsverify --tlscacert /etc/docker/ca.pem --tlscert /etc/docker/server.pem --tlskey /etc/docker/server-key.pem --label provider=generic --registry-mirror http://db411c61.m.daocloud.io --cluster-store=consul://192.168.55.51:8500 --cluster-advertise=192.168.55.51:2376
    Environment=


    #配置说明
    --cluster-store 指定 consul 的地址。
    --cluster-advertise 告知 consul 自己的连接地址。(即docker的连接,2376为docker的端口)

    #重启docker
    systemctl daemon-reload
    systemctl restart docker

4.查看host1 和 host2、host3 将自动注册到 Consul 数据库中
    访问http://192.168.55.51:8500
    查看key/value==docker==nodes/   (可以看到3台主全部注册上来了)

5.在 host1 中创建 overlay 网络 ov_net1
    docker network create -d overlay ov_net1
        -d overlay 指定 driver 为 overaly。
    docker network ls 
        查看当前网络:
        [root@host1 ~]# docker network ls
        NETWORK ID          NAME                DRIVER              SCOPE
        8925d1ce67ad        bridge              bridge              local
        0fb41307416f        host                host                local
        fc3f61663c71        none                null                local
        cb5cce10b030        ov_net1             overlay             global
        注意到 ov_net1 的 SCOPE 为 global,而其他网络为 local。在 host2 上查看存在的网络:
        host2 上也能看到 ov_net1。这是因为创建 ov_net1 时 host1 将 overlay 网络信息存入了 consul,host2 从 consul 读取到了新网络的数据。之后 ov_net 的任何变化都会同步到 host1 和 host2、host3。

    docker network inspect ov_net1
        查看 ov_net1 的详细信息:
        [root@host1 ~]# docker network inspect ov_net1
        [
            {
                "Name": "ov_net1",
                "Id": "cb5cce10b0301720ded000830038183c9752448a77c4010f6d1e194923bf1ef7",
                "Created": "2018-03-20T15:43:52.509618103+08: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": {}
            }
        ]

        IPAM 是指 IP Address Management,docker 自动为 ov_net1 分配的 IP 空间为 10.0.0.0/246.运行一个 busybox 容器并连接到 ov_net1
    host1
        docker run -tid --name bbox1 --network ov_net1 busybox

        #查看容器的网络配置:
        docker exec bbox1 ip r
    host2
        docker run -tid --name bbox2 --network ov_net1 busybox

        #查看容器的网络配置:
        docker exec bbox2 ip r


    #查看网络互通
    host1上查看
    docker exec bbox1 ping -c 3 bbox2
原文地址:https://www.cnblogs.com/hanxiaohui/p/8611370.html