Kubernetes网络策略(Network Policy)是Kubernetes集群中保障微服务安全的核心武器,它相当于给Pod穿上定制化的”网络防护甲”。本文将基于实战经验,深入解析Kubernetes网络策略的配置和应用,并通过具体案例展示如何在生产环境中应用这些策略。
一、网络策略三大核心能力
- 选择性隔离:通过标签选择器(label selectors)来选择哪些Pod受策略影响。
- 允许或拒绝规则:可以定义允许或拒绝特定Pod间或Pod与其他网络端点间的通信。
- 多维度控制:可以根据IP地址块、端口号、协议等来制定规则。
二、生产环境必备策略模板
场景1:数据库访问白名单
以下是一个数据库访问白名单的Network Policy配置示例:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: db-access-control
namespace: production
spec:
podSelector:
matchLabels:
app: mysql
policyTypes:
- Ingress
ingress:
- from:
- podSelector:
matchLabels:
tier: frontend
- namespaceSelector:
matchLabels:
env: monitoring
ports:
- protocol: TCP
port: 3306
场景2:出口流量管控
以下是一个出口流量管控的Network Policy配置示例:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: restrict-external
namespace: production
spec:
podSelector:
matchLabels:
sensitive:
policyTypes:
- Egress
egress:
- to:
- ipBlock:
cidr: 10.0.0.0/8
三、实战案例解析
案例一:限制Nginx服务的访问
以下是一个限制Nginx服务访问的Network Policy配置示例:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: restrict-nginx-access
namespace: default
spec:
podSelector:
matchLabels:
role: nginx
policyTypes:
- Ingress
ingress:
- from:
- podSelector:
matchLabels:
role: frontend
- from:
- podSelector:
matchLabels:
role: backend
egress:
- to:
- podSelector:
matchLabels:
role: backend
案例二:跨命名空间通信
以下是一个跨命名空间通信的Network Policy配置示例:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: cross-namespace-communication
namespace: default
spec:
podSelector:
matchLabels:
role: db
policyTypes:
- Ingress
- Egress
ingress:
- from:
- namespaceSelector:
matchLabels:
project: myproject
egress:
- to:
- namespaceSelector:
matchLabels:
project: myproject
四、总结
Kubernetes网络策略为微服务安全提供了强大的保障,通过配置合适的策略,可以有效地控制Pod间的通信,提高集群的安全性。在实际应用中,应根据具体场景和需求,灵活配置网络策略,确保集群的安全稳定运行。