自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Kubernetes網(wǎng)絡(luò)技術(shù)解析之Pod基于路由模式的通信實(shí)現(xiàn)

網(wǎng)絡(luò)
Kubernetes通過CNI提供統(tǒng)一的接口和協(xié)議,使得我們?cè)谑褂弥锌梢愿鶕?jù)需求自行選擇不同的網(wǎng)絡(luò)組件以及模式。

 

前言

Kubernetes集群內(nèi),Pod之間可以通信,是Kubernetes網(wǎng)絡(luò)實(shí)現(xiàn)的重要場(chǎng)景之一。

Kubernetes通過CNI提供統(tǒng)一的接口和協(xié)議,使得我們?cè)谑褂弥锌梢愿鶕?jù)需求自行選擇不同的網(wǎng)絡(luò)組件以及模式。比較常見的選型,如Flannel的VXLAN或者HostGW、Calico的IPIP或者BGP等等。

這些不同的網(wǎng)絡(luò)組件究竟是怎么實(shí)現(xiàn)Pod的通信的,底層的技術(shù)原理是什么,本篇文章就帶大家以Calico的BGP模式的通信模型(基于路由的純?nèi)龑幽P停槔馕銎涞讓拥膶?shí)現(xiàn)原理。

既然提到了容器網(wǎng)絡(luò),就肯定繞不開Network Namespace。Network Namespace是實(shí)現(xiàn)虛擬網(wǎng)絡(luò)的核心技術(shù)(這里就不展開細(xì)說了,有興趣的同學(xué)可以自行了解一下Linux Namespaces),已被廣泛的運(yùn)用在了容器相關(guān)的網(wǎng)絡(luò)場(chǎng)景中。一個(gè)docker創(chuàng)建的容器會(huì)有一個(gè)獨(dú)立的Network Namespace,一個(gè)Kubernetes的Pod里的N個(gè)容器也會(huì)共用一個(gè)獨(dú)立的Network Namespace。

那么Network Namespace之間是怎么實(shí)現(xiàn)通信的?

今天就來自己動(dòng)手實(shí)現(xiàn)基于路由模式,多個(gè)可以跨主機(jī)通信的Network Namespace(網(wǎng)絡(luò)命名空間)。

動(dòng)手創(chuàng)建一個(gè)Network Namespace

1、準(zhǔn)備一臺(tái)Linux主機(jī)(node03--100.100.198.250),檢查 ip 命令是否有效(如果沒有需要安裝iproute2)

2、執(zhí)行以下命令創(chuàng)建一個(gè)新的net-ns demo01

  1. ip netns add demo01 #創(chuàng)建demo01 
  2.  
  3. ip netns list #查看結(jié)果,返回中包含`demo01(id:xxx)`,說明創(chuàng)建成功 

3、查看demo01下的網(wǎng)卡資源并開啟lo網(wǎng)卡

  1. ip netns exec demo01 ip addr #ip netns exec demo01 <需要執(zhí)行的命令>可以實(shí)現(xiàn)對(duì)demo01的相關(guān)操作,也可以通過`ip netns exec demo01 /bin/bash`進(jìn)入到demo01的虛擬網(wǎng)絡(luò)環(huán)境中之后,再直接通過執(zhí)行命令的方式操作。操作完成需要退出至主機(jī)網(wǎng)絡(luò)空間,需執(zhí)行exit 
  2.  
  3. ip netns exec demo01 ip link set lo up #開啟lo網(wǎng)卡,lo網(wǎng)卡自動(dòng)綁定127.0.0.1 
  4.  
  5. #通過第一條命令可以看到該namespace下只有一塊lo網(wǎng)卡,且該網(wǎng)卡是關(guān)閉狀態(tài)(可以在host主機(jī)網(wǎng)絡(luò)空間直接執(zhí)行`ip addr`觀察兩者區(qū)別)  

demo01-lo網(wǎng)卡已啟動(dòng)

至此,一個(gè)新的Network Namespace demo01已經(jīng)創(chuàng)建完成。

目前demo01只具有本地lo網(wǎng)卡,那該如何實(shí)現(xiàn)與Host主機(jī)網(wǎng)絡(luò)空間通信呢?

為demo01配置網(wǎng)卡對(duì)和路由

實(shí)現(xiàn)demo01與Host主機(jī)網(wǎng)絡(luò)空間通信,也可以理解成兩個(gè)獨(dú)立的Network Namespace之間通訊。所以我們要?jiǎng)?chuàng)建一個(gè)網(wǎng)卡對(duì),且把兩端分別放在host主機(jī)網(wǎng)絡(luò)空間和demo01中,并啟動(dòng)網(wǎng)卡。

  1. ip link add vethhost01 type veth peer name vethdemo01  #創(chuàng)建虛擬網(wǎng)卡對(duì)  ip link add <網(wǎng)卡名稱> type veth peer name <配對(duì)的網(wǎng)卡名稱> 
  2.  
  3. ip addr  #查看網(wǎng)卡信息,可以看到host主機(jī)網(wǎng)絡(luò)空間下多了兩張新建的網(wǎng)卡 

可以看到host主機(jī)網(wǎng)絡(luò)空間下創(chuàng)建的新網(wǎng)卡對(duì)

將網(wǎng)卡對(duì)的一端分配至demo01中,并將其開啟:

  1. ip link set vethdemo01 netns demo01  #將虛擬網(wǎng)卡vethdemo01分配到demo01中 ip link set <網(wǎng)卡名稱> netns <net-ns名稱> 
  2.  
  3. ip link set vethhost01 up  #開啟host主機(jī)網(wǎng)絡(luò)空間端的網(wǎng)卡 
  4.  
  5. ip netns exec demo01 ip link set vethdemo01 up  #開啟demo01端的網(wǎng)卡,至此兩張網(wǎng)卡已全部開啟,并且分別在兩個(gè)網(wǎng)絡(luò)命名空間下 

要實(shí)現(xiàn)通訊,還需要給demo01的網(wǎng)卡一個(gè)IP地址(host主機(jī)網(wǎng)絡(luò)空間下的網(wǎng)卡vethhost01這里不需要設(shè)置IP):

  1. ip netns exec demo01  ip addr add 10.0.1.2/24 dev vethdemo01 #將vethdemo01的IP設(shè)置為10.0.1.2(地址可以隨便設(shè)置,只要不與主機(jī)網(wǎng)絡(luò)同一網(wǎng)段即可) 添加IP的命令格式-- `ip addr add <IP地址/子網(wǎng)掩碼> dev <網(wǎng)卡>` 

demo01-vethdemo01網(wǎng)卡IP已配置完成

設(shè)置好IP是不是就能實(shí)現(xiàn)通訊呢?比如ping通?

驗(yàn)證

  • 在Host主機(jī)網(wǎng)絡(luò)空間執(zhí)行 ping 10.0.1.2 ,結(jié)果:并無響應(yīng),數(shù)據(jù)包全部丟失,通過mtr發(fā)現(xiàn)數(shù)據(jù)流向了主機(jī)的默認(rèn)網(wǎng)關(guān)
  • 在demo01反向請(qǐng)求 ping 100.100.198.250 ,結(jié)果: connect: Network is unreachable

為什么不通?

  1. 10.0.1.2 
  2. 10.0.1.0/24 

結(jié)論:缺少路由。

添加雙向路由

要實(shí)現(xiàn)能ping通,一定是雙向可達(dá)的,所以來去兩個(gè)方向都需要有路由指向才能通信。

1、在Host主機(jī)網(wǎng)絡(luò)空間添加通往 10.0.1.2 的路由指向,將固定IP 10.0.1.2 指向同一網(wǎng)絡(luò)空間下的網(wǎng)卡vethhost01(它的對(duì)端就是demo01的網(wǎng)卡)

2、在demo01添加通往 100.100.198.250 的指向,只需要添加默認(rèn)路由網(wǎng)關(guān)指向自己的網(wǎng)卡vethdemo01(它的對(duì)端網(wǎng)卡vethhost01就在 100.100.198.252 的網(wǎng)絡(luò)空間下)

  1. route add -host 10.0.1.2 dev vethhost01  #host主機(jī)網(wǎng)絡(luò)空間添加-->demo01方向的路由  路由命令`route <動(dòng)作-常用的add或者del> <目標(biāo)地址類型-常用net或者h(yuǎn)ost> <目標(biāo)地址,如果是網(wǎng)段必須要加/子網(wǎng)掩碼> <下一跳的類型,網(wǎng)卡設(shè)備-dev、ip地址-gw> <下一條網(wǎng)卡名稱或者ip地址>`  這條路由的規(guī)則解讀是:當(dāng)主機(jī)收到目的地址是10.0.1.2的數(shù)據(jù)包,將其轉(zhuǎn)發(fā)到本機(jī)的vethost1網(wǎng)卡上 
  2.  
  3. ip netns exec demo01 route add default dev vethdemo01  #demo01添加默認(rèn)的路由,這條路由是為了下一條路由能生效 
  4.  
  5. ip netns exec demo01 route add -net 0.0.0.0 gw 100.100.198.250  #為了演示方便,這條路由是為了將Host主機(jī)網(wǎng)絡(luò)空間模擬成路由器的角色。將默認(rèn)的下一跳指向100.100.198.250,讓其轉(zhuǎn)發(fā)請(qǐng)求。  這條路由的規(guī)則解讀是:當(dāng)主機(jī)收到的數(shù)據(jù)包的目的地址在其他路由規(guī)則中匹配不到時(shí),將默認(rèn)都轉(zhuǎn)發(fā)到100.100.198.250 

再次驗(yàn)證,雙向已經(jīng)實(shí)現(xiàn)互通。

雙向互ping成功

到這里,一個(gè)可以能與Host主機(jī)網(wǎng)絡(luò)空間實(shí)現(xiàn)通信的Network Namespace就已經(jīng)創(chuàng)建完成了。

創(chuàng)建demo02,實(shí)現(xiàn)demo01與其互通

參照demo01的步驟我們可以再創(chuàng)建一個(gè)Network Namespace。

  1. 命名為demo02
  2. IP地址設(shè)置為 10.0.2.2
  3. 添加雙向路由,實(shí)現(xiàn) 100.100.198.252 與 10.0.2.2 互通

目前的網(wǎng)絡(luò)模型

以上都實(shí)現(xiàn)之后,驗(yàn)證網(wǎng)絡(luò)聯(lián)通情況:

  1. 在Host主機(jī)網(wǎng)絡(luò)空間與demo01/02雙向互ping
  2. 預(yù)期結(jié)果都為通,說明demo02也順利創(chuàng)建完成

驗(yàn)證demo01<---->demo02是否互通:

  • 結(jié)果:并無響應(yīng),數(shù)據(jù)包全部丟失,通過mtr發(fā)現(xiàn)數(shù)據(jù)流向了主機(jī)的默認(rèn)網(wǎng)關(guān) 100.100.198.250 之后數(shù)據(jù)包就不知去向
  • 現(xiàn)象與之前主機(jī)未添加到demo01的路由時(shí)很相似,但是目前Host主機(jī)網(wǎng)絡(luò)空間存在通往 10.0.1.2 、 10.0.2.2 的路由,數(shù)據(jù)包是可以從 100.100.198.250 通往demo01/02的
    • 唯一的不同是這次的數(shù)據(jù)包原地址是 10.0.1.2 和 10.0.2.2 ,數(shù)據(jù)包經(jīng)過 100.100.198.250 網(wǎng)卡進(jìn)行轉(zhuǎn)發(fā)

demo01/02的雙向互ping

demo01的mtr結(jié)果

demo02的mtr結(jié)果

數(shù)據(jù)包去哪了?

已經(jīng)有了路由,為什么數(shù)據(jù)包沒有被Host主機(jī)網(wǎng)絡(luò)空間轉(zhuǎn)發(fā)?

要弄清楚報(bào)文是如何通過內(nèi)核處理并最終抵達(dá)協(xié)議棧的,首先需要了解iptables對(duì)報(bào)文的處理流程。

什么是 4表5鏈 ?

報(bào)文被內(nèi)核基于iptables相關(guān)規(guī)則處理的邏輯走向

  • 每一條鏈用通俗的話講就是一個(gè) 關(guān)卡 (報(bào)文邏輯走向圖中的標(biāo)紅部分,分別是PREROUTING、INPUT、OUTPUT、FORWARD、POSTROUTING)
  • 每一個(gè) 關(guān)卡 里都可以配置相應(yīng)的規(guī)則
    • 一個(gè) 關(guān)卡 上可能不止有一條規(guī)則,可能有很多條規(guī)則,把這些規(guī)則串成一個(gè)集合的時(shí)候,就形成了 
    • 每個(gè)經(jīng)過這個(gè) 關(guān)卡 的報(bào)文,都要將這條鏈上的所有規(guī)則匹配一遍,如果有符合條件的規(guī)則,則執(zhí)行規(guī)則對(duì)應(yīng)的動(dòng)作(可能被丟棄,可能被處理之后流向下游,也可能直接流向下游)

  • 相同功能的規(guī)則的集合叫做  ,不同功能的規(guī)則,我們可以放置在不同的表中進(jìn)行管理
  • 鏈中的這些規(guī)則基于功能的不同大概分為四類(過濾、網(wǎng)絡(luò)地址轉(zhuǎn)換、拆解報(bào)文\修改\重新封裝、關(guān)閉連接追蹤)
    • filter表:負(fù)責(zé)過濾功能,防火墻。內(nèi)核模塊: iptables_filter ,可以實(shí)現(xiàn)對(duì)報(bào)文的過濾,限制某些報(bào)文無法通行(相關(guān)使用場(chǎng)景:防火墻的黑名單功能,禁止某些IP不能訪問,或者限制主機(jī)對(duì)外通信)
    • nat表:network address translation,網(wǎng)絡(luò)地址轉(zhuǎn)換功能。內(nèi)核模塊: iptable_nat ,可以實(shí)現(xiàn)對(duì)外發(fā)報(bào)文中的源、目的地址的轉(zhuǎn)換(相關(guān)使用場(chǎng)景:Docker的覆蓋網(wǎng)絡(luò),Docker啟動(dòng)的容器對(duì)外通信的源地址都不是容器的IP)
    • mangle表:拆解報(bào)文,做出修改,并重新封裝 的功能。內(nèi)核模塊: iptable_mangle ,可以實(shí)現(xiàn)修改數(shù)據(jù)包的一些標(biāo)志位,以便其他規(guī)則或程序可以利用這種標(biāo)志對(duì)數(shù)據(jù)包進(jìn)行過濾或策略路由(相關(guān)使用場(chǎng)景:Kubernetes-calico對(duì)集群容器網(wǎng)絡(luò)的policy實(shí)現(xiàn))
    • raw表:關(guān)閉nat表上啟用的連接追蹤機(jī)制。內(nèi)核模塊: iptable_raw ,可以實(shí)現(xiàn)對(duì)報(bào)文處理跳過NAT表和 ip_conntrack 處理,即不再做地址轉(zhuǎn)換和數(shù)據(jù)包的鏈接跟蹤處理了(相關(guān)使用場(chǎng)景:RAW表可以應(yīng)用在那些不需要做nat的情況下,以提高性能。如大量訪問的web服務(wù)器,可以讓80端口不再讓iptables做數(shù)據(jù)包的鏈接跟蹤處理,以提高用戶的訪問速度)

表和鏈的關(guān)系

  • 5個(gè)鏈的職責(zé)不同,所以某些鏈中注定不會(huì)包含某類規(guī)則
  • 在實(shí)際的使用過程中,是通過表作為操作入口,對(duì)規(guī)則進(jìn)行定義。在表中添加的規(guī)則時(shí)需要指定其所在的鏈

每個(gè)鏈中包含的規(guī)則類型

梳理報(bào)文走向

以Host主機(jī)網(wǎng)絡(luò)空間為分析對(duì)象,分析Host主機(jī)網(wǎng)絡(luò)空間主動(dòng)發(fā)起ping的過程

Host主機(jī)網(wǎng)路空間---->demo01(發(fā)送數(shù)據(jù)):

1、當(dāng)從 100.100.198.250 主動(dòng)發(fā)起ping時(shí),報(bào)文的起始位置在圖中的最上層的協(xié)議棧

2、經(jīng)過路由表判斷--用目的地址匹配到路由(如果匹配不到路由,不知道下一條去哪里,那么直接丟棄),標(biāo)記數(shù)據(jù)的下一跳--vethhost01

3、經(jīng)過OUTPUT鏈檢查(4種類型的規(guī)則policy默認(rèn)均為ACCEPT--不阻攔),由于也沒有其他規(guī)則,直接流轉(zhuǎn)到下游

  1. iptables -t raw --line-numbers -nvL OUTPUT  #查看iptables指定表的指定鏈的相關(guān)規(guī)則命名 `riptables -t <表名> --line-numbers -nvL <鏈名稱>`  該命令的解讀:打印OUTPUT鏈中的所有raw類型的規(guī)則,并能從policy的值獲取該類規(guī)則集合的默認(rèn)通行策略 
  2.  
  3. iptables -t mangle --line-numbers -nvL OUTPUT 
  4.  
  5. iptables -t nat --line-numbers -nvL OUTPUT 
  6.  
  7. iptables -t filter --line-numbers -nvL OUTPUT #該鏈功能最強(qiáng)大,四種類型的功能都有 

OUTPUT鏈的規(guī)則

4、經(jīng)過POSTROUTING鏈檢查(mangle和nat類型的規(guī)則policy默認(rèn)為ACCEPT--不阻攔),由于也沒有其他規(guī)則,最終將報(bào)文發(fā)送給100.100.198.252的網(wǎng)卡enp2s0

  1. iptables -t mangle --line-numbers -nvL POSTROUTING  #命令使用方式同上,POSTROUTING是網(wǎng)絡(luò)命名空間的`出口關(guān)卡` 
  2.  
  3. iptables -t nat --line-numbers -nvL POSTROUTING 

POSTROUTING鏈的規(guī)則

5、網(wǎng)卡enp2s0將報(bào)文發(fā)送至路由標(biāo)記的vethhost01,vethhost01會(huì)默認(rèn)將報(bào)文流轉(zhuǎn)到自己的網(wǎng)卡對(duì)對(duì)端--vethdemo01,抵達(dá)demo01的內(nèi)核

Host主機(jī)網(wǎng)路空間<----demo01(接收數(shù)據(jù)):

1、當(dāng)從demo01收到報(bào)文并返回應(yīng)答報(bào)文時(shí),應(yīng)答報(bào)文抵達(dá) 100.100.198.252 的網(wǎng)卡enp2s0(報(bào)文抵達(dá)網(wǎng)卡enp2s0前的過程,就是上述 發(fā)送數(shù)據(jù) 的過程,報(bào)文的起始位置就是demo01的協(xié)議棧)

2、內(nèi)核接受到網(wǎng)卡的報(bào)文,先經(jīng)過PREROUTING鏈檢查(policy默認(rèn)為ACCEPT--不阻攔),由于也沒有其他規(guī)則,直接流轉(zhuǎn)到下游

  1. iptables -t raw --line-numbers -nvL PREROUTING #命令使用方式同上,PREROUTING是網(wǎng)絡(luò)命名空間的`入口關(guān)卡` 
  2.  
  3. iptables -t mangle --line-numbers -nvL PREROUTING 
  4.  
  5. iptables -t nat --line-numbers -nvL PREROUTING 

PREROUTING鏈的規(guī)則

3、判斷報(bào)文目的地址是否是本機(jī)(目標(biāo)地址是本機(jī))

4、經(jīng)過INPUT鏈檢查(policy默認(rèn)為ACCEPT--不阻攔),由于也沒有其他規(guī)則,最終抵達(dá)協(xié)議棧,ping的發(fā)起端接收到返回報(bào)文,完成一次完整ICMP通訊

  1. iptables -t mangle --line-numbers -nvL INPUT #命令使用方式同上,經(jīng)過INPUT鏈的報(bào)文就能進(jìn)協(xié)議棧了 
  2.  
  3. iptables -t nat --line-numbers -nvL INPUT 
  4.  
  5. iptables -t filter --line-numbers -nvL INPUT 

INPUT鏈的規(guī)則

以Host主機(jī)網(wǎng)絡(luò)空間作為 路由器 轉(zhuǎn)發(fā)ping包為例

demo01---->host主機(jī)網(wǎng)路空間---->demo02(轉(zhuǎn)發(fā)數(shù)據(jù)):

1、起始報(bào)文從demo01發(fā)出抵達(dá) 100.100.198.252 的網(wǎng)卡enp2s0

2、內(nèi)核接受到網(wǎng)卡的報(bào)文,先經(jīng)過PREROUTING鏈檢查(同上)

3、判斷報(bào)文目的地址是否是本機(jī)(目標(biāo)地址不是本機(jī)),經(jīng)過路由表判斷--用目的地址匹配到路由(如果匹配不到路由,不知道下一條去哪里,那么直接丟棄),標(biāo)記數(shù)據(jù)的下一跳-- 10.1.2.2

4、經(jīng)過FORWARD鏈檢查,(filter類型的規(guī)則policy默認(rèn)為DROP--阻攔),只有當(dāng)匹配到可以通行的規(guī)則,報(bào)文才能流轉(zhuǎn)到下游

  1. iptables -t mangle --line-numbers -nvL FORWARD  #mangle類型的規(guī)則默認(rèn)policy規(guī)則ACCEPT 
  2.  
  3. iptables -t filter --line-numbers -nvL FORWARD  #filter類型的規(guī)則policy默認(rèn)為DROP 
  4.  
  5. # 可以看到該類規(guī)則已經(jīng)DROP了很多個(gè)packets,如果一直測(cè)試ping,能看到被DROP的包會(huì)一直增長(zhǎng) 

FORWARD鏈的filter類型規(guī)則

5、經(jīng)過POSTROUTING鏈檢查(同上),最終將報(bào)文發(fā)送給 100.100.198.252 的網(wǎng)卡enp2s0

6、網(wǎng)卡enp2s0將報(bào)文發(fā)送至路由標(biāo)記的vethhost02,vethhost02會(huì)默認(rèn)將報(bào)文流轉(zhuǎn)到自己的網(wǎng)卡對(duì)對(duì)端--vethdemo02,抵達(dá)demo02的內(nèi)核

7、demo02內(nèi)核按照上述中的 接收數(shù)據(jù) 流程處理報(bào)文,并將ICMP的應(yīng)答報(bào)文按照 發(fā)送數(shù)據(jù) 的流程,以demo01的IP地址 10.0.1.2 為目的地址反向發(fā)送數(shù)據(jù)

8、Host主機(jī)網(wǎng)路空間同樣按上述 轉(zhuǎn)發(fā)數(shù)據(jù) 的過程再轉(zhuǎn)發(fā)一次,只是這次轉(zhuǎn)發(fā)的是demo02發(fā)出的應(yīng)答報(bào)文(Host主機(jī)網(wǎng)路空間,完成了兩個(gè)方向的報(bào)文轉(zhuǎn)發(fā),去包方向和回包方向)

9、最終demo01的協(xié)議棧接收到應(yīng)答報(bào)文,完成一次通過 100.100.198.252 轉(zhuǎn)發(fā)的ICMP通訊

內(nèi)核處理的報(bào)文的三個(gè)鏈路

  1. 發(fā)送數(shù)據(jù),內(nèi)核處理協(xié)議棧的發(fā)送數(shù)據(jù)的鏈路:路由判斷(匹配下一跳)-->OUTPUT-->POSTROUTING-->網(wǎng)卡-->下一跳
  2. 接受數(shù)據(jù),內(nèi)核處理網(wǎng)卡接受的外部數(shù)據(jù)鏈路:PREROUTING-->路由判斷(是本機(jī))-->INPUT-->協(xié)議棧
  3. 轉(zhuǎn)發(fā)數(shù)據(jù),內(nèi)核處理網(wǎng)卡接受的外部數(shù)據(jù)鏈路:PREROUTING-->路由判斷(不是本機(jī),匹配下一跳)-->FORWARD-->POSTROUTING-->網(wǎng)卡-->下一跳

通過上述的信息我們可以梳理出,目前demo01/02無法實(shí)現(xiàn)互ping的原因,是被作為 路由器 角色的host主機(jī)網(wǎng)絡(luò)空間內(nèi)核將相關(guān)的報(bào)文攔截并丟棄了。

攔截的 關(guān)卡 位于FORWARD鏈,F(xiàn)ORWARD鏈中的 過濾 規(guī)則默認(rèn)是不允許通過。

  • 需要為來自demo01/02雙方都 頒發(fā)&quot;通行證&quot;
  • 互通是雙向的,需要為demo01/02分別配置  和  兩條規(guī)則,一共四條規(guī)則
  1. iptables -t filter -A FORWARD -o vethhost01 -j ACCEPT #添加命令 `iptables -t <表> -A <鏈> -o <網(wǎng)卡> -j ACCEPT`  命令解讀:在FORWARD鏈添加一條類型為filter的規(guī)則,規(guī)則內(nèi)容是--目的地址在路由表上的下一跳是vethhost01的報(bào)文,都放行 
  2.  
  3. iptables -t filter -A FORWARD -i vethhost01 -j ACCEPT #添加命令 `iptables -t <表> -A <鏈> -i <網(wǎng)卡> -j ACCEPT`  命令解讀:在FORWARD鏈添加一條類型為filter的規(guī)則,規(guī)則內(nèi)容是--只要是從vethhost01傳來的報(bào)文,都放行 
  4.  
  5. iptables -t filter -A FORWARD -i vethhost02 -j ACCEPT #同上 
  6.  
  7. iptables -t filter -A FORWARD -o vethhost02 -j ACCEPT 

FORWARD鏈的filter類型規(guī)則已添加

驗(yàn)證:

demo01/02雙向已互通

跨主機(jī)通信(實(shí)現(xiàn)demo01/02與其他主機(jī)互通)

準(zhǔn)備一臺(tái)Linux主機(jī)(node02--100.100.198.253)。

  • node02并不知道要訪問10.0.1.2/10.0.2.2在node03上,需要在node02上添加相關(guān)路由,將目的地址的下一跳指向node03(100.100.198.250)
  • node02和node03本就互通(且在同一網(wǎng)段),所以node03上不用添加任何路由和iptables相關(guān)配置

node02的路由

驗(yàn)證:

node02-->demo01/02

demo01/02-->node02

在node02上抓包,顯示的源地址就是10.0.1.2

目前的網(wǎng)絡(luò)模型

至此,可以跨主機(jī)通信的Network Namespace就已經(jīng)創(chuàng)建并配置完成了。

Node02上的N3和N4的創(chuàng)建以及配置過程就不做演示了,操作步驟參考以上即可。

結(jié)語

Network Namespace通訊模型不止一種,每種模型也有各自的優(yōu)缺點(diǎn)。此次實(shí)現(xiàn)的Network Namespace間的通信模型,是基于路由模式實(shí)現(xiàn)的( 純?nèi)龑?/code> 的實(shí)現(xiàn))。

該種通訊模型的相關(guān)網(wǎng)絡(luò)方案性能更接近于主機(jī)網(wǎng)絡(luò),Kubernetes網(wǎng)絡(luò)組件Calico的BGP模式的實(shí)現(xiàn)就是基于此種模型,性能較IPIP模式(Overlay類型的網(wǎng)絡(luò))有很大提升。

此類的方案明顯的特征是終端收到的包并未被nat處理過,比如從node02的抓包顯示,報(bào)文的源地址就是發(fā)起端demo01的IP: 10.0.1.2 。在一些需求場(chǎng)景下,請(qǐng)求的接收端是必須要獲取到源IP的。這種場(chǎng)景下,Overlay類型的網(wǎng)絡(luò)方案就無法滿足。

希望這篇文章能幫助到大家了解Kubernetes網(wǎng)絡(luò)底層的一些技術(shù)實(shí)現(xiàn)。

 

責(zé)任編輯:張燕妮 來源: 業(yè)效之路
相關(guān)推薦

2020-07-06 07:52:10

Kubernetes網(wǎng)絡(luò)通信

2015-09-09 10:34:58

底層網(wǎng)絡(luò)技術(shù)網(wǎng)絡(luò)技術(shù)

2013-12-26 10:17:57

overlayVXLAN詳解

2015-01-04 15:35:07

通信PONIP網(wǎng)絡(luò)

2013-01-21 10:13:27

信息通信網(wǎng)絡(luò)技術(shù)通信網(wǎng)絡(luò)

2011-12-23 10:19:11

網(wǎng)絡(luò)技術(shù)開放

2009-07-02 14:13:41

JSP網(wǎng)絡(luò)

2021-08-11 14:31:52

鴻蒙HarmonyOS應(yīng)用

2024-10-09 17:19:04

GoGolangKubernetes

2019-11-20 09:15:53

KubernetesPod

2022-04-09 15:26:46

Kubernetes刪除操作源碼解析

2017-03-28 10:20:24

Docker通信分析

2021-11-22 08:00:00

Kubernetes容器集群

2009-12-22 09:11:31

WCF雙向通信

2011-08-31 13:22:37

PhoneGapAndroidjavascript

2022-01-24 12:05:51

IPv6冬奧會(huì)網(wǎng)絡(luò)

2010-08-30 09:13:02

無線網(wǎng)絡(luò)

2023-08-01 08:43:29

Python多線程

2020-12-09 14:43:24

LinuxLi-Fi網(wǎng)絡(luò)技術(shù)

2014-09-16 17:00:02

UDP
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)