1. 程式人生 > >容器中跨主機的網絡方案-Calico

容器中跨主機的網絡方案-Calico

檢查 ada 轉發 col 內容 ipam 1.5 gre api

容器中的網絡是建立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/daemon.json
{
"registry-mirrors": ["registry.docker-cn.com
"], "cluster-store": "etcd://10.1.1.4:2379" } systemctl enable docker systemctl start docker

二 安裝etcd

yum install etcd -y

修改etcd的配置文件:

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

容器中跨主機的網絡方案-Calico