31|网络通信:CNI是怎么回事?又是怎么工作的?
Kubernetes 的网络模型
- 深入了解
- 翻译
- 解释
- 总结
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归属地:上海37 - 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-064 - Singin in the Rain1、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归属地:广东 - LorryhostNetwork是不是属于underlay?
作者回复: 它是kubernetes的一个属性定义,与cni没有关系。
2023-02-10归属地:辽宁 - 摊牌引用原文 : "这里我重新画了一张图,描述了 Docker 里最常用的 bridge 网络模式:" 该图中的最下方的位置,ens160是表示啥?请老师帮忙解答下,谢谢
作者回复: 是虚拟机的网卡。
2023-01-29归属地:陕西 - 明月夜老师好,在节点上(在Pod外)好像也是能访问某个Pod的ip的,这种情况的IP寻址是不是也和在Pod里面的寻址一样?
作者回复: 应该是一样的,都是一个网络模型,这个还没仔细看过。
2022-09-18归属地:北京