Kubernetes / 云计算

K8S中的网络实现方案

温馨提示:本文最后更新于2021-03-02 18:40:48,某些文章具有时效性,若有错误或已失效,请在下方留言或提交工单提交工单
浅时光 · 6月14日 · 2020年 · 本文967个字,预计阅读3分钟 73015次已读

Service的地址与Pod的地址是不同网段的,P文章来源(Source):浅时光博客od是配置在Pod内部网络名称空间之上的,是可以ping通的;service的地址是虚拟的,只存在于iptables的ipvs规则当中。

各节点的网段是一个网络【节点网络】,Service的网段是一个网络【集群网络】,Pod的网段是一个网络【Pod网络】;接入外部访问时,文章来源(Source):https://www.dqzboy.com先到节点网络,然后由节点网络代理至集群网络,再由集群网络代理至Pod网络。

1、一个Pod内有多个容器,同一Pod内文章来源(Source):浅时光博客的容器间如何通信?

lo通信:本地通信

2、不同宿主机上的Docker容器如何通信?

如两台宿主机上跑了2个容器,且这2个容器的内部IP是一样的,那么这2个容器之间是无法直接通信的;2个容器之间互相通信的原理是:节点1上的容器发送请求给节点2上的容器,节点1上的容器先经过SNET转换至宿主机后再发送至节点2,节点2通过DNET转换后再发送给对应的容器。

3、K8S中各Pod之间如何通信?

Overlay Network:叠加网络;通过隧道方式来转发2层网络的报文,使得不同宿主机上Pod之间可以直接互相通信。在K8S中考虑到Pod的生命周期,所以各Pod之间是不会直接通信的,而是由Service与Pod之间进行通信。

如何防止地址冲突?

  • 在每台宿主机上建立docker0桥时可以设置不同的网段,比如节点1设置172.17.1.x,节点2设置172.17.2.x,通过不同的网段来防止地址冲突。

4、Service与Pod之间如何通信?

  • Service与Pod属于不同的网络,如何直接通信?

Service的地址为宿主机上的iptables规则上的地址,容器只需要把报文的目标地址指向网关【一般为docke文章来源(Source):浅时光博客r0桥的地址】即可;每个宿主机上都得有相关的iptables或ipvs规则。

  • 如果Pod发生改变了,Service如何知道?
文章来源(Source):https://www.dqzboy.com

靠标签选择器来反映

  • Service如何改变所有节点上的iptables或ipvs规则呢?

每个Node节点上运行一个专门的组件,这个组件是每个Node节点上的守护进程,这个组件为kube-proxy;

注:以上网络方案在K8S本身是不提供的,而是依赖于第三方插件来实现;K8S通过CNI插件体系,来接入外部服务的网络解决方案,CNI:容器网络接口。目前K8S中用的最多的网络插件为flannel。




关注本站官方微信公众号『精彩程序人生』

扫描左侧二维码关注我们的微信公众帐号,在微信公众帐号中回复【资料】即可获取各类互联网技术学习资料。
关注博主不迷路~


本文作者:浅时光
原文链接:https://www.dqzboy.com/2689.html
版权声明:知识共享署名-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)协议进行许可
转载时请以超链接形式标明文章原始出处和作者信息
免责声明:本站发布的内容(图片、视频和文字)以及一切破解补丁、注册激活和软件解密分析文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。访问和下载本站内容,说明您已同意上述条款!


3 条回应

必须 注册 为本站用户, 登录 后才可以发表评论!

  1. Andy未知2020-9-7 · 1:34

    这下明白了

  2. God未知2020-8-13 · 23:09

    感谢,学习到了

  3. happy未知2020-6-17 · 19:38

    学习了

本站已稳定运行: | 耗时 0.426 秒 | 查询 17 次 | 内存 40.72 MB