Docker CE overlay网络简单测试

Docker 的多种网络模式中,bridge的网络模式是用于同一台宿主机上的docker之间的互通,如果要实现多台宿主机上docker之间跨节点的通讯就需要借助overlay网络

在 docker swarm 模式中,通过 docker service create 创建的容器默认会使用名为ingress的overlay网络模式,在这种网络模式下,service会在不同节点(宿主机)上建立容器,不同节点上容器的ip会处在同一子网内;

同样的,如果建立多个service,比如,同时建了nginx 和 viz两个service,那么这两个service下的容器也都会在同一子网下,如下所示,同一节点上,serivce nginx 的容器ip 为10.255.0.4,service viz 容器的ip为10.255.0.6,两者都在ingress网络中

#docker network inspect ingress
       "Internal": false,
       "Attachable": false,
       "Ingress": true,
        "Containers":{
           "00bf0cc88d8363581b10a6a64a34cc2864d51926ecaa445fba7af0bc488d553d":{
                "Name":"nginxtest.1.5yukmeotwnl2v0smmhy26bwkg",
               "EndpointID":"064080c4efc9048bf0b0a44ab1d52d63c627f277d9d589be8cc9723c081e2616",
               "MacAddress": "02:42:0a:ff:00:04",
                "IPv4Address":"10.255.0.4/16",
               "IPv6Address": ""
            },
           "ac7ec55f931e1a4c1ece6e56a935ac0871ab6fe88e9eae35e1671513c9204b77":{
                "Name":"viz.1.zhmcw7mtvzzrma31l3letnmxp",
               "EndpointID":"0477642232e30c34c9bdc6cb8e83b0d2726a5169df8daa8c47225b8d16163ec7",
               "MacAddress": "02:42:0a:ff:00:06",
                "IPv4Address":"10.255.0.6/16",
               "IPv6Address": ""
            },
           "ingress-sbox": {
               "Name": "ingress-endpoint",
               "EndpointID":"61ae637e13284274480a1f9928bd7c627543336875a64dbdd272850285252136",
               "MacAddress": "02:42:0a:ff:00:02",
               "IPv4Address": "10.255.0.2/16",
               "IPv6Address": ""
            }
        },
       "Options": {
           "com.docker.network.driver.overlay.vxlanid_list":"256"
…………………………………………………..

如果不想让多个service 在同一子网内,比如多租户的场景,在这种情况下,就需要另外创建自定义overlay 网络,实现不同用户的服务在各自的子网内

创建名为mynetoverlay网络

# docker network create mynet -d overlay

7njqr6p45krfw6msq8wgxdqu3

你还可以使用其他参数 比如 --subnet: 定义子网范围

查看mynet基本信息

# docker network inspect mynet
[
    {
       "Name": "mynet",
       "Id": "7njqr6p45krfw6msq8wgxdqu3",
       "Created": "0001-01-01T00:00:00Z",
       "Scope": "swarm",
       "Driver": "overlay",
       "EnableIPv6": false,
       "IPAM": {
           "Driver": "default",
           "Options": null,
           "Config": []
        },
       "Internal": false,
       "Attachable": false,
       "Ingress": false,
       "Containers": null,
       "Options": {
            "com.docker.network.driver.overlay.vxlanid_list":"4096"
        },
       "Labels": null
}

如上所示,新创建的mynet network vxlan id 为 4096,不同于 ingress 的 vxlan id 256 ,同时,由于还没有容器被加入到mynet网络 mynet还没有被分配ip地址段

创建一个使用mynet网络的service

docker service create --replicas 2 --name nginx_test01 --network mynet  nginx

服务起来后,再次查看mynet网络

#docker network inspect mynet
…………………………………………………….
           "Options": null,
           "Config": [
                {
                   "Subnet": "10.0.0.0/24",
                   "Gateway": "10.0.0.1"
                }
            ]
        },
       "Internal": false,
       "Attachable": false,
       "Ingress": false,
       "Containers": {
           "a67b21bdc3d1bb144816e436f5cc5a303539ae3db8a7564236740fc46233a665":{
               "Name": "nginx_test01.1.xscom3xofubdgzp1xixt69r93",
               "EndpointID": "0dbd0fca51d0c477ee653e6f0f12048e38acb6e1a404fe1f9ae4e6506563cfce",
               "MacAddress": "02:42:0a:00:00:03",
               "IPv4Address": "10.0.0.3/24",
               "IPv6Address": ""
            }
        },
       "Options": {
           "com.docker.network.driver.overlay.vxlanid_list":"4096"
 ……………………..

可以看到mynet加入了一个容器,它的网段随之也变成了10.0.0.0/24

验证下不同网段下容器是否能否互通

进入使用mynet网络的容器

docker exec –it  a67b21bdc3d1 bash

[[email protected] a67b21bdc3d1 /]# ping 10.255.0.6  #ping ingress 网络下的容器

PING 10.255.0.6 (10.255.0.6) 56(84) bytes of data.

无法ping通,说明vxlan隔离作用生效了,如果是相通的,你可能需要升级下系统内核

时间: 2024-08-03 17:52:11

Docker CE overlay网络简单测试的相关文章

使用docker 原生overlay网络部署夸宿主机访问

要使用docker 原生的overlay,要满足任意的2个条件:1,docker 运行在swarm 模式2,使用键值存储docker 主机集群 这里使用consul 键值存储来部署节点1/键值存储(Server):192.168.1.198节点2(Client):192.168.1.1991,下载consul二进制包 进行部署(下载到server节点) wget https://releases.hashicorp.com/consul/0.9.2/consul_0.9.2_linux_amd6

Docker 1.10 RC 新网络 overlay 网络

Overlay 网络 Overlay网络是指在不改变现有网络基础设施的前提下,通过某种约定通信协议,把二层报文封装在IP报文之上的新的数据格式. 这样不但能够充分利用成熟的IP路由协议进程数据分发,而且在Overlay技术中采用扩展的隔离标识位数,能够突破VLAN的4000数量限制, 支持高达16M的用户,并在必要时可将广播流量转化为组播流量,避免广播数据泛滥. 因此,Overlay网络实际上是目前最主流的容器跨节点数据传输和路由方案. Overlay网络的实现方式可以有许多种,其中IETF(国

准备 overlay 网络实验环境 - 每天5分钟玩转 Docker 容器技术(49)

为支持容器跨主机通信,Docker 提供了 overlay driver,使用户可以创建基于 VxLAN 的 overlay 网络.VxLAN 可将二层数据封装到 UDP 进行传输,VxLAN 提供与 VLAN 相同的以太网二层服务,但是拥有更强的扩展性和灵活性.有关 VxLAN 更详细的内容可参考 CloudMan 在<每天5分钟玩转 OpenStack>中的相关章节. Docerk overlay 网络需要一个 key-value 数据库用于保存网络状态信息,包括 Network.Endp

Docker Swarm 创建overlay网络

Docker Swarm 创建overlay网络 环境: 系统:Centos 7.4 x64 应用版本:Docker 18.09.0 管理节点:192.168.1.79 工作节点:192.168.1.78 工作节点:192.168.1.77 一.创建网络与服务 1.管理节点:创建overlay网络名字为my-network docker network create --driver overlay my-network 命令:docker network ls NETWORK ID NAME

创建 overlay 网络 - 每天5分钟玩转 Docker 容器技术(50)

上一节我们搭建好实验环境,配置并运行了consul,今天开始创建 overlay 网络. 在 host1 中创建 overlay 网络 ov_net1: -d overlay 指定 driver 为 overaly. docker network ls 查看当前网络: 注意到 ov_net1 的 SCOPE 为 global,而其他网络为 local.在 host2 上查看存在的网络: host2 上也能看到 ov_net1.这是因为创建 ov_net1 时 host1 将 overlay 网络

docker 使用swarm overlay网络时,报“network xx not manually attachable”错误解决

当使用swarm的overlay网络,在该网络中运行容器时报"network xx not manually attachable"的错误 docker network create -d overlay --attachable my-attachable-overlay 默认情况下使用docker network create -d overlay NET 创建的网络只能被swarm service使用,如果需要被独立的容器使用,需要添加--attachable选项 docker

Docker的原生overlay网络的实现原理

系统环境 manager node: CentOS Linux release 7.4.1708 (Core) workr node: CentOS Linux release 7.5.1804 (Core) Docker版本信息 manager node: Docker version 18.09.4, build d14af54266 worker node: Docker version 19.03.1, build 74b1e89 Docker Swarm系统环境 manager nod

Docker扁平化网络设计与实现的方法步骤详解

研发背景 众所周知,Docker容器跨主机互访一直是一个问题,Docker官方为了避免网络上带来的诸多麻烦,故将跨主机网络开了比较大的口子,而由用户自己去实现.目前Docker跨主机的网络实现方案也有很多种,主要包括端口映射.ovs. fannel等. 但是这些方案都无法满足我们的需求:端口映射服务内的内网IP会映射成外网的IP,这样会给开发带来困惑,因为他们往往在跨网络交互时是不需要内网IP的:而ovs与fannel则是在基础网络协议上又包装了一层自定义协议,这样当网络流量大时,却又无端的增加

docker1.9网络新特性,overlay网络实现主机间容器互联

Docker1.9引入了新的网络机制,包括一整套的网络操作命令和跨主机的网络支持. 该网络特性主要是为了实现容器的网络互联(单主机/跨主机),取代了之前的--link网络模式. docker网络命令: 查看当前的docker网络: # docker network ls NETWORK ID         NAME               DRIVER            a77b0f433ea0        none                null