爲了演示 Network Policy,咱們先部署一個 httpd 應用,其配置文件 httpd.yaml
爲:html
httpd 有三個副本,經過 NodePort 類型的 Service 對外提供服務。部署應用:網絡
當前沒有定義任何 Network Policy,驗證應用能夠被訪問:app
啓動一個 busybox Pod,能夠訪問 Service,也能夠 Ping 到副本 Pod。
ide
集羣節點能夠訪問 Service, 也能夠 Ping 到副本 Pod。
spa
集羣外(192.168.56.1)能夠訪問 Service。
3d
如今建立以下 Network Policy: code
① 定義將此 Network Policy 中的訪問規則應用於 label 爲 run: httpd
的 Pod,即 httpd 應用的三個副本 Pod。 orm
② ingress
中定義只有 label 爲 access: "true"
的 Pod 才能訪問應用。 htm
③ 只能訪問 80
端口。 blog
經過 kubectl apply
建立 Network Policy。
驗證 Network Policy 的有效性:
busybox Pod 已經不能訪問 Service。
若是 Pod 添加了 label access: "true"
就能訪問到應用,但 Ping 已經被禁止。
集羣節點已經不能訪問 Service, 也 Ping 不到副本 Pod。
集羣外(192.168.56.1)已經不能訪問 Service。
若是但願讓集羣節點和集羣外(192.168.56.1)也可以訪問到應用,能夠對 Network Policy 作以下修改:
應用新的 Network Policy:
如今,集羣節點和集羣外(192.168.56.1)已經可以訪問了:
除了經過 ingress
限制進入的流量,也能夠用 egress
限制外出的流量。你們能夠參考官網相關文檔和示例,這裏就不贅述了。
Kubernetes 採用的是扁平化的網絡模型,每一個 Pod 都有本身的 IP,而且能夠直接通訊。
CNI 規範使得 Kubernetes 能夠靈活選擇多種 Plugin 實現集羣網絡。
Network Policy 則賦予了 Kubernetes 強大的網絡訪問控制機制。
1.《天天5分鐘玩轉Kubernetes》
https://item.jd.com/26225745440.html
2.《天天5分鐘玩轉Docker容器技術》
https://item.jd.com/16936307278.html
3.《天天5分鐘玩轉OpenStack》
https://item.jd.com/12086376.html