iT邦幫忙

2024 iThome 鐵人賽

DAY 27
0
Kubernetes

Kubernetes三十天就上手系列 第 27

Day 27- Kubernetes 中的網路安全 Network Policies

  • 分享至 

  • xImage
  •  

Network Policies:Kubernetes中的網路安全

設定和管理網路策略

在 Kubernetes 中,Network Policies 是一種強大的工具,用於控制和管理 Pod 之間的網路流量。它們允許你定義哪些 Pod 可以互相通訊,以及哪些 Pod 可以存取 Cluster 外部或從外部接收流量。通過適當設定網路策略,可以大幅增強 Kubernetes Cluster的安全性,防止未經授權的網路存取和內部攻擊。

Network Policies 的基本概念

  1. 什麼是 Network Policies

    • Network Policies 是 Kubernetes 提供的一種資源,用於定義 Pod 之間的網路流量控制規則。它們作用於第 3 層(IP 層)和第 4 層(傳輸層),允許你指定允許哪些流量進入和離開 Pod。
  2. 網路外掛模組的支援

    • 要啟用和使用 Network Policies,Kubernetes Cluster 必須運行支援該功能的網路外掛模組(如 Calico、Weave、Cilium、Flannel 等)。這些外掛模組實現了網路策略的應用和執行。
  3. 策略作用範圍

    • Network Policies 只影響被選擇的 Pod(通過選擇標籤),並且預設情況下,Pod 之間的流量是允許的,除非有具體的 Network Policies 進行限制。

圖解 Network Policies

讓我們利用2張圖是來說明 Kubernetes 中 Pod 之間的網路通訊行為,在沒有設定 Network Policies 和設定了 Network Policies 的情況下的不同。
在 Kubernetes 中,預設情況下,所有 Pod 之間的通訊是開放的,這意味著任何 Pod 都可以與 Cluster 中的其他 Pod 進行通訊。這對於簡單的應用部署來說是相當方便的,但在需要更高網路隔離和安全性的場景中可能會引發風險。

  +-----------+          +-----------+
  |  frontend |--------->|  backend  |
  |           |<---------|           |
  +-----------+          +-----------+
       |^                     |^
       ||     by default      ||
       ||                     ||
       v|                     v|
      +-------------------------+
      |         database        |
      +-------------------------+

如上圖所示,三個 Pod:frontendbackenddatabase。它們之間的所有網路流量都是被允許的,彼此可以自由通訊。

但是對於database一般為了安全性,我們會希望存取是被嚴格的控管,只讓backend的pod可以存取,在設定了 Network Policies 之後,你可以控制 Pod 之間的網路通訊。在下列這個例子中,已經使用了一個 Network Policy,來限制 frontend Pod 不能直接存取 database Pod,而只能通過 backend Pod。這種設置提高了應用的安全性,確保只有授權的流量可以到達敏感資源。

  +-----------+          +-----------+
  |  frontend |--------->|  backend  |
  |           |<---------|           |
  +-----------+          +-----------+
       |X                     |^
       ||       Using         ||
       ||   Network Policies  ||
       X|                     v|
      +-------------------------+
      |         database        |
      +-------------------------+

設定 Network Policies 的基本步驟

1. 創建一個簡單的 Network Policy

以下是一個基本的 Network Policy,它禁止所有來自其他 Pod 的入站流量,只有來自相同命名空間中的 Pod 允許存取:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: deny-all-except-namespace
  namespace: default
spec:
  podSelector:
    matchLabels:
      role: db
  policyTypes:
  - Ingress
  ingress:
  - from:
    - podSelector: {}
  • podSelector:選擇哪些 Pod 受到這個策略的影響。在這裡,它應用於所有帶有 role: db 標籤的 Pod。
  • policyTypes:定義策略的類型。這裡僅設定了 Ingress(入站流量)。
  • ingress.from:允許來自相同命名空間的所有 Pod 存取。

2. 限制特定流量的 Network Policy

這是一個更具限制性的策略,僅允許來自特定應用(具有特定標籤)的流量:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-app-traffic
  namespace: default
spec:
  podSelector:
    matchLabels:
      role: backend
  policyTypes:
  - Ingress
  ingress:
  - from:
    - podSelector:
        matchLabels:
          app: frontend
    ports:
    - protocol: TCP
      port: 80
  • 這個策略允許標有 app: frontend 標籤的 Pod 通過 TCP 端口 80 存取標有 role: backend 標籤的 Pod。

3. 出站流量控制的 Network Policy

以下是控制 Pod 出站流量的範例策略,僅允許 Pod 存取特定的 IP 範圍:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-specific-egress
  namespace: default
spec:
  podSelector:
    matchLabels:
      role: api-server
  policyTypes:
  - Egress
  egress:
  - to:
    - ipBlock:
        cidr: 10.0.0.0/24
    ports:
    - protocol: TCP
      port: 443
  • 這個策略允許 role: api-server 的 Pod 只通過 TCP 端口 443 存取 10.0.0.0/24 網段的 IP。

Network Policies 的最佳實踐

  1. 最小權限原則

    • 在設計 Network Policies 時,遵循最小權限原則。預設情況下,應封鎖所有不必要的流量,並僅允許特定的、必要的網路通訊。
  2. 分層策略

    • 通常可以結合多個 Network Policies 來建立分層的網路安全控制,這樣可以更精細地管理網路流量。
  3. 定期稽核和測試

    • 定期稽核和測試 Network Policies,以確保它們仍然符合安全要求,並且不會影響合法流量。
  4. 結合 RBAC 和 Network Policies

    • 將 Network Policies 與 RBAC 結合使用,進一步強化 Kubernetes Cluster 的安全性,確保應用和網路的雙重防護。

總結

Network Policies 是 Kubernetes 中保護 Pod 網路通訊的重要工具。通過正確設定和管理 Network Policies,你可以有效地限制不必要的內部和外部網路存取,增強整個 Cluster 的安全性。在接下來的課程中,我們將探討 Kubernetes 的監控和記錄管理,這將幫助你進一步了解和管理 Cluster 的運行情況。


上一篇
Day 26- 使用 RBAC 進行身份驗證和授權
下一篇
Day 28- 使用 Prometheus 與 Grafana 監控 Kubernetes
系列文
Kubernetes三十天就上手30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言