🎉 AWS EKS 集群网络策略配置指南 🎉
想控制你的 EKS 集群里容器之间的“秘密对话”?网络策略来啦!它可以让你精细地管理哪些容器可以互相“聊天”,哪些不可以。🛡️
目标:限制 EKS 集群中 Pod 之间的通信,提高安全性。🔒
前提条件:
kubectl 命令行工具已配置,可以连接到你的集群。 💻步骤详解:
确认 CNI 插件支持 NetworkPolicy:
大多数 EKS 集群默认使用 Calico,它原生支持 NetworkPolicy。 如果你用的是其他的 CNI,需要确认它是否支持,以及如何启用 NetworkPolicy 功能。 🔍
编写 NetworkPolicy YAML 文件:
这是最关键的一步! 你需要定义你的策略。 下面是一些例子:
例子 1: 拒绝所有命名空间 `default` 中 Pod 的入口流量。
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: deny-all-ingress
namespace: default
spec:
podSelector: {} # 匹配所有 Pod
ingress: [] # 空列表表示拒绝所有入口流量
policyTypes:
- Ingress
例子 2:允许 `app=frontend` 的 Pod 访问 `app=backend` 的 Pod,端口 8080。
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-frontend-to-backend
namespace: default
spec:
podSelector:
matchLabels:
app: backend # 匹配具有 app=backend 标签的 Pod
ingress:
- from:
- podSelector:
matchLabels:
app: frontend # 允许具有 app=frontend 标签的 Pod 发起连接
ports:
- protocol: TCP
port: 8080 # 仅允许 8080 端口
policyTypes:
- Ingress
例子 3:允许来自特定命名空间的 Pod 访问。
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-from-namespace
namespace: default
spec:
podSelector:
matchLabels:
app: myapp
ingress:
- from:
- namespaceSelector:
matchLabels:
name: development # 允许来自 development 命名空间的流量
ports:
- protocol: TCP
port: 80
policyTypes:
- Ingress
例子 4: 允许来自特定IP地址段的访问。
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-from-ip-block
namespace: default
spec:
podSelector:
matchLabels:
app: myapp
ingress:
- from:
- ipBlock:
cidr: 10.0.0.0/24 # 允许来自 10.0.0.0/24 CIDR 的流量
except:
- 10.0.0.5/32 # 但排除 10.0.0.5
ports:
- protocol: TCP
port: 80
policyTypes:
- Ingress
关键字段解释:
podSelector: 选择策略应用到哪些 Pod。 🎯ingress: 定义允许进入 Pod 的流量规则。 ➡️egress: 定义允许 Pod 发出的流量规则。 ⬅️ (Egress 策略需要 CNI 支持)from: 指定允许流量的来源,可以是 podSelector, namespaceSelector, 或 ipBlock。 来源可以是 Pod 标签,命名空间标签,或 IP 地址段。 🌍ports: 指定允许的端口和协议。 🚪policyTypes: 指定策略类型,可以是 Ingress, Egress, 或两者。 🚦应用 NetworkPolicy:
使用 kubectl apply 命令应用你的策略文件。 🚀
kubectl apply -f your-network-policy.yaml
验证策略:
验证策略是否生效,可以尝试从被阻止的 Pod 访问目标 Pod。你应该无法连接。 🚫 你可以使用 kubectl exec 进入一个 Pod,然后使用 curl 或 ping 命令测试连接性。
例如:
kubectl exec -it your-test-pod -- /bin/bash
curl backend-service:8080 # 预期应该无法访问,如果策略生效
也可以使用 Calico 的 calicoctl 工具来查看策略状态 (如果使用 Calico)。
最佳实践:
注意事项:
希望这份指南能帮助你更好地管理你的 EKS 集群网络! 😃
```