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集群中实现细粒度的网络流量控制,提升集群安全性。