Network Policy 是 Kubernetes 的一種資源。Network Policy 通過 Label 選擇 Pod,并指定其他 Pod 或外界如何與這些 Pod 通信。
預設情況下,所有 Pod 是非隔離的,即任何來源的網絡流量都能夠通路 Pod,沒有任何限制。當為 Pod 定義了 Network Policy,隻有 Policy 允許的流量才能通路 Pod。
不過,不是所有的 Kubernetes 網絡方案都支援 Network Policy。比如 Flannel 就不支援,Calico 是支援的。我們接下來将用 Canal 來示範 Network Policy。Canal 這個開源項目很有意思,它用 Flannel 實作 Kubernetes 叢集網絡,同時又用 Calico 實作 Network Policy。
部署 Canal
部署 Canal 與部署其他 Kubernetes 網絡方案非常類似,都是在執行了
kubeadm init
初始化 Kubernetes 叢集之後通過
kubectl apply
安裝相應的網絡方案。也就是說,沒有太好的辦法直接切換使用不同的網絡方案,基本上隻能重新建立叢集。
要銷毀目前叢集,最簡單的方法是在每個節點上執行
kubeadm reset
。然後就可以按照我們在前面 “部署 Kubernetes Cluster” 一章的 “初始化 Master” 小節中的方法初始化叢集。
kubeadm init --apiserver-advertise-address 192.168.56.105 --pod-network-cidr=10.244.0.0/16
然後按照文檔
https://kubernetes.io/docs/setup/independent/create-cluster-kubeadm/安裝 Canal。文檔列出了各種網絡方案的安裝方法:
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5SNykTNxETOxEjMtgDN2ITM1ETOxIjM1ADOxAjMtUjNzUzN38CX1ADOxAjMvwVN2MTN3czLcd2bsJ2Lc12bj5ycn9Gbi52YugTMwIzcldWYtl2Lc9CX6MHc0RHaiojIsJye.png)
執行如下指令部署 Canal
kubectl apply -f https://raw.githubusercontent.com/projectcalico/canal/master/k8s-install/1.7/rbac.yaml
kubectl apply -f https://raw.githubusercontent.com/projectcalico/canal/master/k8s-install/1.7/canal.yaml
部署成功後,可以檢視到 Canal 相關元件:
Canal 作為 DaemonSet 部署到每個節點,地屬于
kube-system
這個 namespace。
Canal 準備就緒,下節我們将實踐 Network Policy。
書籍:
1.《每天5分鐘玩轉Kubernetes》
https://item.jd.com/26225745440.html2.《每天5分鐘玩轉Docker容器技術》
https://item.jd.com/16936307278.html3.《每天5分鐘玩轉OpenStack》
https://item.jd.com/12086376.html