下載資源 :安裝 kubernetes 網(wǎng)絡(luò)組件-Calico
一,簡(jiǎn)介
????????Calico是Kubernetes生態(tài)系統(tǒng)中另一種流行的網(wǎng)絡(luò)選擇。雖然Flannel被公認(rèn)為是最簡(jiǎn)單的選擇,但Calico以其性能、靈活性而聞名。Calico的功能更為全面,不僅提供主機(jī)和pod之間的網(wǎng)絡(luò)連接,還涉及網(wǎng)絡(luò)安全和管理。Calico CNI插件在CNI框架內(nèi)封裝了Calico的功能。
????????除了網(wǎng)絡(luò)連接外,Calico還以其先進(jìn)的網(wǎng)絡(luò)功能而聞名。網(wǎng)絡(luò)策略是其最受追捧的功能之一。此外,Calico還可以與服務(wù)網(wǎng)格Istio集成,以便在服務(wù)網(wǎng)格層和網(wǎng)絡(luò)基礎(chǔ)架構(gòu)層中解釋和實(shí)施集群內(nèi)工作負(fù)載的策略。這意味著用戶可以配置強(qiáng)大的規(guī)則,描述pod應(yīng)如何發(fā)送和接受流量,提高安全性并控制網(wǎng)絡(luò)環(huán)境。如果對(duì)你的環(huán)境而言,支持網(wǎng)絡(luò)策略是非常重要的一點(diǎn),而且你對(duì)其他性能和功能也有需求,那么Calico會(huì)是一個(gè)理想的選擇。
????????盡管部署Calico所需的操作看起來相當(dāng)簡(jiǎn)單,但它創(chuàng)建的網(wǎng)絡(luò)環(huán)境同時(shí)具有簡(jiǎn)單和復(fù)雜的屬性。與Flannel不同,Calico不使用overlay網(wǎng)絡(luò)。相反,Calico配置第3層網(wǎng)絡(luò),該網(wǎng)絡(luò)使用BGP路由協(xié)議在主機(jī)之間路由數(shù)據(jù)包。這意味著在主機(jī)之間移動(dòng)時(shí),不需要將數(shù)據(jù)包包裝在額外的封裝層中。BGP路由機(jī)制可以本地引導(dǎo)數(shù)據(jù)包,而無需額外在流量層中打包流量。
????????Calico不使用重疊網(wǎng)絡(luò)比如flannel和libnetwork重疊網(wǎng)絡(luò)驅(qū)動(dòng),它是一個(gè)純?nèi)龑拥姆椒?,使用虛擬路由代替虛擬交換,每一臺(tái)虛擬路由通過BGP協(xié)議傳播可達(dá)信息(路由)到剩余數(shù)據(jù)中心;Calico在每一個(gè)計(jì)算節(jié)點(diǎn)利用Linux Kernel實(shí)現(xiàn)了一個(gè)高效的vRouter來負(fù)責(zé)數(shù)據(jù)轉(zhuǎn)發(fā),而每個(gè)vRouter通過BGP協(xié)議負(fù)責(zé)把自己上運(yùn)行的workload的路由信息像整個(gè)Calico網(wǎng)絡(luò)內(nèi)傳播——小規(guī)模部署可以直接互聯(lián),大規(guī)模下可通過指定的BGP route reflector來完成。
二、Calico 工作原理
????????Calico把每個(gè)操作系統(tǒng)的協(xié)議棧認(rèn)為是一個(gè)路由器,然后把所有的容器認(rèn)為是連在這個(gè)路由器上的網(wǎng)絡(luò)終端,在路由器之間跑標(biāo)準(zhǔn)的路由協(xié)議——BGP的協(xié)議,然后讓它們自己去學(xué)習(xí)這個(gè)網(wǎng)絡(luò)拓?fù)湓撊绾无D(zhuǎn)發(fā)。所以Calico方案其實(shí)是一個(gè)純?nèi)龑拥姆桨?,也就是說讓每臺(tái)機(jī)器的協(xié)議棧的三層去確保兩個(gè)容器,跨主機(jī)容器之間的三層連通性。
??????????對(duì)于控制平面,它每個(gè)節(jié)點(diǎn)上會(huì)運(yùn)行兩個(gè)主要的程序,一個(gè)是Felix,它會(huì)監(jiān)聽ECTD中心的存儲(chǔ),從它獲取事件,比如說用戶在這臺(tái)機(jī)器上加了一個(gè)IP,或者是分配了一個(gè)容器等。接著會(huì)在這臺(tái)機(jī)器上創(chuàng)建出一個(gè)容器,并將其網(wǎng)卡、IP、MAC都設(shè)置好,然后在內(nèi)核的路由表里面寫一條,注明這個(gè)IP應(yīng)該到這張網(wǎng)卡。綠色部分是一個(gè)標(biāo)準(zhǔn)的路由程序,它會(huì)從內(nèi)核里面獲取哪一些IP的路由發(fā)生了變化,然后通過標(biāo)準(zhǔn)BGP的路由協(xié)議擴(kuò)散到整個(gè)其他的宿主機(jī)上,讓外界都知道這個(gè)IP在這里,你們路由的時(shí)候得到這里來。
????????由于Calico是一種純?nèi)龑拥膶?shí)現(xiàn),因此可以避免與二層方案相關(guān)的數(shù)據(jù)包封裝的操作,中間沒有任何的NAT,沒有任何的overlay,所以它的轉(zhuǎn)發(fā)效率可能是所有方案中最高的,因?yàn)樗陌苯幼咴鶷CP/IP的協(xié)議棧,它的隔離也因?yàn)檫@個(gè)棧而變得好做。因?yàn)門CP/IP的協(xié)議棧提供了一整套的防火墻的規(guī)則,所以它可以通過IPTABLES的規(guī)則達(dá)到比較復(fù)雜的隔離邏輯。
三、Calico網(wǎng)絡(luò)方式
????????IPIP模式:把 IP 層封裝到IP 層的一個(gè) tunnel。作用其實(shí)基本上就相當(dāng)于一個(gè)基于IP層的網(wǎng)橋!一般來說,普通的網(wǎng)橋是基于mac層的,根本不需 IP,而這個(gè)ipip 則是通過兩端的路由做一個(gè) tunnel,把兩個(gè)本來不通的網(wǎng)絡(luò)通過點(diǎn)對(duì)點(diǎn)連接起來。
????????BGP邊界網(wǎng)關(guān)協(xié)議(Border Gateway Protocol, BGP):是互聯(lián)網(wǎng)上一個(gè)核心的去中心化自治路由協(xié)議。它通過維護(hù)IP路由表或‘前綴’表來實(shí)現(xiàn)自治系統(tǒng)(AS)之間的可達(dá)性,屬于矢量路由協(xié)議。BGP不使用傳統(tǒng)的內(nèi)部網(wǎng)關(guān)協(xié)議(IGP)的指標(biāo),而使用基于路徑、網(wǎng)絡(luò)策略或規(guī)則集來決定路由。因此,它更適合被稱為矢量性協(xié)議,而不是路由協(xié)議。BGP,通俗的講就是講接入到機(jī)房的多條線路(如電信、聯(lián)通、移動(dòng)等)融合為一體,實(shí)現(xiàn)多線單IP,BGP 機(jī)房的優(yōu)點(diǎn):服務(wù)器只需要設(shè)置一個(gè)IP地址,最佳訪問路由是由網(wǎng)絡(luò)上的骨干路由器根據(jù)路由跳數(shù)與其它技術(shù)指標(biāo)來確定的,不會(huì)占用服務(wù)器的任何系統(tǒng)。
????????Route Reflector 模式(RR)(路由反射):Calico維護(hù)的網(wǎng)絡(luò)在默認(rèn)是(Node-to-Node Mesh)全互聯(lián)模式,Calico集群中的節(jié)點(diǎn)之間都會(huì)相互建立連接,用于路由交換。但是隨著集群規(guī)模的擴(kuò)大,mesh模式將形成一個(gè)巨大服務(wù)網(wǎng)格,連接數(shù)成倍增加。這時(shí)就需要使用 Route Reflector(路由器反射)模式解決這個(gè)問題。
四,安裝
- 安裝 kubernetes 網(wǎng)絡(luò)組件-Calico
上傳 calico.yaml 到 master1 上,使用 yaml 文件安裝 calico 網(wǎng)絡(luò)插件 。
[root@master1 ~]# kubectl apply -f calico.yaml
?
注:在線下載配置文件地址是: https://docs.projectcalico.org/manifests/calico.yaml
[root@master1 ~]# kubectl get pod -n kube-system
?
?
再次查看集群狀態(tài)。
[root@master1 ~]# kubectl get nodes
- 測(cè)試在 k8s 創(chuàng)建 pod 是否可以正常訪問網(wǎng)絡(luò)
#把 busybox-1-28.tar.gz 上傳到 node1 節(jié)點(diǎn),手動(dòng)解壓
[root@node1 ~]# docker load -i busybox-1-28.tar.gz
[root@master1 ~]#
kubectl run busybox --image busybox:1.28 --restart=Never --rm -it busybox -- sh
/ # ping www.baidu.com
#通過上面可以看到能訪問網(wǎng)絡(luò),說明 calico 網(wǎng)絡(luò)插件已經(jīng)被正常安裝了
?
?
- 測(cè)試 coredns 是否正常
[root@master1 ~]#
kubectl run busybox --image busybox:1.28 --restart=Never --rm -it busybox -- sh
/ # nslookup kubernetes.default.svc.cluster.local
Server: 10.96.0.10
Address 1: 10.96.0.10 kube-dns.kube-system.svc.cluster.local
?
Name: kubernetes.default.svc.cluster.local
Address 1: 10.96.0.1 kubernetes.default.svc.cluster.local
10.96.0.10 就是我們 coreDNS 的 clusterIP,說明 coreDNS 配置好了。
解析內(nèi)部 Service 的名稱,是通過 coreDNS 去解析的。
#注意:文章來源:http://www.zghlxwxcb.cn/news/detail-669067.html
busybox 要用指定的 1.28 版本,不能用最新版本,最新版本,nslookup 會(huì)解析不到 dns 和 ip文章來源地址http://www.zghlxwxcb.cn/news/detail-669067.html
到了這里,關(guān)于k8s 之網(wǎng)絡(luò)組件-Calico(十九)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!