在线客服

AWS EKS集群如何进行网络策略配置,以限制容器之间的通信?

⏱️2026-03-23 09:00 👁️2
```html

🎉 AWS EKS 集群网络策略配置指南 🎉

想控制你的 EKS 集群里容器之间的“秘密对话”?网络策略来啦!它可以让你精细地管理哪些容器可以互相“聊天”,哪些不可以。🛡️

目标:限制 EKS 集群中 Pod 之间的通信,提高安全性。🔒

前提条件:

  • 一个正在运行的 EKS 集群。 🚀
  • kubectl 命令行工具已配置,可以连接到你的集群。 💻
  • 安装 Calico 或其他支持 NetworkPolicy 的 CNI 插件 (比如 Cilium)。 EKS 通常默认使用 Calico。 🐾

步骤详解:

  1. 确认 CNI 插件支持 NetworkPolicy:

    大多数 EKS 集群默认使用 Calico,它原生支持 NetworkPolicy。 如果你用的是其他的 CNI,需要确认它是否支持,以及如何启用 NetworkPolicy 功能。 🔍

  2. 编写 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, 或两者。 🚦
  3. 应用 NetworkPolicy:

    使用 kubectl apply 命令应用你的策略文件。 🚀

    
    kubectl apply -f your-network-policy.yaml
            
  4. 验证策略:

    验证策略是否生效,可以尝试从被阻止的 Pod 访问目标 Pod。你应该无法连接。 🚫 你可以使用 kubectl exec 进入一个 Pod,然后使用 curlping 命令测试连接性。

    例如:

    
    kubectl exec -it your-test-pod -- /bin/bash
    curl backend-service:8080  # 预期应该无法访问,如果策略生效
            

    也可以使用 Calico 的 calicoctl 工具来查看策略状态 (如果使用 Calico)。

最佳实践:

  • 先设计,后实施: 在应用策略之前,仔细规划你的网络流量需求。 🗺️
  • 从宽松到严格: 逐步收紧策略,先允许必要的流量,再逐步限制其他流量。 🚧
  • 监控和审计: 监控你的网络策略,确保它们按预期工作。 👁️‍🗨️
  • 使用命名空间隔离: 使用 Kubernetes 命名空间来隔离不同的应用或环境,然后使用 NetworkPolicy 在命名空间之间实施更严格的隔离。 🏢
  • 考虑 Egress 策略: 不要只关注 Ingress 流量,也要考虑限制 Pod 对外部服务的访问。 🌐

注意事项:

  • NetworkPolicy 只影响 Pod 之间的流量,不影响集群外部到 Pod 的流量 (例如 LoadBalancer 或 Ingress)。
  • 如果没有 NetworkPolicy 匹配某个 Pod,则默认允许所有流量进出该 Pod。
  • 仔细测试你的策略,确保它们不会意外阻止必要的流量。 ⚠️

希望这份指南能帮助你更好地管理你的 EKS 集群网络! 😃

```

鲨鱼云自助平台

鲨鱼云自助平台是一站式国际云服务解决方案平台,支持阿里云国际、腾讯云国际、亚马逊AWS、谷歌云GCP等主流云厂商账号的开通、充值与管理。

热门文章
更多>