容器中的網絡是創建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網絡的實現方式。其實現方式相對比較簡單,性能損耗更小。