裸機區(qū)域
Host-3以及其它主機為物理服務(wù)器(即裸機),按照業(yè)務(wù)劃分,host-3上可運行一些相對業(yè)務(wù)對硬件資源要求較高,且不常變動的業(yè)務(wù)組件。
扁平網(wǎng)絡(luò)內(nèi)部(包括兩個區(qū)域的所有主機)統(tǒng)一使用外部的路由器做網(wǎng)關(guān),比如圖中,Rancher內(nèi)部的容器的子網(wǎng)范圍為10.43.0.0/24, IP地址池范圍為10.43.1.2-10.43.1.254。同理,裸機域內(nèi),子網(wǎng)范圍為10.43.0.0/24, IP地址池范圍為10.43.2.2-10.43.2.254。
之所以要將管理網(wǎng)絡(luò)和業(yè)務(wù)網(wǎng)路經(jīng)過同一個路由器(或者防火墻)是因為scheduler需要訪問cattle,即管理網(wǎng);另一方面,scheduler又需要由CNI網(wǎng)絡(luò)中的health check 做健康檢查和故障恢復(fù)。若考慮安全問題,可以在防火墻上配置規(guī)則,對業(yè)務(wù)網(wǎng)對管理網(wǎng)的訪問做限制。
下圖是宿主機內(nèi)部CNI網(wǎng)絡(luò)的拓撲圖以及流量轉(zhuǎn)發(fā)規(guī)則:
3、然后container-1開始發(fā)送到169.254.169.250的IP請求,報文首先被送到docker0的veth-doc上,docker0查詢路由表,將報文轉(zhuǎn)到DNS/metadata對應(yīng)的容器。然后IP報文原路返回,被docker0路由到veth1上往br0發(fā)送,由于來自169.254.169.250的IP報文都是被放行的,因此container-1最終能夠收到IP。
4、由于屬于該network的所有的宿主機的docker0上都需要綁定IP地址10.43.0.2;因此,該IP地址必須被預(yù)留,即,在catalog中填寫CNI的netconf配置時,不能將其放入IP地址池。
5、 同時,為了保障該地址對應(yīng)的ARP請求報文不被發(fā)送出主機,從而收到其他主機上對應(yīng)接口的ARP響應(yīng)報文,需要對所有請求10.1.0.2地址的ARP REQUEST報文做限制,不允許其通過br0發(fā)送到宿主機網(wǎng)卡。
2、 ?ARP response from 10.43.0.2
ebtables -t broute -A BROUTING -i veth-cni -j DROP
ebtables -t broute -I BROUTING -i veth-cni -p ipv4 –ip-source 169.254.169.250 -j ACCEPT
ebtables -t broute -I BROUTING -i veth-cni -p arp –arp-opcode 2 –arp-ip-src 10.43.0.2 -j ACCEPT
Drop ARP request for 10.43.0.2 on eth1
ebtables -t nat -D POSTROUTING -p arp –arp-opcode 1 –arp-ip-dst 10.43.0.2 ?-o eth1 -j DROP