Kubernetes NetworkPolicy网络策略零接触到应用
  

深信服认证 8552

{{ttag.title}}
本帖最后由 深信服认证 于 2022-11-25 16:04 编辑

1. NetworkPolicy简介
在K8s中,可以用名称空间来隔离集群当中的多个资源,可以实现不同名称空间中创建具备同样名称及同类别的资源。可是在k8s中,名称空间不能隔离网络,无论是在那个名称空间中创建的pod,pod之间都能够进行互访。但是很多实际生产环境当中,都要求其他名称空间或外部客户端约束对此名称空间中的pod的访问,这时我们就可以在此名称空间中创建NertworkPolicy资源来实现该目的。

NertworkPolicy资源可以约束 外界客户端是否能够访问该名称空间下的pod,或那些pod不可以由哪一个名称空间或者pod访问。除了限制名称空间中的pod网络入站流量之外,还能够限定名称空间中的pod出站流量,允许或者拒绝pod访问某个名称空间下的pod或者外部服务。

通俗来说,NetworkPolicy对应名称空间中的网络防火墙。可以根据需求,在对应名称空间中创建NetworkPolicy资源,对名称空间中的pod实行流量管控。

2. NetworkPolicy工作原理
Pod 有两种隔离: 出口的隔离(Ingress)和入口的隔离(Egress)。
默认情况下,一个Pod的出口是非隔离的,即所有出口连接都是允许的。如果有任何的 NetworkPolicy选择该Pod并在其policyTypes中包含“Egress”,则该Pod是出口隔离的, 我们称这样的策略适用于该Pod的出口。当一个Pod的出口被隔离时,唯一允许的来自Pod 的连接是适用于出口的Pod的某个NetworkPolicy的egress列表所允许的连接。值得注意的是,这些egress列表的效果是相加的。

默认情况下,一个Pod对入口是非隔离的,即所有入站连接都是被允许的。如果有任何的NetworkPolicy选择该Pod并在其policyTypes中包含“Ingress”,则该Pod被隔离入口,我们称这种策略适用于该Pod的入口。当一个Pod的入口被隔离时,唯一允许进入该 Pod 的连接是来自该Pod节点的连接和适用于入口的Pod的某个NetworkPolicy的ingress列表所允许的连接。这些ingress列表的效果也是相加的。

网络策略是相加的,所以不会产生冲突。如果策略适用于Pod某一特定方向的流量, Pod 在对应方向所允许的连接是适用的网络策略所允许的集合。因此,评估的顺序不影响策略的结果。

要允许从源Pod到目的Pod的连接,源Pod的出口策略和目的Pod的入口策略都需要允许连接。 如果任何一方不允许连接,建立连接将会失败。

NetworkPolicy基础工作逻辑

3. NetworkPolicy示例

l spec:NetworkPolicy 中包含了在一个名称空间中定义特定网络策略所需的所有信息。

l podSelector:每个NetworkPolicy都包括一个podSelector,主要是对该策略所适用的Pod 进行选择。示例中的策略选择带有 “role=db” 标签的 Pod。如果 podSelector 为空,选择该名称空间下的所有Pod。

l policyTypes:每个 NetworkPolicy 都包含一个 policyTypes 列表,其中包含 Ingress 或 Egress 或两者兼具。policyTypes字段表示给定的策略是应用于进入所选Pod的入站流量还是来自所选Pod的出站流量,或两者兼有。如果 NetworkPolicy 未指定 policyTypes则默认情况下始终设置Ingress;如果NetworkPolicy有任何出口规则的话则设置Egress。

l ingress:每个NetworkPolicy可包含一个ingress 规则的白名单列表。每个规则都允许同时匹配from和ports部分的流量。示例策略中包含一条简单的规则: 它匹配某个特定端口,来自三个来源中的一个,第一个通过 ipBlock 指定,第二个通过名称空间Selector 指定,第三个通过 podSelector 指定。

l egress:每个 NetworkPolicy 可包含一个egress规则的白名单列表。每个规则都允许匹配to和port部分的流量。该示例策略包含一条规则,该规则将指定端口上的流量匹配到 10.0.0.0/24 中的任何目的地。

所以,该网络策略示例表示的含义如下:隔离default名称空间下role=db的 Pod,(Ingress 规则)允许以下 Pod 连接到default名称空间下的带有role=db标签的所有 Pod 的 6379 TCP 端口:default名称空间下带有role=frontend标签的所有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)(Egress 规则)允许 “default”名称空间中任何带有标签 “role=db” 的 Pod 到 CIDR 10.0.0.0/24下5978 TCP端口的连接。

4.NetworkPolicy默认策略
默认情况下,如果名称空间中不存在任何策略,则所有进出该名称空间中Pod的流量都被允许。以下示例可以更改该名称空间中的默认行为。

4.1默认拒绝所有入站流量
4.2允许所有入站流量
4.3默认拒绝所有出站流量
4.5默认拒绝所有入站和所有出站流量

5.NetworkPolicy应用
示例:使用NetworkPolicy限制Ingress服务发布。

一般来说,一个项目服务发布将域名根路径指向前端的应用,接口路径指向对应的网关或微服务。例如Kubernetes上运行的Spring Cloud项目,应用Zuul做为网关,前面是NodeJS。在这样的情况下,配置域名根路径指向NodeJS应用,配置/api路径指向Ingress里的Zuul。无论用什么方式发布应用,最后是由Ingress代理实现的,只开放自已的应用给Ingress,会起到一定的安全作用。现在,假定创立了一个Nginx服务做为前端,并配置NetworkPolicy,让仅有Ingress Controller能够访问应用。注意,以下应用内容,需要读者提前部署好ingress,本项目就不再单独讲解。

5.1:创建nginx deployment
首先创建一个ngixn的应用,用来进行访问。
Service内容
该svc指向nginx pod。
Ingress内容
创建ingress,后续用于域名访问。

5.2:进行测试
此时部署的nginx deployment可以被任意节点和pod进行访问
使用service地址访问,可以访问
使用ingress地址可以访问(域名访问地址需要进行解析至节点IP)

5.3:给ingress名称空间打标签
为了在网络策略放行来自ingress中的pod,需要给ingress空间打上标签,后续网络策略当中进行选择。

5.4:增加网络策略
只让ingress controller访问,并且让该名称空间内部的pod可以互访。

5.5:再次访问测试
使用svc已经无法访问。

通过ingress可以访问。
浏览器使用ingress域名地址也可以访问。
至此,我们完成了NetworkPolicy的应用。

本文作者丁运管:深信服云计算认证专家(SCCE-C),产业教育中心资深讲师,云计算认证架构师,曾就职于阿里云、宏福集团,担任高级运维工程师和云计算高级讲师;多次作为电信、移动等众多大型企业特聘讲师,提供课程培训和技术顾问;持有ACE、ACP、CKA等行业证书,致力于Docker、Kubernetes、OpenStack等前沿技术研究,具有丰富的云计算一线实战经验以及课程资源建设和交付经验。

打赏鼓励作者,期待更多好文!

打赏
6人已打赏

我是路人甲55 发表于 2022-12-7 19:02
  
感谢楼主分享,每日学习打卡
嘀嘀柠柠 发表于 2022-12-16 11:41
  
楼主的文章图文并茂,清晰易懂
蟲爺 发表于 2022-12-17 23:09
  
感谢分享
wshellym 发表于 2023-1-29 20:14
  
感谢楼主分享,学习一下
小鱼儿 发表于 2023-2-1 09:53
  
感谢楼主分享,每日学习打卡
暴躁的钢索 发表于 2023-2-4 08:59
  
每天学习一点点,每天进步一点点
dhf 发表于 2023-2-7 12:53
  
每日打卡学习,感谢分享,学习了!!!
你行不行a_细狗 发表于 2023-2-8 09:09
  
感谢分享有助于工作和学习!
乀糖果 发表于 2023-2-11 15:42
  
感谢分享,有助于工作和学习!
发表新帖
热门标签
全部标签>
安全效果
西北区每日一问
技术盲盒
技术笔记
干货满满
【 社区to talk】
每日一问
信服课堂视频
GIF动图学习
新版本体验
技术咨询
2023技术争霸赛专题
功能体验
产品连连看
自助服务平台操作指引
标准化排查
秒懂零信任
技术晨报
安装部署配置
原创分享
排障笔记本
玩转零信任
排障那些事
SDP百科
技术争霸赛
深信服技术支持平台
通用技术
以战代练
升级&主动服务
社区新周刊
畅聊IT
答题自测
专家问答
技术圆桌
在线直播
MVP
网络基础知识
升级
安全攻防
上网策略
测试报告
日志审计
问题分析处理
流量管理
每日一记
运维工具
云计算知识
用户认证
解决方案
sangfor周刊
VPN 对接
项目案例
SANGFOR资讯
专家分享
技术顾问
信服故事
功能咨询
终端接入
授权
设备维护
资源访问
地址转换
虚拟机
存储
迁移
加速技术
产品预警公告
信服圈儿
S豆商城资讯
「智能机器人」
追光者计划
社区帮助指南
答题榜单公布
纪元平台
卧龙计划
华北区拉练
天逸直播
山东区技术晨报
文档捉虫活动
齐鲁TV
华北区交付直播
每周精选
2024年技术争霸赛
北京区每日一练
场景专题
故障笔记
高手请过招
高频问题集锦
POC测试案例
全能先锋系列
云化安全能力

本版版主

90
268
0

发帖

粉丝

关注

本版达人