溫馨提示×

Ubuntu Kubernetes 網絡策略如何設置

小樊
44
2025-09-25 10:35:37
欄目: 智能運維

Ubuntu上Kubernetes網絡策略設置指南
網絡策略(Network Policy)是Kubernetes實現Pod級網絡隔離的核心機制,通過標簽選擇器定義流量規則,配合支持NetworkPolicy的網絡插件(如Calico、Cilium)生效。以下是Ubuntu環境下配置Kubernetes網絡策略的詳細步驟及關鍵說明:

一、前置準備:安裝支持NetworkPolicy的網絡插件

Kubernetes本身不直接實現網絡策略,需依賴網絡插件。Calico是Ubuntu環境下常用的選擇,步驟如下:

  1. 安裝Calico網絡插件
    執行以下命令部署Calico(以最新穩定版為例):
    kubectl apply -f https://docs.projectcalico.org/manifests/tigera-operator.yaml
    kubectl apply -f https://docs.projectcalico.org/manifests/custom-resources.yaml
    
    這會自動部署Calico的控制平面(如Tigera Operator)和數據平面組件(如felix、bird),確保節點間網絡通信正常。

二、創建基礎網絡策略:示例與說明

網絡策略通過YAML文件定義,核心字段包括podSelector(選擇目標Pod)、policyTypes(策略類型)、ingress(入站規則)、egress(出站規則)。以下是常見場景示例:

1. 允許同一命名空間內指定標簽Pod的入站流量

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-same-namespace
  namespace: default  # 指定命名空間(默認為default)
spec:
  podSelector:
    matchLabels:
      app: myapp  # 選擇標簽為app=myapp的Pod
  policyTypes:
  - Ingress  # 僅控制入站流量
  ingress:
  - from:
    - podSelector:
        matchLabels:
          app: myapp  # 允許標簽為app=myapp的Pod訪問
    ports:
    - protocol: TCP
      port: 80  # 僅允許TCP端口80

作用:同一命名空間內,僅標簽為app=myapp的Pod可訪問目標Pod的80端口。

2. 默認拒絕所有入站流量(強化安全)

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default-deny-ingress
  namespace: default
spec:
  podSelector: {}  # 選擇所有Pod
  policyTypes:
  - Ingress  # 僅控制入站流量

作用:默認拒絕所有入站流量,需通過其他策略顯式允許必要流量(如上述allow-same-namespace),實現“默認拒絕”安全模型。

3. 允許Pod訪問外部IP塊(出站流量)

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-external-access
  namespace: default
spec:
  podSelector:
    matchLabels:
      app: backend  # 選擇標簽為app=backend的Pod
  policyTypes:
  - Egress  # 僅控制出站流量
  egress:
  - to:
    - ipBlock:
        cidr: 172.17.0.0/16  # 允許訪問外部IP段(如Docker默認網段)
    ports:
    - protocol: TCP
      port: 5432  # 僅允許TCP端口5432(如PostgreSQL)

作用:允許標簽為app=backend的Pod訪問外部172.17.0.0/16網段的5432端口。

三、應用與管理網絡策略

  1. 應用策略
    將上述YAML保存為文件(如network-policy.yaml),執行以下命令應用:

    kubectl apply -f network-policy.yaml
    
  2. 驗證策略

    • 查看集群中所有網絡策略:
      kubectl get networkpolicies --all-namespaces
      
    • 查看特定命名空間的策略詳情:
      kubectl describe networkpolicy <policy-name> -n <namespace>
      
  3. 刪除策略

    kubectl delete -f network-policy.yaml
    

四、關鍵注意事項

  • 網絡插件兼容性:必須使用支持NetworkPolicy的插件(如Calico、Cilium),Flannel默認不支持,需額外配置(如Flannel+Calico集成)。
  • 默認策略優先級:若未定義任何策略,集群允許所有流量;定義策略后,流量需匹配至少一條允許規則才會被放行。
  • 最小權限原則:僅開放必要的端口和來源,避免過度授權(如限制僅允許特定命名空間的Pod訪問數據庫)。
  • 策略疊加:多個策略會疊加生效,允許流量為所有適用策略允許流量的并集。

通過以上步驟,可在Ubuntu環境的Kubernetes集群中實現細粒度的網絡流量控制,提升集群安全性。

0
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女