相同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 网络 Policy Calico 默认的 policy 规则是:容器只能与同一个 calico 网络中的容器通信. Calico 能够让用户定义灵活的 policy 规则,精细化控制进出容器的流量 实践一个场景: 1.创建一个新的 calico 网络 cal_web 并部署一个 httpd 容器 web1. 2.定义 policy 允许 cal_net2 中的容器访问 web1 的 80 端口. 首先创建 cal_web docker network create --dri…
Docker 起初只提供了简单的 single-host 网络,显然这不利于 Docker 构建容器集群并通过 scale-out 方式横向扩展到多个主机上. 跨主机网络方案: Docker Overaly Macvaln Flannel Weave Calico 根据不同场景选择最合适的方案: 网络模型 采用何种网络模型支持 multi-host 网络? Distributed Store 是否需要 etcd 或 consul 这类分布式 key-value 数据库存储网络信息? IPMA 如…
Weave 与外网通信 weave 是一个私有的 VxLAN 网络,默认与外部网络隔离. 外部网络如果要访问到 weave 中的容器:1.首先将主机加入到 weave 网络.2.然后把主机当作访问 weave 网络的网关. 要将主机加入到 weave,执行 weave expose. 这个 IP 10.32.0.3 会被配置到 host1 的 weave 网桥上. 现在 host1 的网络结构: weave 网桥位于 root namespace,它负责将容器接入 weave 网络. 给 wea…
如何使用 Weave 网络? weave 是 Weaveworks 开发的容器网络解决方案. weave 创建的虚拟网络可以将部署在多个主机上的容器连接起来. 对容器来说,weave 就像一个巨大的以太网交换机,所有容器都被接入这个交换机,容器可以直接通信,无需 NAT 和端口映射. 除此之外,weave 的 DNS 模块使容器可以通过 hostname 访问. 实验环境描述 weave 不依赖分布式数据库(例如 etcd 和 consul)交换网络信息,每个主机上只需运行 weave 组件就能…
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 发送给…
flannel 概述 flannel 是 CoreOS 开发的容器网络解决方案. flannel 为每个 host 分配一个 subnet,容器从此 subnet 中分配 IP,这些 IP 可以在 host 间路由,容器间无需 NAT 和 port mapping 就可以跨主机通信. 每个 subnet 都是从一个更大的 IP 池中划分的,flannel 会在每个主机上运行一个叫 flanneld 的 agent,其职责就是从池子中分配 subnet. 为了在各个主机间共享信息,flannel…
准备 macvlan 环境 macvlan 本身是 linux kernel 模块,其功能是允许在同一个物理网卡上配置多个 MAC 地址,即多个 interface,每个 interface 可以配置自己的 IP. macvlan 本质上是一种网卡虚拟化技术,Docker 用 macvlan 实现容器网络. macvlan 的最大优点是性能极好,相比其他实现,macvlan 不需要创建 Linux bridge,而是直接通过以太 interface 连接到物理网络. 创建一个 macvlan 网…
前面我们完成了 Calico 网络的部署并运行了容器,今天将讨论 Calico 的连通性. 测试一下 bbox1 与 bbox2 的连通性: ping 成功,数据包流向如下图所示. ① 根据 bbox1 的路由表,将数据包从 cal0 发出. ② 数据经过 veth pair 到达 host1,查看路由表,数据由 enp0s8 发给 host2(192.168.56.105). 192.168.183.64/26 via 192.168.56.105 dev enp0s8  proto bird…
参考https://www.cnblogs.com/CloudMan6/p/7536746.html   Calico 跨主机连通性测试   root@host1:~# docker exec bbox1 ping -c 2 bbox2 PING bbox2 (192.168.183.64): 56 data bytes 64 bytes from 192.168.183.64: seq=0 ttl=62 time=0.433 ms 64 bytes from 192.168.183.64: s…
定制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 的网络结构 在 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 网络状态…
首先在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…
在 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…
安装配置 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…
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…
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…
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…
作者:杨冬 欢迎转载,也请保留这段声明.谢谢! 出处: https://andyyoung01.github.io/ 或 http://andyyoung01.16mb.com/ 本篇文章主要探索Docker的单机容器网络,了解一下单个Docker主机上网络的各种模式,从而为后续理解跨主机容器网络打下基础. Docker默认容器网络的建立和控制是一种结合了network namespace,iptables,Linux网桥及route table等多种技术的综合解决方案,本篇主要针对于如何使用单…
从容器诞生开始,存储和网络这两个话题就一直为大家津津乐道.我们今天这个环境下讲网络这个问题,其实是因为容器对网络的需求,和传统物理.虚拟环境对网络环境需求是有差别的,主要面临以下两个问题: 过去IaaS层在网络方便做了很多工作,已经形成了成熟的环境,如果和容器环境适配,两边都需要做很多改造 容器时代提倡微服务,导致容器的粒度之小,离散程度之大,原有IaaS层网络解决方案很难承载如此复杂的需求 我们来看下一些主流的容器网络接入方案: Host network 最简单的网络模型就是让容器共享Host…
容器中的网络是建立docker集群的重要内容. 本文将介绍如何用Calico实现容器的多节点互通. Calico的组件结构如下: Calico通过etcd同步Bridge的信息,各个Docker node间通过BGP进行路由的交互.Iptables实现NAT.访问控制等. 具体的安装过程如下,其中两个节点的IP地址分别是10.1.1.4和10.1.1.5,在10.1.1.4上安装etcd: 一 安装docker yum install docker -y vim /etc/docker/daem…
洪强宁:宜信PaaS平台基于Calico的容器网络实践   本文内容来自由七牛云主办的ECUG Con,独家授权InfoQ整理完成 容器云面临的网络挑战 在传统的IDC的架构里面网络是很重要的事情,在虚拟机环境中网络的发展已经有很多成熟的解决方案,现在为什么还在研究新的方案呢?因为云计算.云计算在2013.2014年之前的时间段,其主要的发力点在虚拟机.但是从容器技术出现之后,虚拟机被更轻量的容器方式颠覆,从而大幅降低开发.运维.测试和部署.维护的成本.当然也带来了很多在虚拟机里没有面临过的问题…