Kubernetes网络模型原理
导语:
Kubernetes目前看来已经成为了docker的应用最多的编排工具,所以学习使用docker容器的话,就免不了使用Kubernetes,但是其网络原理还是比较晦涩难懂,所以还是有必要专门解析关于Kubernetes的网络原理。
Kubernetes的网络模型组成
1.Pod内部docker容器之间网络通信[基础docker网络理论]
2.Pod所在的网络之间通信[基础docker网络理论]
3.Pod和Service之间网络通信[Kubernetes网络理论]
4.外界与Service之间网络通信[Kubernetes网络理论]
Pod内部docker容器之间网络通信
Kubernetes使用了一种“IP-per-pod”网络模型:为每一个Pod分配了一个IP地址,Pod内部的docker容器共享Pod的网络空间,即它们共享Pod的网卡和IP。其原理是根据docker的“container网络”模型而来。
Pod所在的网络之间通信
Kubernetes把各node主机上的docker的bridge网络“外包”给了flannel,然后通过etcd将各node主机上的bridge网络信息收集起来,因此每个node之间的网络使用的是同网络的不同IP,保证了网络通讯的可靠性。其原理是根据docker的“bridge网络”模型而来。
Pod和Service之间网络通信
在Kubernetes体系中Pod是不稳定的,Pod的IP地址会发生变化,所以Kubernetes引进了Service的概念。Service是一个抽象的实体,Kubernetes在创建Service实体时,为其分配了一个虚拟的IP,当外界需要访问Pod里的容器提供的功能时,不直接使用Pod的IP地址和端口,而是访问Service的这个虚拟IP和端口,由Service把请求转发给它背后的Pod。Kubernetes在创建Service时,根据Service的标签选择器(Label Selector)来查找Pod,据此创建与Service同名的EndPoints对象。当Pod的地址发生变化时,EndPoints也随之变化。Service接受到请求时,就能通过EndPoints找到对应的Pod。再深入探究,Service只是一个虚拟的概念,真正完成请求转发的是运行在node节点上的kube-proxy。Service的虚拟IP就是由kube-proxy实现的。kube-proxy有两种请求转发模式:userspace模式和iptables模式。在Kubernetes v1.1版本之前默认是userspace模式,v1.2版本后默认是iptables模式。
补充说明iptables模式:
当创建Service时,所有node节点上的kube-proxy都会建立两级iptables规则,一级为Service创建,目的是将<服务虚拟IP,端口>的流量转给后端,另一级为EndPoints创建,目的是用于选择Pod。当service.spec.sessionAffinity值为”ClientIP”时,iptables模式选择Pod的算法和userspace模式相同(选择与请求来源IP更接近的Pod)。当service.spec.sessionAffinity值为”None”时,随机选择Pod,所以如果被选择的Pod没有响应,不会尝试选择另一个Pod。
外界与Service之间网络通信
①ClusterIP类型,这种类型的Service只会得到虚拟的IP和端口,只能在Kubernetes集群内部被访问,此模型是为默认类型。
②NodePort类型,这种类型的Service除了会得到虚拟的IP和端口,Kubernetes还会在所有node节点上为其分配端口。分配的端口的值可以通过spec.ports[*].nodePort指定,或由Knubernetes在配置好的区间里分配(默认为30000-32767)。这种Service即可以从Kubernetes集群通过虚拟IP:端口访问,也可以从集群外部通过Node节点的IP:nodePort访问。
③LoadBalancer类型,这种类型的Service除了会得到虚拟的IP和端口,Kubernetes还会在所有Node节点上为其分配端口,然后为其开通负载均衡。这种Service即可以从Kubernetes集群通过虚拟IP:端口访问,也可以从集群外部通过node节点的IP:nodePort访问,还可以通过负载均衡的IP访问。
总结
Kubernetes网络模型的理解会对使用第三方产商提供的服务有更深刻的体会,比如阿里云,华为云都已经全面支持Kubernetes的编排。其中涉及了很多Kubernetes的基本原理,回过头来仔细想想,也无非是万变不离其宗。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
docker容器基本操作
启动交互式容器 docker run -i -t image /bin/bash exit 退出 查看容器 docker ps [-a] [-l] docker ps 在运行的容器 docker ps -a 所有的容器 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES dc399ca6c79d youdi-nginx-image "nginx -g 'daemon ..." 7 months ago Exited (0) 7 months ago test 50588da5b273 nginx "nginx -g 'daemon ..." 7 months ago Up 7 months 0.0.0.0:8080->80/tcp youdi-nginx 查看详情 docker inspect dc399ca6c79d docker inspect test 自定义容器的名字 docker run --name=contain01 -i -t ubuntu /bin/bash 重启启动停止的容器 docker start -...
- 下一篇
突破平台“锁定”痛点,享受 Docker 自由操控
本文首发自“Docker公司”公众号(ID:docker-cn)编译丨小东每周一、三、五 与您不见不散! 诸如数字化和云迁移等企业主要业务已经受到威胁,它破坏了那些仅将核心业务展开的 IT 组织。容器化被视为帮助这些主要业务的一种方式,因为它可以加速软件的交付速度,并且在第一年就可以缩减超过 50% 以上的运营成本。为了支持容器化战略,越来越多的企业正在转向容器平台,从开发到生产环境来管理和保护核心软件的交付情况。 对于客户来说,选择合适的容器平台不仅仅是一个技术层面上的决策,这更是一个商业层面上的决策。与所有同类型的决策一样,容器解决方案需要具备灵活性 —— 即随业务需求的变化而变化,这一点至关重要。糟糕的是,所有的容器平台都各不相同,有些平台缺乏安全性,而另一些则会迫使组织使用规定的运营模式。更糟糕的是,大多数容器平台会把组织“锁定”在某一个系统、某一个云端、某一种应用程序类型、某一种开发环境中,这导致了 CIO 们在不到两年的时间里就纷纷放弃了这条没有出路的死胡同。 那么,组织要如何通过现代技术来应对各种系统和应用程序的自由组合,同时保持独立性和打破“锁定”呢? Docker 企...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
-
Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8编译安装MySQL8.0.19
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
推荐阅读
最新文章
- SpringBoot2全家桶,快速入门学习开发网站教程
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- MySQL8.0.19开启GTID主从同步CentOS8
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2整合Redis,开启缓存,提高访问速度
- Windows10,CentOS7,CentOS8安装Nodejs环境
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果