您好,登錄后才能下訂單哦!
常見的CNI網絡插件包含以下幾種:
Flannel:為Kubernetes提供疊加網絡的網絡插件,基于TUN/TAP隧道技術,使用UDP封裝IP報文進行創建疊 加網絡,借助etcd維護網絡的分配情況,缺點:無法支持網絡策略訪問控制。
Calico:基于BGP的三層網絡插件,也支持網絡策略進而實現網絡的訪問控制;它在每臺主機上都運行一個虛擬路由,利用Linux內核轉發網絡數據包,并借助iptables實現防火墻功能。實際上Calico最后的實現就是將每臺主機都變成了一臺路由器,將各個網絡進行連接起來,實現跨主機通信的功能。
Canal:由Flannel和Calico聯合發布的一個統一網絡插件,提供CNI網絡插件,并支持網絡策略實現。
其他的還包括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
#應用于cs1 名稱空間,不寫名稱空間對default應用
spec:
podSelector: {}
ingress:
egress:
#定義出站規則,這里沒有寫任何策略,表示全部拒絕。
policyTypes:
- Egress
- Ingress
#這里面有Egress就表示要定義出站規則,不寫Egress就是默認通行,Ingress是入站原理一樣
#建議大家把兩個都寫上去 然后使用"podSelector:" 來控制是否能通行
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-all-egress
namespace: cs1
spec:
podSelector: {}
ingress:
- {}
#這樣表示"ingress"方向的全部允許通行
egress:
- {}
#這樣表示"egress"方向的全部允許通行
policyTypes:
- Egress
- Ingress
這個網絡策略只對名稱空間起效,宿主機依然可以訪問
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: deny-all
namespace: default
#只作用于 default 名稱空間
spec:
podSelector:
#匹配pod 范圍 如果匹配該名稱空間的所有POD 輸入"{}" 即可
matchLabels:
access: "true"
#匹配POD中有 access=true的標簽
policyTypes:
- Ingress
- Egress
ingress:
egress:
#上圖每個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網絡
except:
- 192.168.94.134/32
#但不包括這個ip
exec進入pod 能看見ping192.168.94.134 這個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"的名稱空間才允許進
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"]
#中括號里面的可以 與default名稱空間 ingress通信
#表示,名稱空間有標簽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 實驗沒成功不知道啥問題
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。