Kubernetes必备知识: Network Policy-阿里云开发者社区

开发者社区> 阿里云术语库> 正文

Kubernetes必备知识: Network Policy

简介: 网络策略(Network Policy )是 Kubernetes 的一种资源。Network Policy 通过 Label 选择 Pod,并指定其他 Pod 或外界如何与这些 Pod 通信。 Pod的网络流量包含流入(Ingress)和流出(Egress)两种方向。默认情况下,所有 Pod 是非隔离的,即任何来源的网络流量都能够访问 Pod,没有任何限制。当为 Pod 定义了 Network Policy,只有 Policy 允许的流量才能访问 Pod。

所属技术领域:

Kubernetes

|名词定义|

网络策略(Network Policy )是 Kubernetes 的一种资源。Network Policy 通过 Label 选择 Pod,并指定其他 Pod 或外界如何与这些 Pod 通信。
Pod的网络流量包含流入(Ingress)和流出(Egress)两种方向。默认情况下,所有 Pod 是非隔离的,即任何来源的网络流量都能够访问 Pod,没有任何限制。当为 Pod 定义了 Network Policy,只有 Policy 允许的流量才能访问 Pod。
Kubernetes的网络策略功能也是由第三方的网络插件实现的,因此,只有支持网络策略功能的网络插件才能进行配置网络策略,比如Calico、Canal、kube-router等等。

|技术特点|

  1. 控制面数据流
  2. 资源配置模板
  3. 指定pod标签访问
  4. 指定namespaces标签访问
  5. NetworkPolicy数据结构定义
    适用场景:

1.静态密码认证
2.x509证书认证
3.Bearer Token认证
4.集成外部认证系统

|案例展示|

一、 下面通过一个真实示例展示Network Policy普通用法
用Deployment创建nginx pod实例并用service暴露图片.png

确认创建结果图片.png

测试nginx服务连通性图片.png

通过创建Network Policy对象添加隔离性图片.png

只允许包含access: "true"标签的pod访问nginx服务。
创建Network Policy图片.png

测试隔离性
图片.png

为pod添加access: "true"标签测试连通性

图片.png

二、 下面是一个 NetworkPolicy 的示例:
图片.png

除非选择支持网络策略的网络解决方案,否则将上述示例发送到API服务器没有任何效果。
必填字段: 与所有其他的Kubernetes配置一样,NetworkPolicy 需要 apiVersion、 kind和 metadata 字段。 关于配置文件操作的一般信息,请参考 这里、 这里和 这里。
spec: NetworkPolicy spec 中包含了在一个命名空间中定义特定网络策略所需的所有信息
podSelector: 每个 NetworkPolicy 都包括一个 podSelector ,它对该策略所应用的一组Pod进行选择。因为 NetworkPolicy 目前只支持定义 ingress 规则,这里的 podSelector 本质上是为该策略定义 “目标pod” 。示例中的策略选择带有 “role=db” 标签的pod。空的 podSelector 选择命名空间下的所有pod。
policyTypes: Each NetworkPolicy includes a policyTypes list which may include either Ingress, Egress, or both. The policyTypes field indicates whether or not the given policy applies to ingress traffic to selected pod, egress traffic from selected pods, or both. If no policyTypes are specified on a NetworkPolicy then by default Ingress will always be set and Egress will be set if the NetworkPolicy has any egress rules.
ingress: 每个 NetworkPolicy 包含一个 ingress 规则的白名单列表。(其中的)规则允许同时匹配 from 和 ports 部分的流量。示例策略中包含一条简单的规则: 它匹配一个单一的端口,来自两个来源中的一个, 第一个通过 namespaceSelector 指定,第二个通过 podSelector 指定。
egress: 每个 NetworkPolicy 包含一个 egress 规则的白名单列表。每个规则都允许匹配 to 和 port 部分的流量。该示例策略包含一条规则,该规则将单个端口上的流量匹配到 10.0.0.0/24 中的任何目的地。
所以,示例网络策略:
隔离 “default” 命名空间下 “role=db” 的pod (如果它们不是已经被隔离的话)。
允许从 “default” 命名空间下带有 “role=frontend” 标签的pod到 “default” 命名空间下的pod的6379 TCP端口的连接。
标签为 “role=frontend” 的 “default” 名称空间中的任何Pod
名称空间中带有标签 “project=myproject” 的任何pod
IP 地址范围为 172.17.0.0–172.17.0.255 和 172.17.2.0–172.17.255.255(即,除了 172.17.1.0/24 之外的所有 172.17.0.0/16)
允许从带有 “project=myproject” 标签的命名空间下的任何 pod 到 “default” 命名空间下的 pod 的6379 TCP端口的连接。

资料来源:

  1. 名词定义:https://www.cnblogs.com/tylerzhou/p/10995797.html
  2. 技术特点:CSDN社区https://blog.csdn.net/ZVAyIVqt0UFji/article/details/79492794
  3. 案例展示:https://www.cnblogs.com/tylerzhou/p/10995797.html

版权声明:本文中所有内容均属于阿里云开发者社区所有,任何媒体、网站或个人未经阿里云开发者社区协议授权不得转载、链接、转贴或以其他方式复制发布/发表。申请授权请邮件developerteam@list.alibaba-inc.com,已获得阿里云开发者社区协议授权的媒体、网站,在转载使用时必须注明"稿件来源:阿里云开发者社区,原文作者姓名",违者本社区将依法追究责任。 如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:developer2020@service.aliyun.com 进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:

阿里云术语库提供术语的标准定义、缩略语、术语用法及多语言等,提供术语的增删改查等功能。

官方博客
官网链接