k83 calico 網絡策略

常見的CNI網絡插件包含如下幾種:api

Flannel:爲Kubernetes提供疊加網絡的網絡插件,基於TUN/TAP隧道技術,使用UDP封裝IP報文進行建立疊 加網絡,藉助etcd維護網絡的分配狀況,缺點:沒法支持網絡策略訪問控制。
Calico:基於BGP的三層網絡插件,也支持網絡策略進而實現網絡的訪問控制;它在每臺主機上都運行一個虛擬路由,利用Linux內核轉發網絡數據包,並藉助iptables實現防火牆功能。實際上Calico最後的實現就是將每臺主機都變成了一臺路由器,將各個網絡進行鏈接起來,實現跨主機通訊的功能。
Canal:由Flannel和Calico聯合發佈的一個統一網絡插件,提供CNI網絡插件,並支持網絡策略實現。
其餘的還包括Weave Net、Contiv、OpenContrail、Romana、NSX-T、kube-router等等。而Flannel和Calico是目前最流行的選擇方案。網絡

1.所有拒絕

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: deny-all-egress
  namespace: cs1
  #應用於cs1 名稱空間,不寫名稱空間對default應用
spec:
  podSelector: {}
  ingress:
  egress:
  #定義出站規則,這裏沒有寫任何策略,表示所有拒絕。
  policyTypes:
  - Egress
  - Ingress
  #這裏面有Egress就表示要定義出站規則,不寫Egress就是默認通行,Ingress是入站原理同樣
  #建議你們把兩個都寫上去 而後使用"podSelector:" 來控制是否能通行

2.所有容許

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-all-egress
  namespace: cs1
spec:
  podSelector: {}
  ingress:
  - {}
  #這樣表示"ingress"方向的所有容許通行
  egress:
  - {}
  #這樣表示"egress"方向的所有容許通行
  policyTypes:
  - Egress
  - Ingress

這個網絡策略只對名稱空間起效,宿主機依然能夠訪問ide

3.做用範圍

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name:  deny-all
  namespace: default
  #只做用於 default 名稱空間
spec:
  podSelector:
  #匹配pod 範圍 若是匹配該名稱空間的全部POD 輸入"{}" 便可
    matchLabels:
      access: "true"
      #匹配POD中有 access=true的標籤
  policyTypes:
  - Ingress
  - Egress
  ingress:
  egress:

4.限制IP策略

k83 calico 網絡策略
#上圖每一個cs容器的IPspa

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name:  deny-all
spec:
  podSelector: {}
  policyTypes:
  - Egress
  - Ingress
  ingress:
  egress:
    - to:
    #注意:egress用to,ingress用from
      - ipBlock:
          cidr: 192.168.0.0/16
          #放行192.168.0.0/16網絡
          except:
          - 192.168.94.134/32
          #但不包括這個ip

k83 calico 網絡策略
exec進入pod 能看見ping192.168.94.134 這個IP是不通的插件

5.基於名稱空間label限制

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: namespace-allow
  namespace: default
spec:
  policyTypes: ["Ingress"]
  podSelector: {}
  ingress:
   - from:
     - namespaceSelector:
        matchLabels:
          name: cs1
                    #表示只有打了"name=cs1"的名稱空間才容許進

6.基於名稱空間label限制知足多個條件

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: namespace-allow
  namespace: default
spec:
  policyTypes: ["Ingress","Egress"]
  podSelector: {}
  ingress:
  - from:
    - namespaceSelector:
        matchExpressions:
        - key: name
          operator: In
          values: ["cs1","cs2"]
          #中括號裏面的能夠 與default名稱空間 ingress通訊
                    #表示,名稱空間有標籤name=cs1,name=cs2 的 能夠與default名稱空間通訊

7基於pod labelcode

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: namespace-allow
  namespace: default
spec:
  policyTypes: ["Ingress"]
  podSelector: {}
  ingress:
  - from:
    - podSelector:
        matchLabels:
          access: "true"
   #容許pod 便籤有 access=true的通行

#基於pod label 實驗沒成功不知道啥問題router

相關文章
相關標籤/搜索