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