Calico在Docker中的搭建
生活随笔
收集整理的這篇文章主要介紹了
Calico在Docker中的搭建
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一,Multi-host網絡需求
開始之前推薦兩篇文章 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中libnetwork團隊提供了multi-host網絡功能,能完成overlay網絡。但是網絡功能需要linux主機的內核在3.16以上。對于使用centos或者mint之類的用戶痛苦不堪,很多系統的內核還處于3.16以下。 隨著SDN概念的到來、云平臺的規模越來越大,Docker本身只能single host的問題嚴重限制了Docker的未來,雖然它相比VM有著數不盡的優勢。 其實在docker1.9之前就可以通過一些方式實現multi-host功能,比如使用OpenVSwitch、Flannel、Calico、Weave等這些機制。 OVS和Flannel、Weave底層都是用了Vxlan的方式(包括Docker1.9本身也是使用了Vxlan的實現),都是能夠完成Overlay的網絡。 OVS和Flannel和Weave再細分就是就是實現的具體方式的不同了。OVS是比較成熟的技術,做的很多年功能也很強大, 但是配置復雜,對于大規模配置和項目遷移、擴容會有很大的麻煩。Flannel、Calico、Weave、Docker1.9具體的區別看我上面給出的這個github博客,博主很贊。二,Calico介紹
Calico是一個純3層協議,支持VM、Docker、Rocket、OpenStack、Kubernetes、或者直接在物理機上使用。官網上給出可以支持上萬個主機、上百萬的工作負載(container),由于它是純三層協議,使用BGP協議(基于IP),更易于調試,支持IPv6,支持靈活的安全策略。 附上一個Calico官方給出的Calico與物理網絡、OVS的性能對比: http://www.projectcalico.org/calico-dataplane-performance/ 覺得文章中有些“夸張了自己的效果”,我自己的測試結果與這個文章中的結果的差別有些大,雖然確實Calico在網絡本身較好的情況下TCP有著絕對優勢,但是它的UDP性能并不算很突出,在非ipip模式時能保持一點領先,但是在ipip模式時候,與Flannel基本等同,甚至更差。 這里推薦兩篇Calico在Docker中使用的教程: 官方:https://github.com/projectcalico/calico-docker/blob/master/docs/getting-started/default-networking/Demonstration.md 一個博客:http://xelatex.github.io/2015/09/06/calico-docker/三,準備
1,兩臺主機:10.11.150.72、10.11.150.74 (我這里是Centos) 2,Calico-node image兩個方法獲得: 1,自己從Calico官方github上下載編譯:https://github.com/projectcalico/calico-docker? 2,直接從Docker hub上下載現成的,不過版本可能沒那么新: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,一個有ping命令的image,什么都可以,最簡單如busybox,我這里使用iperf的鏡像 5,calicoctl :自己找個版本,盡量最新版本,但是注意更新的內容。目前最新的是0.12.0:https://github.com/projectcalico/calico-docker/releases四,運行ETCD集群
Calico要求擁有一個etcd cluster作為k-v存儲,來存放自己的配置內容。 在10.11.150.72上運行: #!/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上運行etcd,組成cluster,兩臺機子都輸出published name后暫時沒有新的輸出就算是etcd cluster組建完成。 測試一下: 本機:? curl -L 127.0.0.1:2379/version集群:
curl -L 10.11.150.74:2379/version五,Calico Service
Calico在每個主機上通過一個自己的container與其他主機或者網絡通訊,即calico-node的container,這個container里面包含了Bird路由管理、Felix協議等。 介紹:http://www.projectcalico.org/learn/ 在兩臺主機上分別運行,后面的ip是主機ip ./calicoctl node --ip=10.11.150.72運行后在兩個主機用docker ps可以看到正在運行calico-node的container
下面為我們的calico網絡添加可用的ip pool(在72或者74一臺主機上運行即可): ./calicoctl pool add 172.1.0.0/16 --nat-outgoing這里由于我的兩個主機72和74本身就在同一個子網下,主機相互之間不需要L2 switch。如果是跨子網、跨機房、跨公網就需要加上--ipip選項,或者你有權限直接修改路由器的BGP協議,將兩個不同子網的主機連接為BGP peer。
六,Container開始吧
在主機72上面新建兩個container: docker run --net=none --name worker-1 -tid iperf docker run --net=none --name worker-2 -tid iperf在74上也新建兩個
docker run --net=none --name worker-3 -tid iperf docker run --net=none --name worker-4 -tid iperf為container在calico中注冊一個獨立的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,也以此來完成安全策略。
添加兩個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內,worker-4單獨在PROF_2內。
七,測試一下吧
測試一下worker-1和worker-3之間可以通: docker exec worker-1 ping -c 4 172.1.0.3 測試一下worker-1和worker-4之間不在同一個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.(或者將兩主機通過BGP協議連接)
- 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.
轉載于:https://www.cnblogs.com/tingfengainiaini/p/5010696.html
總結
以上是生活随笔為你收集整理的Calico在Docker中的搭建的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 总线设备驱动模型
- 下一篇: Android应用在不同版本间兼容性处理