摘要:在這種模式下,部署需要執行此處下載的仍可以參照上文的部署方式進行等的定制化。網絡通過方式部署好后,我們在集群中創建幾個我們在這個上來看。
calico的部署
1、下載模板
wget https://docs.projectcalico.org/v3.1/getting-started/kubernetes/installation/hosted/kubeadm/1.7/calico.yaml
可以得到一份calico官方提供的v3.1版本calico的部署模板(基于kubeadm)。當然里面都是社區的鏡像,我們可以替換成本地鏡像.建議到網易云的景象中心下載,很多其他的國內鏡像倉庫都不做維護了。
2、啟/禁用 ip-ip
目前官方提供的模板里,默認打開了ip-ip功能,該功能會在node上創建一個設備:tunl0,容器的網絡數據會經過該設備被封裝一個ip頭再轉發。這里,calico.yaml中通過修改calico-node的環境變量:CALICO_IPV4POOL_IPIP來實現ipip功能的開關:默認是Always,表示開啟;Off表示關閉ipip; cross-subnet表示開啟并支持跨子網,目前用不到這種類型。
sed -i "s#Always#Off#g" calico.yaml
3、部署:
注意:部署前,要配置一個參數,讓calico-node組件能夠識別node的IP,node上可能有多塊網卡,官方提供的yaml文件中,ip識別策略(IPDETECTMETHOD)沒有配置,即默認為first-found,這會導致一個網絡異常的ip作為nodeIP被注冊,從而影響node-to-node mesh。我們可以修改成can-reach的策略,嘗試連接某一個Ready的node的IP,以此選擇出正確的IP。
為了方便,下面的腳本里,我以任意一個node的ip地址為reach 地址
connective_ip=`kubectl get node -o wide |grep Ready |head -n1 |awk "{print $6}"` sed -i -rn "p;/name: IP/,/autodetect/H;/autodetect/{g;s/^ //;p}" calico.yaml sed -i "1,/name: IP/{s/name: IP/name: IP_AUTODETECTION_METHOD/}" calico.yaml sed -i "1,/"autodetect"/{s/"autodetect"/can-reach=__ONE_CONNECTIVE_ENDPOINT__/}" calico.yaml sed -i "s#__ONE_CONNECTIVE_ENDPOINT__#$connective_ip#g" calico.yaml
執行:
kubectl apply -f calico.yaml
4、calico使用過程中的一些其他點
calico以ipip模式部署完畢后,node上會有一個tunl0的網卡設備,這是ipip做隧道封裝用的。當我們把節點下線,calico容器都停止后,這個設備依然還在,執行 rmmod ipip 命令可以將它刪除(如果calico-node仍在運行,會自動再建一個新的)
calico部署完畢后,其數據記錄在calico-etcd容器運行節點的/var/etcd/calico-data目錄中,如果要完全清理集群中的etcd數據,需要將該目錄刪除。
calico支持以kubernetes為存儲后端,以這種方式部署時,calico不再需要額外部署etcd,而是將數據以CRD的方式存到k8s中。calico的組件依賴kubeconfig與k8s交互。在這種模式下,部署calico需要執行:
wget https://docs.projectcalico.org/v3.1/getting-started/kubernetes/installation/hosted/kubernetes-datastore/calico-networking/1.7/calico.yaml wget https://docs.projectcalico.org/v3.1/getting-started/kubernetes/installation/hosted/rbac-kdd.yaml kubectl apply -f rbac-kdd.yaml kubectl apply -f calico.yaml
此處下載的calico.yaml 仍可以參照上文的部署方式進行ipip、ip pool等的定制化。calico bgp 網絡
通過bgp方式部署好calico后,我們在集群中創建幾個pod:
root@k8s-calico1:~# pods NAMESPACE NAME READY STATUS RESTARTS AGE IP NODE huang1 huangtest-69d9fffffd97-cbzbm 1/1 Running 0 20m 192.168.211.1 k8s-calico4 huang1 huangtest-69d9fffffd97-pbvvw 1/1 Running 0 3m 192.168.210.194 k8s-calico3 huang2 hhh-6897d64fcd-4zph4 1/1 Running 0 1d 192.168.97.2 k8s-calico2
我們在k8s-calico2這個node上來看。執行ip r, 在這個node的路由中,需要我們關注的有:
192.168.97.2 dev calic285cddbb40 scope link blackhole 192.168.97.0/26 proto bird 192.168.210.192/26 via 10.173.32.26 dev eth0 proto bird 192.168.211.0/26 via 10.173.32.25 dev eth0 proto bird
192.168.97.2 dev calic285cddbb40 scope link 這條路由將通向容器ip的請求導向veth:calic285cddbb40 ,進而讓請求直達容器內的網卡。
blackhole 192.168.97.0/26 proto bird 表示發往192.168.97.0/26網段的報文都會被丟棄且不會回復源端。配置這條路由的原因是:這臺機器上的calico網絡可分配的cidr是192.168.97.0/26,容器里訪問同網段的其他IP時,配置該路由以避免報文被發到外部。
最后兩條,分別記錄了:要訪問calico網絡中的某個網段,需要以對應的node IP為網關,通過eth0發包。也就是說通過這兩條路由,可以將部分網段(目的IP)的包經由eth0發送到正確的地方。
我們可以這么理解:pod hhh-6897d64fcd-4zph4中ping huangtest-69d9fffffd97-pbvvw時,流量是這么走的:
0、數據包封裝完成,srcip:192.168.97.2 , destip:192.168.210.194
1、容器中只有eth0網卡,容器里ip r 看到的是default **** dev eth0,所以流量通過容器的eth0發送。
2、容器網卡的配置是通過vethpair做的,也就是說,容器里網卡發的包,在宿主機上都會被calic285cddbb40設備發出。
3、通過第2步,網絡報文就在宿主機的網絡中,受宿主機路由影響,192.168.210.192/26 via 10.173.32.26 dev eth0 proto bird這條路由會將數據從eth0轉發,并發給路由中記錄的網關:10.173.32.26(這個ip,就是pod huangtest-69d9fffffd97-pbvvw所在的node:k8s-calico3 的ip)
4、10.173.32.26是node:k8s-calico3上eth0的ip,收到包后,在機器自身的路由表中尋找合理的路由,當然這個地方也會有路由:192.168.210.194 dev calif6874dae1d2 scope link,于是包順利被對端接收
我們通過ip-ip模式部署calico,然后將原有的pod全部刪掉重建,如下:
root@k8s-calico1:~# pods NAMESPACE NAME READY STATUS RESTARTS AGE IP NODE huang1 huangtest-69d9fffffd97-2b8hr 1/1 Running 0 1m 192.168.97.1 k8s-calico2 huang1 huangtest-69d9fffffd97-npwzw 1/1 Running 0 1m 192.168.210.65 k8s-calico4 huang2 hhh-6897d64fcd-kqsj4 1/1 Running 0 10s 192.168.210.129 k8s-calico3
我們再去看看k8s-calico2這個node 上的路由,同樣的需要我們關注的路由有下面的幾條:
root@k8s-calico2:~# ip r |grep bird 192.168.97.1 dev cali3683f65394b scope link blackhole 192.168.97.0/26 proto bird 192.168.110.64/26 via 10.173.32.24 dev tunl0 proto bird onlink 192.168.210.64/26 via 10.173.32.25 dev tunl0 proto bird onlink 192.168.210.128/26 via 10.173.32.26 dev tunl0 proto bird onlink
前兩條不再贅述,我們看到最后三條路由,其實他們描述的邏輯與BGP的那兩條沒有差別,只不過網卡換成了tunl0.
我們以一個例子來解釋清楚:pod huangtest-69d9fffffd97-2b8hr ping hhh-6897d64fcd-kqsj4
0、封裝報文,SRCIP:192.168.97.1 DESTIP:192.168.210.129
1、容器中只有eth0網卡,容器里ip r 看到的是default **** dev eth0,所以流量通過容器的eth0發送。
2、容器網卡的配置是通過vethpair做的,也就是說,容器里網卡發的包,在宿主機上都會被calic285cddbb40設備發出。
3、通過第2步,網絡報文就在宿主機的網絡中,受宿主機路由影響,192.168.210.128/26 via 10.173.32.26 dev tunl0 proto bird onlink 識別到匹配的對端IP,將報文從tunl0發出到10.173.32.26。這里,tunl0會對報文進行封裝,在原有的ip報文之上封裝了一個ip頭部,新的頭部中,srcip是宿主機自身的ip:10.173.32.23, destip是對端的ip地址:10.173.32.26。
我們可以通過tcpdump抓包看到這個步驟:
封裝前:
封裝后(注意到輸出內容結尾有ipip-proto-4):
4、由于宿主機上只有一個eth的物理機網卡,所以流量終究還是從eth0向外發出到10.173.32.26。10.173.32.26這個節點的eth0網卡,收到了報文后,發現帶有ipip協議的標記(第3步中tcpdump抓包看到的ipip-proto-4),將ipip頭部解開,于是處理到了真實的報文。
5、宿主機上192.168.210.129 dev cali5ce61eb6bc2 scope link 這個路由將包發給vethpair,從而被容器內的eth0接收。
6、icmp響應包的走向與上述的走向邏輯上相同。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/32740.html
摘要:第層網絡的一個值得注意的示例是以太網,其中表示為子層。與其他方案相比,相對容易安裝和配置。與不同,不使用網絡。網絡策略是其最受追捧的功能之一。 本文將在介紹技術原理和相應術語的基礎上,再集中探索與詳細對比目前最流行的CNI插件:Flannel、Calico、Weave和Canal,對比介紹它們的原理、使用方法、適用場景和優缺點等。 showImg(https://segmentfaul...
摘要:第層網絡的一個值得注意的示例是以太網,其中表示為子層。與其他方案相比,相對容易安裝和配置。與不同,不使用網絡。網絡策略是其最受追捧的功能之一。 本文將在介紹技術原理和相應術語的基礎上,再集中探索與詳細對比目前最流行的CNI插件:Flannel、Calico、Weave和Canal,對比介紹它們的原理、使用方法、適用場景和優缺點等。 showImg(https://segmentfaul...
摘要:模式容器直接使用宿主機的網絡配置,包括網卡,路由等,這種方案下,從網絡層面來看,容器就不是容器了,只是一個宿主機上的進程端口而已。 注:本篇僅僅是對各個網絡方案的簡介和思考。需要深入學習如何部署和使用的同學請自行度娘~ 中小docker用戶的苦惱 docker的使用者十分廣泛,不止有網易蜂巢,daocloud,時速云這類的已經成熟化的公有云服務,許多中小型企業內部也在試圖將docker...
摘要:模式容器直接使用宿主機的網絡配置,包括網卡,路由等,這種方案下,從網絡層面來看,容器就不是容器了,只是一個宿主機上的進程端口而已。 注:本篇僅僅是對各個網絡方案的簡介和思考。需要深入學習如何部署和使用的同學請自行度娘~ 中小docker用戶的苦惱 docker的使用者十分廣泛,不止有網易蜂巢,daocloud,時速云這類的已經成熟化的公有云服務,許多中小型企業內部也在試圖將docker...
閱讀 3256·2021-09-22 15:58
閱讀 1719·2019-08-30 14:17
閱讀 1722·2019-08-28 18:05
閱讀 1508·2019-08-26 13:33
閱讀 687·2019-08-26 12:20
閱讀 611·2019-08-26 12:18
閱讀 3195·2019-08-26 11:59
閱讀 1408·2019-08-26 10:36