分析 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 负责转发目…
定制 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…
0.准备工作 Calico 是一个纯三层的虚拟网络方案,Calico 为每个容器分配一个 IP,每个 host 都是 router,把不同 host 的容器连接起来. 与 VxLAN 不同的是,Calico 不对数据包做额外封装,不需要 NAT 和端口映射,扩展性和性能都很好. Calico 优势:network policy 用户可以动态定义 ACL 规则,控制进出容器的数据包,实现业务需求. 实验环境描述 Calico 依赖 etcd 在不同主机间共享和交换信息,存储 Calico 网络状态…
Docker 起初只提供了简单的 single-host 网络,显然这不利于 Docker 构建容器集群并通过 scale-out 方式横向扩展到多个主机上. 跨主机网络方案: Docker Overaly Macvaln Flannel Weave Calico 根据不同场景选择最合适的方案: 网络模型 采用何种网络模型支持 multi-host 网络? Distributed Store 是否需要 etcd 或 consul 这类分布式 key-value 数据库存储网络信息? IPMA 如…
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 发送给…
如何使用 Weave 网络? weave 是 Weaveworks 开发的容器网络解决方案. weave 创建的虚拟网络可以将部署在多个主机上的容器连接起来. 对容器来说,weave 就像一个巨大的以太网交换机,所有容器都被接入这个交换机,容器可以直接通信,无需 NAT 和端口映射. 除此之外,weave 的 DNS 模块使容器可以通过 hostname 访问. 实验环境描述 weave 不依赖分布式数据库(例如 etcd 和 consul)交换网络信息,每个主机上只需运行 weave 组件就能…
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 网…
定制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 范围之内 --------------…