摘要:不同的網絡實現原理等并不能統一地支持。描述信息選擇器,選定的所有的出入站流量要遵循本的約束策略類型。所有包含的中的可以與上述的端口建立連接所有下的包含的可以與上述的端口建立連接允許上述訪問網段為的目的的端口。但可以做到范圍的整體控制。
簡介
network policy顧名思義就是對pod進行網絡策略控制。 k8s本身并不支持,因為k8s有許多種網絡的實現方式,企業內部可以使用簡單的flannel、weave、kube-router等,適合公有云的方案則有calico等。不同的網絡實現原理(vethpair、bridge、macvlan等)并不能統一地支持network policy。
network policy 策略模型使用network policy資源可以配置pod的網絡,networkPolicy是namespace scoped的,他只能影響某個namespace下的pod的網絡出入站規則。
metadata 描述信息
podSelector pod選擇器,選定的pod所有的出入站流量要遵循本networkpolicy的約束
policyTypes 策略類型。包括了Ingress和Egress,默認情況下一個policyTypes的值一定會包含Ingress,當有egress規則時,policyTypes的值中會包含Egress
ingress 入站
egress 出站
策略模型可以參考官方文檔, 這里舉個例子:
apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: test-network-policy namespace: default spec: podSelector: matchLabels: role: db policyTypes: - Ingress - Egress ingress: - from: - ipBlock: cidr: 172.17.0.0/16 except: - 172.17.1.0/24 - namespaceSelector: matchLabels: project: myproject - podSelector: matchLabels: role: frontend ports: - protocol: TCP port: 6379 egress: - to: - ipBlock: cidr: 10.0.0.0/24 ports: - protocol: TCP port: 5978
該例子的效果如下:
1、default namespace下label包含role=db的pod,都會被隔絕,他們只能建立“滿足networkPolicy的ingress和egress描述的連接”。即2-5點:
2、所有屬于172.17.0.0/16網段的IP,除了172.17.1.0/24中的ip,其他的都可以與上述pod的6379端口建立tcp連接。
3、所有包含label:project=myproject的namespace中的pod可以與上述pod的6379端口建立tcp連接;
4、所有default namespace下的label包含role=frontend的pod可以與上述pod的6379端口建立tcp連接;
5、允許上述pod訪問網段為10.0.0.0/24的目的IP的5978端口。
再例,如果我們想要只允許default這個namespace下label包含access=true的pod訪問nginx pod(label:run=nginx),可以對nginx pod設置入站規則:
kind: NetworkPolicy apiVersion: networking.k8s.io/v1 metadata: name: access-nginx namespace: default spec: podSelector: matchLabels: run: nginx ingress: - from: - podSelector: matchLabels: access: "true"
另外一些默認的規則:
1.同namespace的pod,入站規則為全部禁止
apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: default-deny spec: podSelector: {} policyTypes: - Ingress
2.同namespace的pod,入站規則為全部開放:
apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: allow-all spec: podSelector: {} ingress: - {}
3.同namespace的pod,出站規則為全部禁止
apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: default-deny spec: podSelector: {} policyTypes: - Egress
4.同namespace的pod,出站規則為全部開放
apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: allow-all spec: podSelector: {} egress: - {} policyTypes: - Egressnetwork policy的實現
network policy的實現仰賴CNI插件的支持,目前已經支持的cni插件包括:
Calico 。calico本身通過BGP路由實現容器網絡,network policy大致也是通過它實現的。
Cilium
Kube-router。 這個工具比較吸引人,因為他使用iptables實現networkpolicy,同時它也能成為kube-proxy組件的替代品。
Romana
Weave Net。也是通過iptables實現出入站策略。(看了社區的例子,里面針對namespace級別的控制好像要用正則表達式進行匹配)
這些容器網絡解決方案,在支持networkpolicy時,均需要在node上啟動agent(可以用k8s的daemonset)
其實network policy要做的事情,安全組一樣可以做。但network policy可以做到namespace范圍的整體控制。
思考一個networkpolicy agent要做的事情,應該包含以下幾點:
1、對networkpolicy進行全namespace范圍的list & watch;
2、對規則原語的解析和定制。(如何將namespace、label等概念具象到iptables中?我的想法比較笨拙:使用正則表達式表述pod name的規則,同時list-watch pod并維護pod name 到pod ip的關系)
3、維護這些規則在本地的實現和記錄(如iptables表)
安全組的規則記錄在上層網關,而不是每一個節點上在安全組規則上,可能需要list watch networkPolicy、namespace、pod等資源,因此實現namespace級別的策略可能會影響其性能。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/32618.html
摘要:新功能版本增加了安全性有狀態的應用程序和可擴展性等功能。網絡已從升級到新的組。 ?根據 Kubernetes Google Group 產品經理 Aperna Sinha 和 Kubernetes Mirantis 項目經理 Ihor Dvoretskyi 的說法,Kubernetes 1.7 中的 API aggregation 功能使用戶可以在運行時添加自定義的 API 服務器,與...
摘要:生態周報內容主要包含我所接觸到的生態相關的每周值得推薦的一些信息。歡迎訂閱知乎專欄生態。正式發布是畢業項目,可用于監控系統及服務狀態。并且可以通過配置規則來觸發報警等。 「K8S 生態周報」內容主要包含我所接觸到的 K8S 生態相關的每周值得推薦的一些信息。歡迎訂閱知乎專欄「k8s生態」。 Prometheus v2.9.0 正式發布 Prometheus 是 CNCF 畢業項目,可用...
摘要:執行該初始化任務的容器被成為初始化容器。目前,有等狀態。網絡身份的維護主要通過穩定的和來維護,他們通過的配置文件指定。若其操作導致最小可用數低于應用要求,則操作會被拒絕。 本文討論 K8S 1.3 的一些新功能,以及正在進行中的功能。讀者應該對 kubernetes 的基本結構已經有所了解。 支持更多類型的應用 1、Init container Init container 是1.3 ...
摘要:,托管于騰訊云容器平臺容器編排工具。適配我們目前的服務部署在騰訊云托管,節點使用核的網絡增強型機器,所有的后端服務都以部署,集群外部署高可用支持集群內服務發現,數據庫以為主,消息隊列采用。 距離2017年的見聞技術架構調整接近2年,隨著業務線的發展,見聞技術部的項目數量、項目架構類型、基礎設施規模、服務變更頻率都在不斷地增長,帶給SRE的挑戰是如何能更快地助力于開發人員更快更穩定地部署...
摘要:本文將主要分析原生的網絡策略。筆者認為這個問題主要是因為使用者不了解網絡策略的省缺行為。可選字段,字符串,策略規則類型,表示該網絡策略中包含哪些類型的策略,可選為或。互相間為或的關系,滿足其中一條則放行。標準,除了指定的放行外其他都禁止。 k8s中的網絡策略主要分為原生 NetworkPolicy 和第三方網絡插件提供的網絡策略。本文將主要分析原生Networkpolicy的網絡策略。...
閱讀 1808·2021-11-23 09:51
閱讀 1268·2021-11-18 10:02
閱讀 962·2021-10-25 09:44
閱讀 2098·2019-08-26 18:36
閱讀 1619·2019-08-26 12:17
閱讀 1145·2019-08-26 11:59
閱讀 2746·2019-08-23 15:56
閱讀 3350·2019-08-23 15:05