裸機(jī)區(qū)域
Host-3以及其它主機(jī)為物理服務(wù)器(即裸機(jī)),按照業(yè)務(wù)劃分,host-3上可運(yùn)行一些相對(duì)業(yè)務(wù)對(duì)硬件資源要求較高,且不常變動(dòng)的業(yè)務(wù)組件。
扁平網(wǎng)絡(luò)內(nèi)部(包括兩個(gè)區(qū)域的所有主機(jī))統(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。同理,裸機(jī)域內(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)過(guò)同一個(gè)路由器(或者防火墻)是因?yàn)閟cheduler需要訪(fǎng)問(wèn)cattle,即管理網(wǎng);另一方面,scheduler又需要由CNI網(wǎng)絡(luò)中的health check 做健康檢查和故障恢復(fù)。若考慮安全問(wèn)題,可以在防火墻上配置規(guī)則,對(duì)業(yè)務(wù)網(wǎng)對(duì)管理網(wǎng)的訪(fǎng)問(wèn)做限制。
下圖是宿主機(jī)內(nèi)部CNI網(wǎng)絡(luò)的拓?fù)鋱D以及流量轉(zhuǎn)發(fā)規(guī)則:
3、然后container-1開(kāi)始發(fā)送到169.254.169.250的IP請(qǐng)求,報(bào)文首先被送到docker0的veth-doc上,docker0查詢(xún)路由表,將報(bào)文轉(zhuǎn)到DNS/metadata對(duì)應(yīng)的容器。然后IP報(bào)文原路返回,被docker0路由到veth1上往br0發(fā)送,由于來(lái)自169.254.169.250的IP報(bào)文都是被放行的,因此container-1最終能夠收到IP。
4、由于屬于該network的所有的宿主機(jī)的docker0上都需要綁定IP地址10.43.0.2;因此,該IP地址必須被預(yù)留,即,在catalog中填寫(xiě)CNI的netconf配置時(shí),不能將其放入IP地址池。
5、 同時(shí),為了保障該地址對(duì)應(yīng)的ARP請(qǐng)求報(bào)文不被發(fā)送出主機(jī),從而收到其他主機(jī)上對(duì)應(yīng)接口的ARP響應(yīng)報(bào)文,需要對(duì)所有請(qǐng)求10.1.0.2地址的ARP REQUEST報(bào)文做限制,不允許其通過(guò)br0發(fā)送到宿主機(jī)網(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