在 AWS EKS(Elastic Kubernetes Service) 中,网络策略(Network Policy) 用于控制不同 Pod 之间的流量,实现细粒度的安全隔离。通过配置网络策略,可以指定哪些 Pod 可以相互通信,哪些被限制,从而提升集群的安全性。下面将介绍如何在 EKS 集群中配置网络策略来限制 Pod 之间的访问。
Calico 是最常用的 Kubernetes 网络策略实现方案。在 EKS 集群上可以这样部署(以最新官方文档为准,示例命令如下):
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
等待 Pod 状态变为 Running。
kubectl create namespace demo kubectl run pod-a -n demo --image=nginx kubectl run pod-b -n demo --image=nginx
以下示例禁止所有 Pod 相互访问,只允许 pod-a 能接收来自自身的流量:
<pre style="background:#f7f7f7;padding:10px;">
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: deny-all-to-pod-a
namespace: demo
spec:
podSelector:
matchLabels:
run: pod-a
policyTypes:
- Ingress
ingress:
- from:
- podSelector:
matchLabels:
run: pod-a
</pre>
例如,只允许带有 app=frontend 标签的 Pod 访问 pod-a,可以这样写:
<pre style="background:#f7f7f7;padding:10px;">
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-frontend-to-pod-a
namespace: demo
spec:
podSelector:
matchLabels:
run: pod-a
ingress:
- from:
- podSelector:
matchLabels:
app: frontend
</pre>
pod-b,尝试访问 pod-a 的 80 端口:kubectl exec -n demo pod-b -- curl pod-a通过Kubernetes NetworkPolicy,你可以很方便地在 AWS EKS 中实现微服务间的安全隔离。灵活运用,既保障了安全又保持了业务灵活性!