kubernetes實踐之五十九:NetworkPolicy
一: 簡介
1.Kubernetes的一個重要特性就是要把不同node節點的pod連線起來,無視物理節點的限制。但是在某些應用環境中,比如公有云,不同租戶的pod不應該互通,這個時候就需要網路隔離。幸好,Kubernetes提供了NetworkPolicy,支援按Namespace級別的網路隔離。Network Policy提供了基於策略的網路控制,用於隔離應用並減少攻擊面。它使用標籤選擇器模擬傳統的分段網路,並透過策略控制它們之間的流量以及來自外部的流量。
2.Kubernetes提供了NetworkPolicy,支援按Namespace和按Pod級別的網路訪問控制。它利用label指定namespaces或pod,底層用iptables實現。不是所有的 Kubernetes 網路方案都支援 Network Policy。比如 Flannel 就不支援,Calico 是支援的。
3.
a.透過kubectl client建立network policy資源;
b.calico的policy-controller監聽network policy資源,獲取到後寫入calico的etcd資料庫;
c.node上calico-felix從etcd資料庫中獲取policy資源,呼叫iptables做相應配置。
二: NetworkPolicy 資源配置
1.podSelector:每個 NetworkPolicy 包含一個 podSelector,它可以選擇一組應用了網路策略的 Pod。由於 NetworkPolicy 當前只支援定義 ingress 規則,這個 podSelector 實際上為該策略定義了一組 “目標Pod”。示例中的策略選擇了標籤為 “role=db” 的 Pod。一個空的 podSelector 選擇了該 Namespace 中的所有 Pod。
2.ingress:每個NetworkPolicy 包含了一個白名單 ingress 規則列表。每個規則只允許能夠匹配上 from 和 ports配置段的流量。示例策略包含了單個規則,它從這兩個源中匹配在單個埠上的流量,第一個是透過namespaceSelector 指定的,第二個是透過 podSelector 指定的。
3. 在 “default” Namespace中 隔離了標籤 “role=db” 的 Pod(如果他們還沒有被隔離); 在 “default” Namespace中,允許任何具有 “role=frontend” 的 Pod,連線到標籤為 “role=db” 的 Pod 的 TCP 埠 6379;允許在 Namespace 中任何具有標籤 “project=myproject” 的 Pod,連線到 “default” Namespace 中標籤為 “role=db” 的 Pod 的 TCP 埠 6379。
三:預設策略
1.透過建立一個可以選擇所有 Pod 但不允許任何流量的 NetworkPolicy,你可以為一個 Namespace 建立一個 “預設的” 隔離策略。
2.在 Namespace 中,如果你想允許所有的流量進入到所有的 Pod(即使已經新增了某些策略,使一些 Pod 被處理為 “隔離的”),你可以透過建立一個策略來顯式地指定允許所有流量。
1.Kubernetes的一個重要特性就是要把不同node節點的pod連線起來,無視物理節點的限制。但是在某些應用環境中,比如公有云,不同租戶的pod不應該互通,這個時候就需要網路隔離。幸好,Kubernetes提供了NetworkPolicy,支援按Namespace級別的網路隔離。Network Policy提供了基於策略的網路控制,用於隔離應用並減少攻擊面。它使用標籤選擇器模擬傳統的分段網路,並透過策略控制它們之間的流量以及來自外部的流量。
2.Kubernetes提供了NetworkPolicy,支援按Namespace和按Pod級別的網路訪問控制。它利用label指定namespaces或pod,底層用iptables實現。不是所有的 Kubernetes 網路方案都支援 Network Policy。比如 Flannel 就不支援,Calico 是支援的。
3.
a.透過kubectl client建立network policy資源;
b.calico的policy-controller監聽network policy資源,獲取到後寫入calico的etcd資料庫;
c.node上calico-felix從etcd資料庫中獲取policy資源,呼叫iptables做相應配置。
二: NetworkPolicy 資源配置
點選(此處)摺疊或開啟
-
apiVersion: networking.k8s.io/v1
-
kind: NetworkPolicy
-
metadata:
-
name: test-network-policy
-
namespace: default
-
spec:
-
podSelector:
-
matchLabels:
-
role: db
-
ingress:
-
- from:
-
- namespaceSelector:
-
matchLabels:
-
project: myproject
-
- podSelector:
-
matchLabels:
-
role: frontend
-
ports:
-
- protocol: TCP
- port: 6379
2.ingress:每個NetworkPolicy 包含了一個白名單 ingress 規則列表。每個規則只允許能夠匹配上 from 和 ports配置段的流量。示例策略包含了單個規則,它從這兩個源中匹配在單個埠上的流量,第一個是透過namespaceSelector 指定的,第二個是透過 podSelector 指定的。
3. 在 “default” Namespace中 隔離了標籤 “role=db” 的 Pod(如果他們還沒有被隔離); 在 “default” Namespace中,允許任何具有 “role=frontend” 的 Pod,連線到標籤為 “role=db” 的 Pod 的 TCP 埠 6379;允許在 Namespace 中任何具有標籤 “project=myproject” 的 Pod,連線到 “default” Namespace 中標籤為 “role=db” 的 Pod 的 TCP 埠 6379。
三:預設策略
1.透過建立一個可以選擇所有 Pod 但不允許任何流量的 NetworkPolicy,你可以為一個 Namespace 建立一個 “預設的” 隔離策略。
點選(此處)摺疊或開啟
-
apiVersion: networking.k8s.io/v1
-
kind: NetworkPolicy
-
metadata:
-
name: default-deny
-
spec:
- podSelector:
點選(此處)摺疊或開啟
-
apiVersion: networking.k8s.io/v1
-
kind: NetworkPolicy
-
metadata:
-
name: allow-all
-
spec:
-
podSelector:
-
ingress:
- - {}
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28624388/viewspace-2156384/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- kubernetes實踐之十一:EFK
- kubernetes實踐之五十二:Helm
- kubernetes實踐之五十七:PodPreset
- kubernetes實踐之五十八:CronJob
- kubernetes實踐之十七:架構架構
- kubernetes實踐之十九:API概述API
- kubernetes實踐之六十:Cabin-Manage Kubernetes
- kubernetes實踐之六十四:CoreDNSDNS
- kubernetes實踐之九:kube-dnsDNS
- kubernetes實踐之五:網路模型模型
- kubernetes實踐之五十六:雲原生
- kubernetes實踐之四十二:StatefulSet
- kubernetes生產實踐之redis-clusterRedis
- GitOps實踐之kubernetes安裝argocdGitGo
- kubernetes實踐之六十二:Secret 使用
- kubernetes實踐之六十三:使用技巧
- kubernetes實踐之六十五:Service Mesh
- kubernetes實踐之八:TLS bootstrappingTLSbootAPP
- kubernetes實踐之十二:部署Traefik Ingress
- kubernetes實踐之十四:Service Account與Secret
- kubernetes實踐之七十三:Istio之配置請求路由路由
- kubernetes實踐之七十二:Istio之策略與遙測
- kubernetes實踐之五十五:kubectl之配置kubeconfig
- kubernetes實踐之七十:Istio之流量管理(上)
- kubernetes實踐之六十七:Istio介紹
- kubernetes實踐之四十九:Scheduler原理分析
- kubernetes實踐之六:CFSSL構建本地CA
- kubernetes實踐之五:Node節點安裝
- kubernetes實踐之五十四:垃圾回收機制
- kubernetes實踐之十六:RBAC 角色訪問控制
- kubernetes實踐之四十三: Service詳解
- kubernetes實踐之十:Kubernetes-dashboard+Heapster+InfluxDB+GrafanaUXGrafana
- kubernetes實踐之七十一:Istio之流量管理(下)
- kubernetes實踐之六十八:部署 coredns 外掛DNS
- kubernetes實踐之六十一:kubectl port-forwardForward
- kubernetes實踐之四十七:ResourceQuota ControllerController
- kubernetes實踐之五十:kubelet執行機制分析
- kubernetes實踐之五十三:Service中的故障排查