常見(jiàn)的CNI網(wǎng)絡(luò)插件包含以下幾種:
公司主營(yíng)業(yè)務(wù):成都做網(wǎng)站、成都網(wǎng)站制作、移動(dòng)網(wǎng)站開(kāi)發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競(jìng)爭(zhēng)能力。創(chuàng)新互聯(lián)建站是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開(kāi)放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來(lái)的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來(lái)驚喜。創(chuàng)新互聯(lián)建站推出徐水免費(fèi)做網(wǎng)站回饋大家。
Flannel:為Kubernetes提供疊加網(wǎng)絡(luò)的網(wǎng)絡(luò)插件,基于TUN/TAP隧道技術(shù),使用UDP封裝IP報(bào)文進(jìn)行創(chuàng)建疊 加網(wǎng)絡(luò),借助etcd維護(hù)網(wǎng)絡(luò)的分配情況,缺點(diǎn):無(wú)法支持網(wǎng)絡(luò)策略訪問(wèn)控制。
Calico:基于BGP的三層網(wǎng)絡(luò)插件,也支持網(wǎng)絡(luò)策略進(jìn)而實(shí)現(xiàn)網(wǎng)絡(luò)的訪問(wèn)控制;它在每臺(tái)主機(jī)上都運(yùn)行一個(gè)虛擬路由,利用Linux內(nèi)核轉(zhuǎn)發(fā)網(wǎng)絡(luò)數(shù)據(jù)包,并借助iptables實(shí)現(xiàn)防火墻功能。實(shí)際上Calico最后的實(shí)現(xiàn)就是將每臺(tái)主機(jī)都變成了一臺(tái)路由器,將各個(gè)網(wǎng)絡(luò)進(jìn)行連接起來(lái),實(shí)現(xiàn)跨主機(jī)通信的功能。
Canal:由Flannel和Calico聯(lián)合發(fā)布的一個(gè)統(tǒng)一網(wǎng)絡(luò)插件,提供CNI網(wǎng)絡(luò)插件,并支持網(wǎng)絡(luò)策略實(shí)現(xiàn)。
其他的還包括Weave Net、Contiv、OpenContrail、Romana、NSX-T、kube-router等等。而Flannel和Calico是目前最流行的選擇方案。
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: deny-all-egress
namespace: cs1
#應(yīng)用于cs1 名稱空間,不寫(xiě)名稱空間對(duì)default應(yīng)用
spec:
podSelector: {}
ingress:
egress:
#定義出站規(guī)則,這里沒(méi)有寫(xiě)任何策略,表示全部拒絕。
policyTypes:
- Egress
- Ingress
#這里面有Egress就表示要定義出站規(guī)則,不寫(xiě)Egress就是默認(rèn)通行,Ingress是入站原理一樣
#建議大家把兩個(gè)都寫(xiě)上去 然后使用"podSelector:" 來(lái)控制是否能通行
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-all-egress
namespace: cs1
spec:
podSelector: {}
ingress:
- {}
#這樣表示"ingress"方向的全部允許通行
egress:
- {}
#這樣表示"egress"方向的全部允許通行
policyTypes:
- Egress
- Ingress
這個(gè)網(wǎng)絡(luò)策略只對(duì)名稱空間起效,宿主機(jī)依然可以訪問(wèn)
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: deny-all
namespace: default
#只作用于 default 名稱空間
spec:
podSelector:
#匹配pod 范圍 如果匹配該名稱空間的所有POD 輸入"{}" 即可
matchLabels:
access: "true"
#匹配POD中有 access=true的標(biāo)簽
policyTypes:
- Ingress
- Egress
ingress:
egress:
#上圖每個(gè)cs容器的IP
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: deny-all
spec:
podSelector: {}
policyTypes:
- Egress
- Ingress
ingress:
egress:
- to:
#注意:egress用to,ingress用from
- ipBlock:
cidr: 192.168.0.0/16
#放行192.168.0.0/16網(wǎng)絡(luò)
except:
- 192.168.94.134/32
#但不包括這個(gè)ip
exec進(jìn)入pod 能看見(jiàn)ping192.168.94.134 這個(gè)IP是不通的
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: namespace-allow
namespace: default
spec:
policyTypes: ["Ingress"]
podSelector: {}
ingress:
- from:
- namespaceSelector:
matchLabels:
name: cs1
#表示只有打了"name=cs1"的名稱空間才允許進(jìn)
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: namespace-allow
namespace: default
spec:
policyTypes: ["Ingress","Egress"]
podSelector: {}
ingress:
- from:
- namespaceSelector:
matchExpressions:
- key: name
operator: In
values: ["cs1","cs2"]
#中括號(hào)里面的可以 與default名稱空間 ingress通信
#表示,名稱空間有標(biāo)簽name=cs1,name=cs2 的 可以與default名稱空間通信
7基于pod label
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: namespace-allow
namespace: default
spec:
policyTypes: ["Ingress"]
podSelector: {}
ingress:
- from:
- podSelector:
matchLabels:
access: "true"
#允許pod 便簽有 access=true的通行
#基于pod label 實(shí)驗(yàn)沒(méi)成功不知道啥問(wèn)題