flannel 概述 flannel 是 CoreOS 开发的容器网络解决方案. flannel 为每个 host 分配一个 subnet,容器从此 subnet 中分配 IP,这些 IP 可以在 host 间路由,容器间无需 NAT 和 port mapping 就可以跨主机通信. 每个 subnet 都是从一个更大的 IP 池中划分的,flannel 会在每个主机上运行一个叫 flanneld 的 agent,其职责就是从池子中分配 subnet. 为了在各个主机间共享信息,flannel…
flannel 的连通与隔离 测试 bbox1 和 bbxo2 的连通性: bbox1 能够 ping 到位于不同 subnet 的 bbox2,通过 traceroute 分析一下 bbox1 到 bbox2 的路径. 1) bbox1 与 bbox2 不是一个 subnet,数据包发送给默认网关 10.2.9.1(docker0). 2) 根据 host1 的路由表(下图),数据包会发给 flannel.1. 3) flannel.1 将数据包封装成 VxLAN,通过 ens192 发送给…
在 Docker 中使用 flannel 编辑 host1 的 Docker 配置文件 /etc/systemd/system/docker.service.d/10-machine.conf 设置 --bip 和 --mtu. 这两个参数的值必须与 /run/flannel/subnet.env 中 FLANNEL_SUBNET 和FLANNEL_MTU 一致. 重启 Docker daemon. systemctl daemon-reload systemctl restart docker…
Docker 起初只提供了简单的 single-host 网络,显然这不利于 Docker 构建容器集群并通过 scale-out 方式横向扩展到多个主机上. 跨主机网络方案: Docker Overaly Macvaln Flannel Weave Calico 根据不同场景选择最合适的方案: 网络模型 采用何种网络模型支持 multi-host 网络? Distributed Store 是否需要 etcd 或 consul 这类分布式 key-value 数据库存储网络信息? IPMA 如…
如何使用 Weave 网络? weave 是 Weaveworks 开发的容器网络解决方案. weave 创建的虚拟网络可以将部署在多个主机上的容器连接起来. 对容器来说,weave 就像一个巨大的以太网交换机,所有容器都被接入这个交换机,容器可以直接通信,无需 NAT 和端口映射. 除此之外,weave 的 DNS 模块使容器可以通过 hostname 访问. 实验环境描述 weave 不依赖分布式数据库(例如 etcd 和 consul)交换网络信息,每个主机上只需运行 weave 组件就能…
准备 macvlan 环境 macvlan 本身是 linux kernel 模块,其功能是允许在同一个物理网卡上配置多个 MAC 地址,即多个 interface,每个 interface 可以配置自己的 IP. macvlan 本质上是一种网卡虚拟化技术,Docker 用 macvlan 实现容器网络. macvlan 的最大优点是性能极好,相比其他实现,macvlan 不需要创建 Linux bridge,而是直接通过以太 interface 连接到物理网络. 创建一个 macvlan 网…
安装配置 flannel 1) build flannel flannel 没有现成的执行文件可用,必须自己 build,最可靠的方法是在 Docker 容器中 build. 不过用于做 build 的 docker 镜像托管在 gcr.io,国内可能无法直接访问,所以使用参考文档中提供的镜像,构建步骤如下: 下载并重命名 image. docker pull cloudman6/kube-cross:v1.6.2-2 docker tag cloudman6/kube-cross:v1.6.2…
flannel host-gw backend flannel 支持多种 backend:(1)vxlan backend:(2)host-gw: 与 vxlan 不同,host-gw 不会封装数据包,而是在主机的路由表中创建到其他主机 subnet 的路由条目,从而实现容器跨主机通信. 要使用 host-gw 首先修改 flannel 的配置 flannel-config.json: { "Network": "10.2.0.0/16", "Subnet…
定制IP池 首先定义一个 IP Pool,比如: calicoctl create -f ipPool.yml 用此 IP Pool 创建 calico 网络. docker network create --driver calico --ipam-driver calico-ipam --subnet=17.2.0.0/16 my_net 此时运行容器将分配到指定 subnet 中的 IP 也可以通过 --ip 为容器指定 IP,但必须在 subnet 范围之内 --------------…
定制 Calico 网络 Policy Calico 默认的 policy 规则是:容器只能与同一个 calico 网络中的容器通信. Calico 能够让用户定义灵活的 policy 规则,精细化控制进出容器的流量 实践一个场景: 1.创建一个新的 calico 网络 cal_web 并部署一个 httpd 容器 web1. 2.定义 policy 允许 cal_net2 中的容器访问 web1 的 80 端口. 首先创建 cal_web docker network create --dri…
相同calico 网络之间的连通性 测试一下 bbox1 与 bbox2 的连通性: ping 成功,数据包流向如下图所示. 1)根据 bbox1 的路由表,将数据包从 cal0 发出. 2)数据经过 veth pair 到达 host1,查看路由表,数据由 ens192 发给 host2(10.12.31.23). 192.168.183.64/26 via 10.12.31.23 dev ens192  proto bird 3)host2 收到数据包,根据路由表发送给 cali95e23c…
分析 Calico 的网络结构 在 host1 中运行容器 bbox1 并连接到 cal_net1: docker container run --network cal_net1 --name bbox1 -tid busybox 查看 bbox1 的网络配置 cali0 是 calico interface,分配的 IP 为 192.168.119.7.cali0 对应 host1 编号 7 的 interface cali865e6869b8a host1 将作为 router 负责转发目…
0.准备工作 Calico 是一个纯三层的虚拟网络方案,Calico 为每个容器分配一个 IP,每个 host 都是 router,把不同 host 的容器连接起来. 与 VxLAN 不同的是,Calico 不对数据包做额外封装,不需要 NAT 和端口映射,扩展性和性能都很好. Calico 优势:network policy 用户可以动态定义 ACL 规则,控制进出容器的数据包,实现业务需求. 实验环境描述 Calico 依赖 etcd 在不同主机间共享和交换信息,存储 Calico 网络状态…
Weave 与外网通信 weave 是一个私有的 VxLAN 网络,默认与外部网络隔离. 外部网络如果要访问到 weave 中的容器:1.首先将主机加入到 weave 网络.2.然后把主机当作访问 weave 网络的网关. 要将主机加入到 weave,执行 weave expose. 这个 IP 10.32.0.3 会被配置到 host1 的 weave 网桥上. 现在 host1 的网络结构: weave 网桥位于 root namespace,它负责将容器接入 weave 网络. 给 wea…
首先在host2 执行如下命令: weave launch 10.12.31.22 这里必须指定 host1 的 IP 10.12.31.22,这样 host1 和 host2 才能加入到同一个 weave 网络. 运行容器 bbox3: eval $(weave env) docker run --name bbox3 -itd busybox weave 网络连通性 bbox3 能够直接 ping bbox1 和 bbox2. bbox1.bbox2 和 bbox3 的 IP 分别为 10.…
Weave 网络结构分析 在 host1 中运行容器 bbox1: eval $(weave env) docker run --name bbox1 -itd busybox 首先执行 eval $(weave env) 很重要,其作用是将后续的 docker 命令发给 weave proxy 处理. 如果要恢复之前的环境,可执行 eval $(weave env --restore). 查看一下当前容器 bbox1 的网络配置: bbox1 有两个网络接口 eth0 和 ethwe,其中 e…
macvlan 网络结构分析 macvlan 不依赖 Linux bridge,brctl show 可以确认没有创建新的 bridge. 查看一下容器 bbox1 的网络设备: 除了 lo,容器只有一个 eth0,请注意 eth0 后面的 @if2,这表明该 interface 有一个对应的 interface,其全局的编号为 2. 根据 macvlan 的原理,我们有理由猜测这个 interface 就是主机的 ens192,确认如下: 由此可见,容器的 eth0 就是 ens192 通过…
1.创建 macvlan 网络 在 host1 和 host2 中创建 macvlan 网络 mac_net1: docker network create -d macvlan --subnet=172.16.86.0/24 --gateway=172.16.86.1 -o parent=ens192 mac_net1 注意:在 host2 中也要执行相同的命令. 1) -d macvlan 指定 driver 为 macvlan. 2) macvlan 网络是 local 网络,为了保证跨主…
overlay 是如何隔离的? 不同的 overlay 网络是相互隔离的. 创建第二个 overlay 网络 ov_net2 并运行容器 bbox3. docker network create -d overlay ov_net2 docker run -itd --name bbox3 --network ov_net2 busybox bbox3 分配到的 IP 是 10.0.1.2,尝试 ping bbox1(10.0.0.2). ping 失败,可见不同 overlay 网络之间是隔离…
overlay 如何实现跨主机通信? 在 host2 中运行容器 bbox2: docker run -itd --name bbox2 --network ov_net1 busybox bbox2 IP 为 10.0.0.4,可以直接 ping bbox1: 可见 overlay 网络中的容器可以直接通信,同时 docker 也实现了 DNS 服务. overlay 网络的具体实现: docker 会为每个 overlay 网络创建一个独立的 network namespace,其中会有一个…
在 overlay 中运行容器 运行一个 busybox 容器并连接到 ov_net1: docker run -itd --name bbox1 --network ov_net1 busybox 查看容器的网络配置: bbox1 有两个网络接口 eth0 和 eth1. eth0 IP 为 10.0.0.2,连接的是 overlay 网络 ov_net1. eth1 IP 172.18.0.2,容器的默认路由是走 eth1. 其实,docker 会创建一个 bridge 网络 “docker…
macvlan 网络隔离和连通 验证 macvlan 之间的连通性. bbox1 能 ping 通 bbox3,bbox2 能 ping 通 bbox4. 即:同一 macvlan 网络能通信. bbox1 无法 ping 通 bbox2 和 bbox4. 即:不同 macvlan 网络之间不能通信. 但更准确的说法应该是:不同 macvlan 网络不能 在二层上 通信. 在三层上可以通过网关将 macvlan 连通,下面我们就启用网关. 将 Host 10.12.31.21 配置成一个虚拟路由…
在 host1 中创建 overlay 网络 ov_net1: docker network create -d overlay ov_net1 -d overlay 指定 driver 为 overaly docker network ls 查看当前网络: 注意到 ov_net1 的 SCOPE 为 global,而其他网络为 local.在 host2 上查看存在的网络: host2 上也能看到 ov_net1.这是因为创建 ov_net1 时 host1 将 overlay 网络信息存入了…
overlay环境准备 在docker-machine (10.12.31.21)的基础上 docker主机 host1 (10.12.31.22) host2 (10.12.31.23) 在docker-machine (10.12.31.21)上部署安装模块Consul docker run -d -p 8500:8500 -h consul --name consul progrium/consul -server –bootstrap 容器启动后,可以通过 http:// 10.12.3…
flannel 是 CoreOS 开发的容器网络解决方案.flannel 为每个 host 分配一个 subnet,容器从此 subnet 中分配 IP,这些 IP 可以在 host 间路由,容器间无需 NAT 和 port mapping 就可以跨主机通信. 每个 subnet 都是从一个更大的 IP 池中划分的,flannel 会在每个主机上运行一个叫 flanneld 的 agent,其职责就是从池子中分配 subnet.为了在各个主机间共享信息,flannel 用 etcd(与 cons…
参考https://www.cnblogs.com/CloudMan6/p/7412150.html   flannel 是 CentOS开发的容器网络解决方案.flannel 为每个host分配一个subnet,容器从此subnet中分配IP,这些Ip可以在host间路由,容器间无需NAT和port mapping就可以跨主机通信   每个subnet都是从一个更大的IP池中划分的,flannel会在每个host上运行一个叫flanneld的agent,其职责就是从池子中分配subnet.为了…
当您将多台服务器节点组成一个Docker集群时,需要对集群网络进行设置,否则默认情况下,无法跨主机容器互联,接下来我们首先分析一下原因. 跨主机容器互联 下图描述了一个简单的集群网络,在该集群内,有两台服务器甲和乙,每台服务器上都有两张网卡,分别连接公网和私网,两台服务器可以通过私网互联,在两个服务器节点上分别安装了Docker,并且运行了A/B/C/D 4个容器. 每台服务器节点上都有一个 docker0 网桥,这是docker启动后初始化的虚拟设备,每个容器都与docker0网桥连接,并且,…
SDNLAB技术分享(十五):容器网络大观   SDNLAB君• 16-06-17 •2957 人围观 编者按:本文系SDNLAB技术分享系列,本次分享来自SDN撕X群(群主:大猫猫)群直播,我们希望通过SDNLAB提供的平台传播知识,传递价值,欢迎加入我们的行列. 分享嘉宾--------------------------------------------------------------------------------------------------分享介绍:张晨:目前就读于北…
概述 在学习docker时知道docker有四种常用的网络模型 bridge:桥接式网络 joined:联盟式网络,共享使用另外一个容器的网络名称空间 opened:容器直接共享使用宿主机的网络名称空间 none:不使用任何网络名称空间 无论是哪一种网络方式都会导致如果我们跨节点之间的容器之间进行通信时必须要使用NAT机制来实现,任何pod在访问出去之前因为自己是私有网络中的地址,在离开本机时候必须要做源地址转换以确保能够拿着物理机的地址出去,而后每一个pod要想被别人所访问或者每一个容器在上下…
一.概述 1.我们在学习docker时知道docker有四种常用的网络模型 a.bridge:桥接式网络 b.joined:联盟式网络,共享使用另外一个容器的网络名称空间 b.opened:容器直接共享使用宿主机的网络名称空间 c.none:不使用任何网络名称空间 2.无论是哪一种网络方式都会导致如果我们跨节点之间的容器之间进行通信时必须要使用NAT机制来实现,任何pod在访问出去之前因为自己是私有网络中的地址,在离开本机时候必须要做源地址转换以确保能够拿着物理机的地址出去,而后每一个pod要想…