容器中跨主机的网络方案-Calico

容器中的网络是创建docker集群的重要内容。 node

本文将介绍如何用Calico实现容器的多节点互通。 nginx

Calico的组件结构以下: git

Calico经过etcd同步Bridge的信息,各个Docker node间经过BGP进行路由的交互。Iptables实现NAT、访问控制等。 github

具体的安装过程以下,其中两个节点的IP地址分别是10.1.1.4和10.1.1.5,在10.1.1.4上安装etcd: docker

一 安装docker json

yum install docker -y vim /etc/docker/daemon.json { "registry-mirrors": ["registry.docker-cn.com"], "cluster-store": "etcd://10.1.1.4:2379" } systemctl enable docker systemctl start docker

二 安装etcdvim

yum install etcd -y

修改etcd的配置文件:api

cat /etc/etcd/etcd.conf | grep -v ^# ETCD_DATA_DIR="/var/lib/etcd/default.etcd" ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379" ETCD_NAME="master" ETCD_ADVERTISE_CLIENT_URLS="http://10.1.1.4:2379"

启动etcd:网络

systemctl enable etcd systemctl start etcd

三 安装Calico架构

1 下载Calico

wget -O /usr/local/bin/calicoctl https://github.com/projectcalico/calicoctl/releases/download/v1.6.1/calicoctl
chmod +x /usr/local/bin/calicoctl

2启动Calico

Calico启动时,会调取calico的配置文件,编辑etcd的信息:

vim /etc/calico/calicoctl.cfg apiVersion: v1 kind: calicoApiConfig metadata: spec: datastoreType: "etcdv2" etcdEndpoints: http://10.0.1.4:2379

3先下载calico node的docker image

docker pull quay.io/calico/node:v2.6.0

4 启动calico

calicoctl node run --node-image quay.io/calico/node:v2.6.0

5 检查calico的状态

calicoctl node status

6 建立docker的calico网络

docker network create --driver calico --ipam-driver calico-ipam net1

四 基于Calico网络建立容器

在node1上建立container:

docker run -d --net net2 --name c1 nginx

一样在node2上也建立contianer:

docker run -d --net net2 --name c2 nginx

两边能够互通。

查看两个node上的路由:

能够看到Calico是个扁平的网络,经过bgp宣告路由,容器网络的网段路由指向node的IP地址。

容器内部地址和路由:

五 Azure支持Calico的配置

因为公有云都采用SDN的网络架构,和数据中心的数据转发模型不一样。在Azure须要作特别的配置,才能支持Calico的扁平网络的转发模式。

1 用户自定义路由

在node所在的网络配置用户自定义路由:

Node1的容器网络路由指向node1的IP地址

Node2的容器网络路由指向node2的IP地址

关联到subnet上:

2 每一个node开启IP Forward

开启这两个功能后,Calico网络就能够通了。

总结:

Calico网络是经过BGP进行容器网络路由交互的一种Docker网络的实现方式。其实现方式相对比较简单,性能损耗更小。

相关文章
相关标签/搜索