Kubernetes 入门实战课
罗剑锋
Kong 高级工程师,Nginx/OpenResty 开源项目贡献者
19527 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 41 讲
Kubernetes 入门实战课
15
15
1.0x
00:00/00:00
登录|注册

31|网络通信:CNI是怎么回事?又是怎么工作的?

你好,我是 Chrono。
到现在,我们对 Kubernetes 已经非常熟悉了,它是一个集群操作系统,能够管理大量计算节点和运行在里面的应用。不过,还有一个很重要的基础知识我们还没有学习,那就是“网络通信”。
早在“入门篇”的第 6 讲里,我们就简单介绍过 Docker 的网络模式,然后在“中级篇”的第 17 讲,我们又为 Kubernetes 安装了一个网络插件 Flannel。这些都与网络相关,但也只是浅尝辄止,并没有太多深究。
如果你是一个喜欢刨根问底的人,会不会很好奇:Flannel 到底是如何工作的呢?它为什么能够让 Kubernetes 集群正常通信呢?还有没有其他网络插件呢?
今天我们就来聊一下这个话题,讲讲 Kubernetes 的网络接口标准 CNI,以及 Calico、Cilium 等性能更好的网络插件。

Kubernetes 的网络模型

在学习 Kubernetes 的网络之前,我们还是要先简单回顾一下 Docker 的网络知识。
你对 Docker 的 null、host 和 bridge 三种网络模式还有印象吗?这里我重新画了一张图,描述了 Docker 里最常用的 bridge 网络模式:
Docker 会创建一个名字叫“docker0”的网桥,默认是私有网段“172.17.0.0/16”。每个容器都会创建一个虚拟网卡对(veth pair),两个虚拟网卡分别“插”在容器和网桥上,这样容器之间就可以互联互通了。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

Kubernetes网络通信的关键在于CNI,它定义了一系列通用接口,使得开发者可以接入Kubernetes,为Pod创建虚拟网卡、分配IP地址、设置路由规则,最终实现“IP-per-pod”网络模型。根据实现技术的不同,CNI插件可以分为“Overlay”、“Route”和“Underlay”三种类型。Flannel是一种Overlay模式的网络插件,虽然简单易用,但在性能方面表现一般。相比之下,Calico和Cilium采用Route模式和混合模式,支持多种网络策略,并具备数据加密、安全隔离、流量整形等功能。Cilium在2021年加入CNCF,成为了孵化项目,展现出非常有前途的发展前景。Kubernetes的网络模型“IP-per-pod”摆脱了主机的硬限制,实现了“平坦”的网络模型,使得通信简单直连,同时也很好地适应了集群系统的网络需求。文章通过对Flannel和Calico的工作方式进行比较,展现了Kubernetes网络传输过程的复杂性和CNI插件的重要性。

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

全部留言(14)

  • 最新
  • 精选
  • Obscure
    网络基础不行,这一节内容基本看不懂。。。咋整。。。

    作者回复: 没事,我的网络基础也很差,如果不是专门做网络的了解个大概就行了。

    2022-09-07归属地:上海
    3
    7
  • dao
    试着思考了一下: 1,定义规范/标准,也就是接口(interface),把具体实现/扩展交给社区/第三方,然后使用插件(addon)的方式在 Kubernets 里应用,这真是个省力的方式!不需要去关注千变万化的底层运行环境。 2,Flannel 默认是 Overlay 模式基于Linux VxLan,数据包在跨节点间传输有封包和拆包的额外步骤,同节点的 Pod 间数据传输直接通过虚拟网桥,比如 cni0;不同节点的 Pod 间的数据传输需要借助 Flannel.1 (VTEP virtual tunnel endpoint) 分发。 Calico 也有多种工作模式,默认是 IPinIP,同节点的 Pod 间直接通过虚拟网卡结合路由表传输,跨节点间的 Pod 需要IP层的封装,数据包通过IP隧道传输,如 tunl0。多节点间的路由通过BGP协议共享。 在节点上抓包观察同节点 Pod 和 跨节点 Pod 数据传输: ```bash kubectl exec -it ngx-dep-bfbb5f64b-87sm4 -- curl 10.244.225.25 sudo tcpdump -n -s0 -i any host 10.244.225.25 kubectl exec -it ngx-dep-bfbb5f64b-87sm4 -- curl 10.244.185.207 sudo tcpdump -n -s0 -i any host 10.244.185.207 ```

    作者回复: great。

    2022-10-04归属地:北京
    6
  • Frank
    生产环境建议用哪个网络插件呢?

    作者回复: 也不能一概而论,如果性能够用flannel就可以了,如果要强调性能还有其他的网络管理需求就可以用calico。

    2022-09-09归属地:北京
    4
  • 杨丁
    老师好,您画图用的啥工具啊

    编辑回复: 画分析图用的亿图图示或者keynote,思维导图用的Xmind

    2022-09-06
    4
  • Singin in the Rain
    1、Mac VirtualBox ubuntu 22.04虚拟机环境安装Calico网络插件时,也需要指定网卡。如果enp0s3为Host-Only模式的网卡,enp0s8为NAT网络模式网卡。Flannel和Calico默认使用了enp0s8,所有虚拟机节点enp0s8网卡的IP地址是一样的,会导致冲突,Calico具体表现为calico-node只能启动一个,其他的为crashloopbackoff。因此安装的时候需要指定网卡为Host-Only模式的网卡enp0s3。详见链接:https://www.cnblogs.com/xiaohaoge/p/16953849.html 2、安装Calico或者Flannel过程中意外导致失败,需要清除一下网络插件的安装信息,重启kubelet。 rm -rf /etc/cni/net.d/* rm -rf /var/lib/cni/calico systemctl restart kubelet 详见链接:https://cloud.tencent.com/developer/article/1820462 如果还不能正常工作,需要检查一下coredns服务,然后重启dns服务: kubectl -n kube-system rollout restart deployment coredns

    作者回复: great

    2023-06-20归属地:广东
    1
  • Lorry
    老师,好像启用了calico之后,发现grafana以及Prometheus只能在pod所在的节点访问,其他节点都无法访问grafana页面以及Prometheus页面

    作者回复: 应该不会吧,calico只是cni插件,不影响应用才对,可能是其他的原因。

    2023-07-30归属地:四川
  • 糊涂小孩123
    /opt/cni/bin里的flannel跟以ds部署的flanneld是怎么个关系呢?这块原理是如何的

    作者回复: 这个比较底层,没有太细研究过,说错请见谅。 /opt/cni/bin里的flannel应该是操作系统级别的,配合Kubernetes里的flanneld一起构建Kubernetes的网络。 flanneld 管理容器网络连接,把容器的 IP 地址和 DNS 名称映射到 Kubernetes 集群中的 IP 地址和 DNS 名称上。

    2023-06-02归属地:广东
  • Lorry
    hostNetwork是不是属于underlay?

    作者回复: 它是kubernetes的一个属性定义,与cni没有关系。

    2023-02-10归属地:辽宁
  • 摊牌
    引用原文 : "这里我重新画了一张图,描述了 Docker 里最常用的 bridge 网络模式:" 该图中的最下方的位置,ens160是表示啥?请老师帮忙解答下,谢谢

    作者回复: 是虚拟机的网卡。

    2023-01-29归属地:陕西
  • 明月夜
    老师好,在节点上(在Pod外)好像也是能访问某个Pod的ip的,这种情况的IP寻址是不是也和在Pod里面的寻址一样?

    作者回复: 应该是一样的,都是一个网络模型,这个还没仔细看过。

    2022-09-18归属地:北京
收起评论
显示
设置
留言
14
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部