Calico 默認的 policy 規則是:容器只能與同一個 calico 網絡中的容器通信。本節討論如何定制 policy。
calico 能夠讓用戶定義靈活的 policy 規則,精細化控制進出容器的流量,下面我們就來實踐一個場景:
-
創建一個新的 calico 網絡
cal_web
並部署一個 httpd 容器web1
。 -
定義 policy 允許
cal_net2
中的容器訪問web1
的 80 端口。
首先創建 cal_web
。
docker network create --driver calico --ipam-driver calico-ipam cal_web
在 host1 中運行容器 web1,連接到 cal_web:
docker container run --net cal_web --name web1 -d httpd
web1 的 IP 為 192.168.119.7
。
目前 bbox3 還無法訪問 web1 的 80 端口。
創建 policy 文件 web.yml,內容為:
① profile 與 cal_web
網絡同名,cal_web
的所有容器(web1)都會應用此 profile 中的 policy。
② ingress
允許 cal_net2
中的容器(bbox3)訪問。
③ 只開放 80
端口。
應用該 policy。
calicoctl apply -f web.yml
現在 bbox3 已經能夠訪問 web1 的 http 服務了。
不過 ping 還是不行,因為只放開了 80 端口。
上面這個例子比較簡單,不過已經向我們展示了 calico 強大的 policy 功能。通過 policy,可以動態實現非常復雜的容器訪問控制。有關 calico policy 更多的配置,可參看官網文檔 http://docs.projectcalico.org/v2.0/reference/calicoctl/resources/policy
下一節我們討論 Calico 的最后一項內容:IPAM。