070、如何定製Calico 網路policy(2019-04-15 週一)

三角形發表於2019-04-15
 
 
Calico預設的policy是:容器只能與同一個calico網路中的容器通訊。
 
Calico能夠讓使用者定義靈活的policy規則,精細化控制進出容器的流量,比如下面的實驗:
 
    1、建立一個新的calico網路 cal_web 並部署一個httpd的容器 web1
 
    2、定義policy 允許cal_net2 中的容器訪問web1的80埠
 
 
#    1、建立calico 網路  cal_web
root@host1:~# docker network create --driver calico --ipam-driver calico-ipam cal_web
88b484859100b4edc3d85aeae8e15d02a05f6c56ea0b2e2a2c820bb460c3fbc4
 
#    2、在cal_web網路中執行httpd容器 web_server
root@host1:~# docker run -d --name web_server --network cal_web httpd
1d63cea6cfe5b4fb8152100f5d1bc172cb514861e5b442b95873e065f3bb307e
 
#    3、在cal_net2網路中執行web客戶端容器 web_client
root@host1:~# docker run -itd --name web_client --network cal_net2 busybox
55bba02387aa53a5a0ace12a962e58bbda2bb1e8b304811bd739972d30dd5687
 
#    4、檢視web_server 容器ip地址
root@host1:~# docker inspect web_server | jq .[0].NetworkSettings.Networks.cal_web.IPAddress
"192.168.119.2"
 
#    5、用 cal_net2 網路中的 web_client 訪問 cal_web 網路中的 web_server
root@host1:~# docker exec web_client wget http://192.168.119.2
Connecting to 192.168.119.2 (192.168.119.2:80)
wget: can't connect to remote host (192.168.119.2): Connection timed out
 
#    6、步驟5中的測試沒有成功,編輯 cal_web 網路 policy 檔案
root@host1:~# cat web.yaml
- apiVersion: v1
  kind: profile
  metadata:
    name: cal_web
  spec:
    ingress:
    - action: allow
      protocol: tcp
      source:
        tag: cal_net2
      destination:
        ports:
        - 80
 
#    7、應用 cal_web 網路 policy 檔案
root@host1:~# calicoctl apply -f web.yaml
Successfully applied 1 'profile' resource(s)
 
#    8、重新測試 web_client 訪問 web_server
root@host1:~# docker exec web_client wget http://192.168.119.2
Connecting to 192.168.119.2 (192.168.119.2:80)
index.html           100% |********************************|    45  0:00:00 ETA
 
#    9、在host1上檢視 cal_web policy
root@host1:~# calicoctl get profile cal_web -o yaml
- apiVersion: v1
  kind: profile
  metadata:
    name: cal_web
  spec:
    ingress:
    - action: allow
      destination:
        ports:
        - 80
      protocol: tcp
      source:
        tag: cal_net2
 
#    10、在host2上檢視 cal_web policy
root@host2:~# calicoctl get profile cal_web -o yaml
- apiVersion: v1
  kind: profile
  metadata:
    name: cal_web
  spec:
    ingress:
    - action: allow
      destination:
        ports:
        - 80
      protocol: tcp
      source:
        tag: cal_net2
 

相關文章