新聞中心
隨著Kubernetes王者時(shí)代的到來,計(jì)算、網(wǎng)絡(luò)、存儲(chǔ)、安全是Kubernetes繞不開的話題,本次主要分享Kubernetes中的網(wǎng)絡(luò)類型,,后續(xù)還會(huì)有Kubernetes其它方面的分享。

創(chuàng)新互聯(lián)服務(wù)項(xiàng)目包括濮陽網(wǎng)站建設(shè)、濮陽網(wǎng)站制作、濮陽網(wǎng)頁制作以及濮陽網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,濮陽網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到濮陽省份的部分城市,未來相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
Pod內(nèi)容器之間的通信:localhost
在同一個(gè)pod內(nèi)由pause鏡像啟動(dòng)的容器。所有運(yùn)行于同一個(gè)Pod內(nèi)的容器與同一主機(jī)上的多個(gè)進(jìn)程類似,彼此之間可通過lo接口完成交互。
Kubernetes 網(wǎng)絡(luò)類型Kubernetes 網(wǎng)絡(luò)類型
同一node上的Pod之間的通信:overlay network
同一個(gè)Node內(nèi)的不同Pod之間可以直接采用對(duì)方Pod的IP地址通信,而且不需要使用其他發(fā)現(xiàn)機(jī)制,例如DNS、Consul或者etcd。
Pod1和Pod2都是通信veth:pair連接到同一個(gè)docker0網(wǎng)橋上,它們的IP地址IP1、IP2都是從docker0網(wǎng)段上動(dòng)態(tài)獲取的,它們和網(wǎng)橋本身的IP3是同一個(gè)網(wǎng)段的。由于Pod1和Pod2處于同一局域網(wǎng)內(nèi),它們之間可以通過docker0作為路由量進(jìn)行通信。
Kubernetes 網(wǎng)絡(luò)類型Kubernetes 網(wǎng)絡(luò)類型
不同node上的Pod之間的通信:iptables規(guī)則
在Kubernetes的網(wǎng)絡(luò)世界中,Pod之間假設(shè)是通過訪問對(duì)方的Pod IP進(jìn)行通信的,而不同Node之間的通信只能通過Node的物理網(wǎng)卡進(jìn)行,Pod的IP地址是由各Node上的docker0網(wǎng)橋動(dòng)態(tài)分配的。我們想要實(shí)現(xiàn)跨Node的Pod之間的通信,至少需要滿足下面三個(gè)條件:
知道Pod IP 和Node IP之間的映射關(guān)系,通過Node IP轉(zhuǎn)發(fā)到Pod IP;
在整個(gè)Kubernetes集群中對(duì)Pod的IP分配不能出現(xiàn)沖突;
從Pod中發(fā)出的數(shù)據(jù)包不應(yīng)該進(jìn)行NAT地址轉(zhuǎn)換。
Kubernetes會(huì)記錄所有正在運(yùn)行的Pod的IP分配信息,并將這些信息保存到etcd中(作為Service的Endpoint),這樣我們就可以知道PodIP和Node IP之間的映射關(guān)系。
以Flannel為例,F(xiàn)lannel實(shí)現(xiàn)的容器的跨主機(jī)通信通過如下過程實(shí)現(xiàn):
每個(gè)主機(jī)上安裝并運(yùn)行etcd和flannel;
在etcd中規(guī)劃配置所有主機(jī)的docker0子網(wǎng)范圍;
每個(gè)主機(jī)上的flanneld根據(jù)etcd中的配置,為本主機(jī)的docker0分配子網(wǎng),保證所有主機(jī)上的docker0網(wǎng)段不重復(fù),并將結(jié)果(即本主機(jī)上的docker0子網(wǎng)信息和本主機(jī)IP的對(duì)應(yīng)關(guān)系)存入etcd庫中,這樣etcd庫中就保存了所有主機(jī)上的docker子網(wǎng)信息和本主機(jī)IP的對(duì)應(yīng)關(guān)系;
當(dāng)需要與其他主機(jī)上的容器進(jìn)行通信時(shí),查找etcd數(shù)據(jù)庫,找到目的容器的子網(wǎng)所對(duì)應(yīng)的outip(目的宿主機(jī)的IP);
將原始數(shù)據(jù)包封裝在VXLAN或UDP數(shù)據(jù)包中,IP層以outip為目的IP進(jìn)行封裝;
由于目的IP是宿主機(jī)IP,因此路由是可達(dá)的;
VXLAN或UDP數(shù)據(jù)包到達(dá)目的宿主機(jī)解封裝,解出原始數(shù)據(jù)包,最終到達(dá)目的容器。
Kubernetes 網(wǎng)絡(luò)類型Kubernetes 網(wǎng)絡(luò)類型
Service與Pod間的通信:iptables規(guī)則
集群網(wǎng)絡(luò)需要在啟動(dòng)kube-apiserver時(shí)經(jīng)由“—service-cluster-ip-range”選項(xiàng)進(jìn)行指定,如10.96.0.0/12,而每個(gè)Service對(duì)象在此網(wǎng)絡(luò)中均擁一個(gè)稱為Cluster-IP的固定地址。
管理員或用戶對(duì)Service對(duì)象的創(chuàng)建或更改操作由API Server存儲(chǔ)完成后觸發(fā)各節(jié)點(diǎn)上的kube-proxy,并根據(jù)代理模式的不同將其定義為相應(yīng)節(jié)點(diǎn)上的iptables規(guī)則或ipvs規(guī)則,借此完成從Service的Cluster-IP與Pod-IP之間的報(bào)文轉(zhuǎn)發(fā)
Kubernetes 網(wǎng)絡(luò)類型Kubernetes 網(wǎng)絡(luò)類型
集群外部到Pod對(duì)象之間的通信
將集群外部的流量引入到Pod對(duì)象的方式有受限于Pod所在的工作節(jié)點(diǎn)范圍的節(jié)點(diǎn)端口(nodePort)和主機(jī)網(wǎng)絡(luò)(hostNetwork)兩種,以及工作于集群級(jí)別的NodePort或LoadBalancer類型的Service對(duì)象。
即便是四層代理的模式也要經(jīng)由兩級(jí)轉(zhuǎn)發(fā)才能到達(dá)目標(biāo)Pod資源:請(qǐng)求流量首先到達(dá)外部負(fù)載均衡器,由其調(diào)度至某個(gè)工作節(jié)點(diǎn)之上,而后再由工作節(jié)點(diǎn)的netfilter(kube-proxy)組件上的規(guī)則(iptables或ipvs)調(diào)度至某個(gè)目標(biāo)Pod對(duì)象。
分享題目:詳解Kubernetes中的網(wǎng)絡(luò)類型
文章鏈接:http://www.dlmjj.cn/article/dhcshec.html


咨詢
建站咨詢
