首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >容器网络硬核技术内幕 (23) 权利,知识与责任

容器网络硬核技术内幕 (23) 权利,知识与责任

作者头像
用户8289326
发布于 2022-07-29 12:25:24
发布于 2022-07-29 12:25:24
3560
举报

在上期,我们介绍了如何在yaml中,描述一个networkpolicy实例。

实际上,networkpolicy是由kubernetes的CNI插件实现的。也就是说,CNI插件的开发者,需要解析yaml描述的networkpolicy,并实现networkpolicy描述的功能。

networkpolicy需要实现哪些功能呢?

很容易看出,networkpolicy描述的是容器组之间的策略,策略的内容是:

源容器组:源端口 -> 目的容器组:目的端口 放行 or 禁止

网络安全基础的同学会发现,这种描述似曾相识——

在我们熟悉的状态检测防火墙中,配置的策略为:

源安全域->目的安全域 策略放行 or 禁止

当IP地址 100.1.1.100通过端口41316,向目的地址 200.1.1.100的端口443发起TCP连接,目的服务器回应,两端建立连接后,防火墙会话得以建立:

100.1.1.100:41316 -> 200.1.1.200:443

再让我们回到容器的世界中,看下图:

实际上,前文的networkpolicy描述的是这么一条策略:

源IP:所有带有frontend标签的容器

源端口:任意

目的IP:所有带有db标签的容器

目的端口:3306

协议:TCP

行为:允许

这与传统的状态防火墙本质上是一致的,唯一的区别是,传统防火墙识别的是安全域,而容器networkpolicy识别的是容器标签。

也就是说,networkpolicy实现的时候,首先要根据数据包的源IP,查找它对应的标签,再根据数据包的目的IP,查找它对应的标签,结合源端口、目的端口,查询策略对应的行为。

那么,谁掌握了容器标签与容器IP地址之间的对应关系呢?

如果大家仔细阅读了这个专题,答案就昭然若揭了——

CNI插件

kubernetes调用CNI插件的时候,会向CNI插件传入pod的IP地址和pod的标签。因此,根据networkpolicy的配置,通过pod的IP地址确定其标签,进而实现networkpolicy,也就成了CNI插件责无旁贷的义务。正所谓,权力越大,知识越多,责任越重。

当然,CNI插件并非都需要实现networkpolicy。遗憾的是,最常见的软件CNI插件flannel并不支持networkpolicy。

幸好,与flannel齐名的开源CNI插件calico支持networkpolicy。

calico的介绍不在本文范围内,感兴趣的同学可以去calico的主页学习相关文档:https://www.projectcalico.org/

在calico的文档中,可以看到这样一张图:

calico会在每个node(host)上安装agent,同时,policy controller会监视kubernetes上对networkpolicy的创建。

当用户创建networkpolicy的时候,policy controller可以将其记录到etcd数据库,并推送到各个node(host)的agent。

下面是重点:agent如何让networkpolicy落地呢?

原来,agent最终还是调用了Linux中破一切的安全/负载均衡组件——

iptables。

实际上,在实现了networkpolicy的容器网络中,每个node上逻辑网络可以呈现为下图:

任何pod之间的通信都需要被iptables监管。

可想而知地,在pod之间流量较大的时候,iptables的性能显然会成为瓶颈——

如何解决这个问题呢?

请看下期。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-08-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 帅云霓的技术小屋 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
容器网络硬核技术内幕 (22) 安全与自由兼顾
在上一期《矛盾论与实践论》中,我们提到,网络的正确转发包(路由交换)和正确丢弃包(安全),是矛盾的一体两面。
用户8289326
2022/07/29
4130
容器网络硬核技术内幕 (22) 安全与自由兼顾
容器网络硬核技术内幕 (24) 知微知彰,知柔知刚 (上)
在前几期专题中,我们已经知道,容器的安全可以通过networkpolicy来描述一个基本的约束。
用户8289326
2022/07/29
2870
容器网络硬核技术内幕 (24) 知微知彰,知柔知刚 (上)
容器网络硬核技术内幕 (小结-下)
1. Kubernetes本身只是一个外壳,实质上对计算、网络、存储的资源是通过3个接口规范CRI,CNI和CSI对接的。CNI规范了pod入网和离开行为的输入。
用户8289326
2022/07/29
3310
容器网络硬核技术内幕 (17) 生命的火花
在《为人民服务重于泰山》中,我们提到,容器只有向外界提供服务,才有存在的价值,像泰山一样重,否则则像鸿毛一样轻。
用户8289326
2022/07/28
3160
容器网络硬核技术内幕 (17) 生命的火花
Kubernetes系列学习文章 - 网络实现(八)
| 导语 前面介绍了很多K8S的概念以及架构方面的东西,这里我们说说K8S的网络。云计算里面的网络向来是复杂的,因为里面牵扯到硬件网络跟虚拟网络的交互。尤其是虚拟网络,比较抽象,如果不搞清楚,一些问题排障将寸步难行。
宝哥@上云专家
2020/02/10
2.3K0
Kubernetes系列学习文章 - 网络实现(八)
K8S折磨的安装篇
这些容器管理的问题统称为容器编排问题,为了解决这些容器编排问题,就产生了一些容器编排的软件:
大忽悠爱学习
2022/08/23
9160
K8S折磨的安装篇
Kubernetes集群部署关键知识总结
  Kubernetes集群部署需要安装的组件东西很多,过程复杂,对服务器环境要求很苛刻,最好是能连外网的环境下安装,有些组件还需要连google服务器下载,这一点一般很难满足,因此最好是能提前下载好准备的就尽量下载好。
欢醉
2019/05/25
1.5K0
云原生 | k8s网络之calico组件多方式快速部署及使用calicoctl管理维护网络
官网地址: https://www.tigera.io/project-calico/
全栈工程师修炼指南
2023/10/31
14.9K1
云原生 | k8s网络之calico组件多方式快速部署及使用calicoctl管理维护网络
容器网络硬核技术内幕 (8) 五湖四海的友谊
上一期我们讲到,Kubernetes作为容器编排平台的事实标准,重新定义了容器网络的元素和接口标准,形成了以下共识:
用户8289326
2022/07/28
2940
容器网络硬核技术内幕 (8) 五湖四海的友谊
Kubernetes网络模型
在Kubernetes中设计了一种网络模型,要求无论容器运行在集群中的哪个节点,所有容器都能通过一个扁平的网络平面进行通信,即在同一IP网络中。需要注意的是:在K8S集群中,IP地址分配是以Pod对象为单位,而非容器,同一Pod内的所有容器共享同一网络名称空间。
mikelLam
2022/10/31
1.4K0
Kubernetes网络模型
容器网络硬核技术内幕 (26) 知微知彰,知柔知刚 (下)
交换机的TCAM资源是有限的, 一般在500K以内。我们刚才提到,实现微分段需要在TCAM内查找,这会不会大量消耗交换机的TCAM资源,影响其他业务呢?
用户8289326
2022/07/29
3900
容器网络硬核技术内幕 (26) 知微知彰,知柔知刚 (下)
042.集群网络-flannel及calico
Kubernetes的网络模型假定了所有Pod都在一个可以直接连通的扁平网络空间中。若需要实现这个网络假设,需要实现不同节点上的Docker容器之间的互相访问,然后运行Kubernetes。目前已经有多个开源组件支持容器网络模型。如Flannel、Open vSwitch、直接路由和Calico。
木二
2020/03/25
1.7K0
11-kubernetes入门学习之网络设计实现方案
在前面的章节中我们介绍过Pod是K8s进行创建、调度管理的最小单位,在同一个Pod内的Container不会垮主机,每个Pod都有独立的Pod IP (IP per Pod)并且该Pod包含的所有容器共享一个网络协议栈(或者网络名称空间), 例如容器之间通过localhost+port可以进行相互访问。即集群中的所有Pod都处于一个扁平互通的网络空间。
全栈工程师修炼指南
2022/09/29
1.3K0
11-kubernetes入门学习之网络设计实现方案
云网络技术内幕 (22) 他山之石可以攻玉
pip在上期,我们讲到,对于私有化部署的容器平台,传统开源的calico,flannel等基于iptables/ipvs的容器插件无法同时满足以下几点
用户8289326
2023/09/06
3050
云网络技术内幕 (22) 他山之石可以攻玉
kubernetes(十八)集群网路
OSI(Open System Interconnection)是国际标准化组织(ISO)制定的一个用于计算机或通信系统间互联的标准体系,一般称为OSI参考模型或七层模型。
alexhuiwang
2020/09/23
1.7K0
kubernetes(十八)集群网路
【重识云原生】第六章容器基础6.4.8节—— Network Policy
        网络策略(NetworkPolicy)是一种关于 Pod 间及与其他Network Endpoints间所允许的通信规则的规范。NetworkPolicy资源使用 标签 选择 Pod,并定义选定 Pod 所允许的通信规则。网络策略通过网络插件来实现。要使用网络策略,用户必须使用支持 NetworkPolicy 的网络解决方案。默认情况下,Pod间是非隔离的,它们接受任何来源的流量。Pod 可以通过相关的网络策略进行隔离。一旦命名空间中有网络策略选择了特定的 Pod,该 Pod 会拒绝网络策略所不允许的连接(命名空间下其他未被网络策略所选择的 Pod 会继续接收所有的流量)。网络策略不会冲突,它们是附加的。如果任何一个或多个策略选择了一个 Pod, 则该 Pod 受限于这些策略的 ingress/egress 规则的并集。因此策略的顺序并不会影响策略的结果。
江中散人_Jun
2022/11/21
1.7K0
【重识云原生】第六章容器基础6.4.8节—— Network Policy
盘点Kubernetes网络问题的4种解决方案
由于在企业中部署私有云的场景会更普遍,所以在私有云中运行Kubernetes + Docker集群之前,就需要自己搭建符合Kubernetes要求的网络环境。现在的开源世界里,有很多开源组件可以帮助我们打通Docker容器和容器之间的网络,实现Kubernetes要求的网络模型。当然每种方案都有自己适合的场景,我们要根据自己的实际需要进行选择。
孙杰
2019/10/29
2.4K0
盘点Kubernetes网络问题的4种解决方案
浅析 Kubernetes原生NetworkPolicy 网络策略,让更安全的容器运行环境唾手可得
k8s中的网络策略主要分为原生 NetworkPolicy 和第三方网络插件提供的网络策略。本文将主要分析原生Networkpolicy的网络策略。
灵雀云
2019/07/30
1.2K0
浅析 Kubernetes原生NetworkPolicy 网络策略,让更安全的容器运行环境唾手可得
「容器平台」Kubernetes网络策略101
什么是Kubernetes网络策略? 有几家公司正在将他们的整个基础设施转移到Kubernetes。Kubernetes的目标是抽象通常在现代IT数据中心中找到的所有组件。因此,pods表示计算实例,
架构师研究会
2020/09/10
1.1K0
「容器平台」Kubernetes网络策略101
云计算网络技术内幕 (16) 壮志未酬的安德罗波夫
在上期,我们介绍了CNI所需要实现的命令字和接口。常见的开源CNI实现有flannel和calico。
用户8289326
2023/09/06
3230
云计算网络技术内幕 (16) 壮志未酬的安德罗波夫
相关推荐
容器网络硬核技术内幕 (22) 安全与自由兼顾
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档