--- title: Kubernetes NetworkPolicy 东西向与出口白名单(Pod 互通与 egress 控制) date: 2025-11-26 keywords: - NetworkPolicy - egress - ingress - CIDR - namespaceSelector description: 通过默认拒绝与精确放行策略控制集群东西向与出口访问,提供DNS与外部API白名单示例,并给出连通性验证方法。 categories: - 文章资讯 - 技术教程 --- ## 概述 NetworkPolicy用于限制Pod间通信与外部访问。采用默认拒绝、按命名空间与标签精确放行,以及对DNS和外部API的白名单控制,可提升安全边界与合规性。 ## 关键实践与参数 - 默认拒绝:创建禁止所有 `ingress/egress` 的策略 - 内部互通:按命名空间与标签精确允许 - 出口白名单:允许DNS与特定CIDR或外部服务IP段 - 观测:使用连通性测试与日志审计 ## 示例/配置/实现 ```yaml apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: default-deny-all namespace: app spec: podSelector: {} policyTypes: [Ingress, Egress] --- apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: allow-same-namespace namespace: app spec: podSelector: matchLabels: { role: api } policyTypes: [Ingress] ingress: - from: - podSelector: { matchLabels: { role: web } } --- apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: egress-whitelist namespace: app spec: podSelector: matchLabels: { role: api } policyTypes: [Egress] egress: - to: - namespaceSelector: { matchLabels: { kube-system: "true" } } ports: [{ port: 53, protocol: UDP }] - ipBlock: cidr: 203.0.113.0/24 ports: [{ port: 443, protocol: TCP }] ``` ## 验证 - 东西向:`web` Pod 访问 `api` 成功,其他命名空间访问被拒 - 出口:`api` Pod 能解析DNS并访问白名单CIDR的外部API,其他外部目标被拒 - 审计:结合CNI或网关日志确认拒绝与允许次数 ## 注意事项 - 需确认CNI实现支持NetworkPolicy(e.g., Calico/Cilium) - 外部服务IP可能变化,建议配合网关或代理层进行域名到IP映射管理 - 避免过度宽泛的CIDR,保持最小放行 - 与Ingress/Egress Gateway策略协同

发表评论 取消回复