使用Network Policy网络策略
更新时间:2024-06-17
Network Policy是Kubernetes提供的一种资源,用于定义基于Pod的网络隔离策略。它通过自定义的规则,描述了Pod间能否通信。本文将介绍如何在CCE集群开启Network Policy以及常见的配置示例。
前置说明
- 仅支持CCE标准独立集群和CCE托管集群,集群开启Network Policy后对集群网络性能有一定的影响。
- Network Policy网络策略依赖于网络插件实现,不同的网络配置行为不同。集群未开启eBPF增强时,网络策略插件由Calico-felix(仅支持veth网络模式)实现。集群开启eBPF增强时,网络策略插件由Cilium(仅支持veth网络模式)实现。网络策略插件的行为请参考社区文档。建议您充分理解、验证后启用网络策略。
操作步骤
创建集群时开启Network Policy
- 登录容器引擎控制台,在左侧导航栏中选择集群列表。
- 在“集群列表”页面单击创建,进入创建集群页面。
- 在“创建集群”页面的“网络配置”中完成相关配置。
注意
勾选支持Network Policy集群将默认支持基于策略的网络控制(若未勾选eBPF增强,网络策略插件由Calico-felix实现,若勾选eBPF增强,网络插件由Cilium实现)
Network Policy配置示例
示例
- 禁止namespace=staging中Pod被访问。
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: default-deny
namespace: staging
spec:
podSelector: {}
policyTypes:
- Ingress
- 允许namespace=staging中Pod被访问。
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-all
namespace: staging
spec:
podSelector: {}
ingress:
- {}
policyTypes:
- Ingress
- 禁止namespace=production中Pod对外访问。
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: default-deny
namespace: production
spec:
podSelector: {}
policyTypes:
- Egress
- 允许namespace=production中Pod对外访问。
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-all
namespace: production
spec:
podSelector: {}
egress:
- {}
policyTypes:
- Egress
- 禁止所有Pod的入和出的流量。
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: default-deny
spec:
podSelector: {}
policyTypes:
- Ingress
- Egress
语义说明
参数 | 说明 |
---|---|
PodSelector | 选中需要隔离的Pod |
policyTypes | 策略类型,NetworkPolicy 将流量分为ingress和egress,即入方向和出方向。如果没有指定则表示不闲置 |
ingress | 入方向,白名单,需要指定 from、ports,即来源、目的端口号,from有三种类型,ipBlock/namespaceSelector/podSelector |
egress | 出方向,白名单,类似ingress,egress需要指定to、ports,即目的、目的端口号 |