Ubuntu上Kubernetes網絡策略設置指南
網絡策略(Network Policy)是Kubernetes實現Pod級網絡隔離的核心機制,通過標簽選擇器定義流量規則,配合支持NetworkPolicy的網絡插件(如Calico、Cilium)生效。以下是Ubuntu環境下配置Kubernetes網絡策略的詳細步驟及關鍵說明:
Kubernetes本身不直接實現網絡策略,需依賴網絡插件。Calico是Ubuntu環境下常用的選擇,步驟如下:
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
(出站規則)。以下是常見場景示例:
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端口。
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: default-deny-ingress
namespace: default
spec:
podSelector: {} # 選擇所有Pod
policyTypes:
- Ingress # 僅控制入站流量
作用:默認拒絕所有入站流量,需通過其他策略顯式允許必要流量(如上述allow-same-namespace
),實現“默認拒絕”安全模型。
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端口。
應用策略:
將上述YAML保存為文件(如network-policy.yaml
),執行以下命令應用:
kubectl apply -f network-policy.yaml
驗證策略:
kubectl get networkpolicies --all-namespaces
kubectl describe networkpolicy <policy-name> -n <namespace>
刪除策略:
kubectl delete -f network-policy.yaml
通過以上步驟,可在Ubuntu環境的Kubernetes集群中實現細粒度的網絡流量控制,提升集群安全性。