深入剖析 Kubernetes
张磊
Kubernetes 社区资深成员与项目维护者
116708 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 57 讲
再谈开源与社区 (1讲)
结束语 (1讲)
深入剖析 Kubernetes
15
15
1.0x
00:00/00:00
登录|注册

36 | 为什么说Kubernetes只有soft multi-tenancy?

实际作用
编写NetworkPolicy
发展方向
中间层
隔离原理
iptables规则
作用
示例
定义
容器之间网络的“隔离”
容器之间网络的“连通”
思考题
Kubernetes的定位
CNI网络插件实现NetworkPolicy
NetworkPolicy
Kubernetes网络模型
为什么说Kubernetes只有soft multi-tenancy?

该思维导图由 AI 生成,仅供参考

你好,我是张磊。今天我和你分享的主题是:为什么说 Kubernetes 只有 soft multi-tenancy?
在前面的文章中,我为你详细讲解了 Kubernetes 生态里,主流容器网络方案的工作原理。
不难发现,Kubernetes 的网络模型,以及前面这些网络方案的实现,都只关注容器之间网络的“连通”,却并不关心容器之间网络的“隔离”。这跟传统的 IaaS 层的网络方案,区别非常明显。
你肯定会问了,Kubernetes 的网络方案对“隔离”到底是如何考虑的呢?难道 Kubernetes 就不管网络“多租户”的需求吗?
接下来,在今天这篇文章中,我就来回答你的这些问题。
在 Kubernetes 里,网络隔离能力的定义,是依靠一种专门的 API 对象来描述的,即:NetworkPolicy。
一个完整的 NetworkPolicy 对象的示例,如下所示:
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
我在和你分享前面的内容时已经说过(这里你可以再回顾下第 34 篇文章Kubernetes 网络模型与 CNI 网络插件中的相关内容),Kubernetes 里的 Pod 默认都是“允许所有”(Accept All)的,即:Pod 可以接收来自任何发送方的请求;或者,向任何接收方发送请求。而如果你要对这个情况作出限制,就必须通过 NetworkPolicy 对象来指定。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

Kubernetes网络隔离与NetworkPolicy实现原理 本文深入探讨了Kubernetes网络模型中的软多租户特性以及如何通过NetworkPolicy实现网络隔离。Kubernetes的网络方案注重容器之间的网络“连通”,而非“隔离”,因此被称为soft multi-tenancy。文章介绍了NetworkPolicy对象的定义和规则,以及网络插件如Calico和kube-router是如何通过生成iptables规则实现对Pod的隔离。同时,强调了要使NetworkPolicy在Kubernetes集群中生效,必须使用支持NetworkPolicy的CNI网络插件。此外,文章还提到了Flannel项目不支持NetworkPolicy,因此在使用Flannel的同时需要额外安装支持NetworkPolicy的网络插件。 在技术细节方面,文章详细解释了Linux内核中Netfilter设置的流入路径、流出路径和转发路径,以及iptables表的作用和工作原理。进一步阐述了CNI网络插件如何通过设置iptables规则实现对Pod的流入请求的拦截和隔离,以及如何判断允许或拒绝数据包的传输。最后,强调了不同的CNI网络插件可能采用不同的实现方式,但根本原理是相似的。 总之,本文通过深入剖析Kubernetes网络隔离的技术细节,为读者提供了对NetworkPolicy实现原理的全面了解,使其能够快速掌握Kubernetes网络隔离的关键概念和实现方法。 文章深入剖析了Kubernetes网络隔离的技术细节,介绍了软多租户特性和NetworkPolicy实现原理。强调了CNI网络插件的重要性,以及不同插件的实现方式。读者能够快速了解Kubernetes网络隔离的关键概念和实现方法。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《深入剖析 Kubernetes》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(35)

  • 最新
  • 精选
  • 风轨
    job,cronjob这类计算型pod不需要也不应该对外提供服务,可以拒绝所有流入流量,提高系统安全。

    作者回复: 对

    2018-11-14
    121
  • swordholder
    iptables -A FORWARD -d $podIP -m physdev --physdev-is-bridged -j KUBE-POD-SPECIFIC-FW-CHAIN 文中提到,上面这条iptables规则的作用是:“拦截”在同一个宿主机、接入同一个bridge上的容器发送过来的数据包。 iptables设置的是IP包被过滤处理的规则,而bridge是二层设备,数据包在bridge上的流动,如果受到上面规则的控制,就是说iptables还能设置二层链路的过滤规则?

    作者回复: 文中提了,实际有ebtables的参与

    2018-11-14
    12
  • po
    老师你好,我想确认下基于ovs的网络,是不是不用iptables了,使用openflow实现networkpolicy,使用vni实现多租户,谢谢。

    作者回复: iptables 在svc还会用到

    2019-05-14
    3
  • OldGood
    老师,什么时候讲ingress?

    作者回复: 很快

    2018-11-15
    1
  • johnson.skiii
    张大请教一下;本来kube-proxy就会写大量的iptables规则,如果网络情况复杂,实施的networkpolicy又多的话,那么iptables会不会成为比较大的瓶颈,有什么好的解决方案吗?
    2018-12-17
    5
    17
  • helloworld
    文章中对iptables的讲解, 是我见过的对iptables讲解的最好的一个, 厉害
    2021-02-18
    13
  • CYH
    hi,老师:请问我安照k8s官网拒绝所有进出流量,为什么该pod还是能ping通外部的ip呢?
    2018-11-29
    2
    4
  • Jerome
    2021-11-23,第四遍学习打卡。
    2021-11-23
    2
    3
  • lfn
    2020-04-06,打卡。
    2020-04-06
    3
  • heartbeat
    任何 Namespace 里的、携带了 project=myproject 标签的 Pod; namespaceselector应该是选择namespace的吧,project=myproject这个标签应该是匹配namespace的而不是匹配pod的,所以上面那个解释应该是携带了project=myproject 标签的所有namespace下的所有pod 不知道这个理解是否正确
    2019-07-27
    2
    2
收起评论
显示
设置
留言
35
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部