當(dāng)前位置:
首頁 >
Calico在Docker中的搭建
發(fā)布時(shí)間:2025/7/14
68
豆豆
生活随笔
收集整理的這篇文章主要介紹了
Calico在Docker中的搭建
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
一,Multi-host網(wǎng)絡(luò)需求
開始之前推薦兩篇文章 http://xelatex.github.io/2015/11/15/Battlefield-Calico-Flannel-Weave-and-Docker-Overlay-Network/ http://mp.weixin.qq.com/s?__biz=MzAwMDU1MTE1OQ==&mid=400983139&idx=1&sn=f033e3dca32ca9f0b7c9779528523e7e&scene=1&srcid=1101jklWCo9jNFjdnUum85PG&from=singlemessage&isappinstalled=0#wechat_redirect Docker在1.9中l(wèi)ibnetwork團(tuán)隊(duì)提供了multi-host網(wǎng)絡(luò)功能,能完成overlay網(wǎng)絡(luò)。但是網(wǎng)絡(luò)功能需要linux主機(jī)的內(nèi)核在3.16以上。對于使用centos或者mint之類的用戶痛苦不堪,很多系統(tǒng)的內(nèi)核還處于3.16以下。 隨著SDN概念的到來、云平臺的規(guī)模越來越大,Docker本身只能single host的問題嚴(yán)重限制了Docker的未來,雖然它相比VM有著數(shù)不盡的優(yōu)勢。 其實(shí)在docker1.9之前就可以通過一些方式實(shí)現(xiàn)multi-host功能,比如使用OpenVSwitch、Flannel、Calico、Weave等這些機(jī)制。 OVS和Flannel、Weave底層都是用了Vxlan的方式(包括Docker1.9本身也是使用了Vxlan的實(shí)現(xiàn)),都是能夠完成Overlay的網(wǎng)絡(luò)。 OVS和Flannel和Weave再細(xì)分就是就是實(shí)現(xiàn)的具體方式的不同了。OVS是比較成熟的技術(shù),做的很多年功能也很強(qiáng)大, 但是配置復(fù)雜,對于大規(guī)模配置和項(xiàng)目遷移、擴(kuò)容會有很大的麻煩。Flannel、Calico、Weave、Docker1.9具體的區(qū)別看我上面給出的這個(gè)github博客,博主很贊。二,Calico介紹
Calico是一個(gè)純3層協(xié)議,支持VM、Docker、Rocket、OpenStack、Kubernetes、或者直接在物理機(jī)上使用。官網(wǎng)上給出可以支持上萬個(gè)主機(jī)、上百萬的工作負(fù)載(container),由于它是純?nèi)龑訁f(xié)議,使用BGP協(xié)議(基于IP),更易于調(diào)試,支持IPv6,支持靈活的安全策略。 附上一個(gè)Calico官方給出的Calico與物理網(wǎng)絡(luò)、OVS的性能對比: http://www.projectcalico.org/calico-dataplane-performance/ 覺得文章中有些“夸張了自己的效果”,我自己的測試結(jié)果與這個(gè)文章中的結(jié)果的差別有些大,雖然確實(shí)Calico在網(wǎng)絡(luò)本身較好的情況下TCP有著絕對優(yōu)勢,但是它的UDP性能并不算很突出,在非ipip模式時(shí)能保持一點(diǎn)領(lǐng)先,但是在ipip模式時(shí)候,與Flannel基本等同,甚至更差。 這里推薦兩篇Calico在Docker中使用的教程: 官方:https://github.com/projectcalico/calico-docker/blob/master/docs/getting-started/default-networking/Demonstration.md 一個(gè)博客:http://xelatex.github.io/2015/09/06/calico-docker/三,準(zhǔn)備
1,兩臺主機(jī):10.11.150.72、10.11.150.74 (我這里是Centos) 2,Calico-node image兩個(gè)方法獲得: 1,自己從Calico官方github上下載編譯:https://github.com/projectcalico/calico-docker? 2,直接從Docker hub上下載現(xiàn)成的,不過版本可能沒那么新:https://hub.docker.com/search/?q=calico&page=1&isAutomated=0&isOfficial=0&starCount=0&pullCount=0 3,Etcd:http://pan.baidu.com/s/1mgIqn4O?這里版本是2.2.1 4,一個(gè)有ping命令的image,什么都可以,最簡單如busybox,我這里使用iperf的鏡像 5,calicoctl :自己找個(gè)版本,盡量最新版本,但是注意更新的內(nèi)容。目前最新的是0.12.0:https://github.com/projectcalico/calico-docker/releases四,運(yùn)行ETCD集群
Calico要求擁有一個(gè)etcd cluster作為k-v存儲,來存放自己的配置內(nèi)容。 在10.11.150.72上運(yùn)行: #!/bin/sh export localip=10.11.150.72 export name=calico0 export port1=2381 export port2=2379 export port3=4002sudo ./etcd \ -name $name \ -initial-advertise-peer-urls http://$localip:$port1 \ -listen-peer-urls http://0.0.0.0:$port1 \ -listen-client-urls http://0.0.0.0:$port2,http://0.0.0.0:$port3 \ -advertise-client-urls http://$localip:$port2,http://$localip:$port3\ -initial-cluster-token etcd-cluster \ -initial-cluster calico0=http://$localip:$port1,calico1=http://10.11.150.74:$port1 -initial-cluster-state new &注意我這里的端口和localip的配置,另外-initial-cluster一定要包含-initial-advertise-peer-urls。
然后在10.11.150.74上運(yùn)行etcd,組成cluster,兩臺機(jī)子都輸出published name后暫時(shí)沒有新的輸出就算是etcd cluster組建完成。 測試一下: 本機(jī):? curl -L 127.0.0.1:2379/version集群:
curl -L 10.11.150.74:2379/version五,Calico Service
Calico在每個(gè)主機(jī)上通過一個(gè)自己的container與其他主機(jī)或者網(wǎng)絡(luò)通訊,即calico-node的container,這個(gè)container里面包含了Bird路由管理、Felix協(xié)議等。 介紹:http://www.projectcalico.org/learn/ 在兩臺主機(jī)上分別運(yùn)行,后面的ip是主機(jī)ip ./calicoctl node --ip=10.11.150.72運(yùn)行后在兩個(gè)主機(jī)用docker ps可以看到正在運(yùn)行calico-node的container
下面為我們的calico網(wǎng)絡(luò)添加可用的ip pool(在72或者74一臺主機(jī)上運(yùn)行即可): ./calicoctl pool add 172.1.0.0/16 --nat-outgoing這里由于我的兩個(gè)主機(jī)72和74本身就在同一個(gè)子網(wǎng)下,主機(jī)相互之間不需要L2 switch。如果是跨子網(wǎng)、跨機(jī)房、跨公網(wǎng)就需要加上--ipip選項(xiàng),或者你有權(quán)限直接修改路由器的BGP協(xié)議,將兩個(gè)不同子網(wǎng)的主機(jī)連接為BGP peer。
六,Container開始吧
在主機(jī)72上面新建兩個(gè)container: docker run --net=none --name worker-1 -tid iperf docker run --net=none --name worker-2 -tid iperf在74上也新建兩個(gè)
docker run --net=none --name worker-3 -tid iperf docker run --net=none --name worker-4 -tid iperf為container在calico中注冊一個(gè)獨(dú)立的IP:
./calicoctl container add worker-1 172.1.0.1 ./calicoctl container add worker-2 172.1.0.2?
./calicoctl container add worker-3 172.1.0.3 ./calicoctl container add worker-4 172.1.0.4Calico通過profile的形式來控制ACL,也以此來完成安全策略。
添加兩個(gè)profile(72或者74均可): ./calicoctl profile add PROF_1 ./calicoctl profile add PROF_2為container添加策略:
./calicoctl container worker-1 profile append PROF_1 ./calicoctl container worker-2 profile append PROF_1 ./calicoctl container worker-3 profile append PROF_1 ./calicoctl container worker-4 profile append PROF_2這樣worker 1 2 3同在profile內(nèi),worker-4單獨(dú)在PROF_2內(nèi)。
七,測試一下吧
測試一下worker-1和worker-3之間可以通: docker exec worker-1 ping -c 4 172.1.0.3 測試一下worker-1和worker-4之間不在同一個(gè)profile下面不能通: docker exec worker-1 ping -c 4 172.1.0.4八,性能測試:
推薦使用iperf、qperf、scp、ping等常見命令測試。九,Calico缺陷
直接借用http://xelatex.github.io/2015/09/06/calico-docker/- Calico only supports?TCP, UDP, ICMP and ICMPv6?protocol. If you want to use other L4 protocols, you need to choose Flannel, Weave or Docker Overlay Network.
- Calico doesn’t have encryption data path. It’s not safe to build overlay network with Calico over untrusted network.
- The performance of Calico with IP-over-IP option is quite bad, which?--ipip?option is a must in a public data center connected with IP network.(或者將兩主機(jī)通過BGP協(xié)議連接)
- No IP overlap support. Though Calico community is developing a experimental feature that put overlap IPv4 packages into IPv6 package. But this is only an auxiliary solution and doesn’t fully support IP overlap technically.
轉(zhuǎn)載于:https://www.cnblogs.com/tingfengainiaini/p/5010696.html
總結(jié)
以上是生活随笔為你收集整理的Calico在Docker中的搭建的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。