在K8S中,网络策略有哪些?
在Kubernetes(K8S)中,网络策略(NetworkPolicy)是一种重要的资源对象,用于定义Pod之间的通信规则,实现微服务应用程序中的细粒度网络隔离和安全控制。以下是Kubernetes网络策略的一些详细内容:
-
网络策略的核心概念:
- 选择器(Selectors):用于标识特定Pod集合的标签选择器。
- 规则(Rules):定义允许或拒绝哪些流量的规则,包括源Pod、目标Pod、协议和端口等。
- 默认策略:在没有明确定义网络策略的情况下,采用默认策略,通常是允许所有流量。
-
网络策略的组成部分:
- 策略类型:Kubernetes网络策略有两种类型:Ingress(入站)和Egress(出站)。Ingress策略允许你控制流入Pod的流量,而Egress策略允许你控制从Pod流出的流量。它们在
NetworkPolicy
资源的policyTypes
字段中指定。 - 入口规则(Ingress Rules):这些定义了Pod的传入流量策略,指定在
NetworkPolicy
资源的ingress
字段中。你可以定义流量的来源,可以是Pod、命名空间或IP块,以及允许访问流量的目标端口或端口。 - 出口规则(Egress Rules):这些定义了Pod的传出流量策略。在这里,你将指定流量的目标,可以是Pod、命名空间或IP块,以及允许访问流量的目标端口或端口。
- Pod选择器(Pod Selectors):这些选择要应用策略的Pod。为选择器指定标签,与选择器匹配的Pod将受到策略中指定的规则的约束。
- 命名空间选择器(Namespace Selectors):类似于Pod选择器,这些允许你选择要应用策略的命名空间。
- IP地址块选择器(IP Block Selectors):IP地址块选择器指定要允许或拒绝流量的IP地址范围。你可以使用CIDR表示法来指定IP地址范围。
- 策略类型:Kubernetes网络策略有两种类型:Ingress(入站)和Egress(出站)。Ingress策略允许你控制流入Pod的流量,而Egress策略允许你控制从Pod流出的流量。它们在
-
网络策略的实施:
- 要使用网络策略,集群必须使用支持NetworkPolicy的网络插件。创建一个
NetworkPolicy
资源对象而没有控制器来使它生效的话,是没有任何作用的。 - 网络策略通过标签选择器来设定哪些流量可以进入或离开与该算符匹配的Pod。当创建基于IP的
NetworkPolicy
时,基于IP组块(CIDR范围)来定义策略。
- 要使用网络策略,集群必须使用支持NetworkPolicy的网络插件。创建一个
-
网络策略的应用场景:
- 应用程序间的访问控制,例如项目A不能访问项目B的Pod。
- 开发环境命名空间不能访问测试环境命名空间的Pod。
- 当Pod暴露到外部时,需要做Pod白名单。
- 多租户网络环境隔离。
-
网络策略的示例:
apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: test-network-policy namespace: default spec: podSelector: matchLabels: role: db policyTypes: - Ingress - Egress ingress: - from: - ipBlock: cidr: 172.17.0.0/16 except: - 172.17.1.0/24 - namespaceSelector: matchLabels: project: myproject - podSelector: matchLabels: role: frontend ports: - protocol: TCP port: 6379 egress: - to: - ipBlock: cidr: 10.0.0.0/24 ports: - protocol: TCP port: 5978
这个策略确保只有带有标签
role: frontend
的Pod可以访问TCP端口6379上的后端Pod,并且后端Pod只能访问CIDR块10.0.0.0/24
中的服务。
综上所述,通过合理配置网络策略,可以增强集群的安全性,确保不同命名空间和应用之间的通信符合预期的安全要求。