告诉它我需要为这个 IP 进行负载均衡分发,后面的参数就是一些分发策略等等 。virtual server 的 IP 其实就是我们的 Cluster IP 。
- 第 3 步,为这个 IPVS service 创建相应的 real server 。
啥?负载均衡还分内部外部
最后我们介绍一下 Service 的类型,可以分为以下 4 类 。
1. ClusterIP集群内部的一个虚拟 IP,这个 IP 会绑定到一堆服务的 Group Pod 上面,这也是默认的服务方式 。它的缺点是这种方式只能在 Node 内部也就是集群内部使用 。
2. NodePort供集群外部调用 。将 Service 承载在 Node 的静态端口上,端口号和 Service 一一对应,那么集群外的用户就可以通过 <NodeIP>:<NodePort> 的方式调用到 Service 。
3. LoadBalancer给云厂商的扩展接口 。像阿里云、亚马逊这样的云厂商都是有成熟的 LB 机制的,这些机制可能是由一个很大的集群实现的,为了不浪费这种能力,云厂商可通过这个接口进行扩展 。它首先会自动创建 NodePort 和 ClusterIP 这两种机制,云厂商可以选择直接将 LB 挂到这两种机制上,或者两种都不用,直接把 Pod 的 RIP 挂到云厂商的 ELB 的后端也是可以的 。
4. ExternalName摈弃内部机制,依赖外部设施,比如某个用户特别强,他觉得我们提供的都没什么用,就是要自己实现,此时一个 Service 会和一个域名一一对应起来,整个负载均衡的工作都是外部实现的 。
下图是一个实例 。它灵活地应用了 ClusterIP、NodePort 等多种服务方式,又结合了云厂商的 ELB,变成了一个很灵活、极度伸缩、生产上真正可用的一套系统 。
文章插图
首先我们用 ClusterIP 来做功能 Pod 的服务入口 。大家可以看到,如果有三种 Pod 的话,就有三个 Service Cluster IP 作为它们的服务入口 。这些方式都是 Client 端的,如何在 Server 端做一些控制呢?
首先会起一些 Ingress 的 Pod(Ingress 是 K8s 后来新增的一种服务,本质上还是一堆同质的 Pod),然后将这些 Pod 组织起来,暴露到一个 NodePort 的 IP,K8s 的工作到此就结束了 。
任何一个用户访问 23456 端口的 Pod 就会访问到 Ingress 的服务,它的后面有一个 Controller,会把 Service IP 和 Ingress 的后端进行管理,最后会调到 ClusterIP,再调到我们的功能 Pod 。前面提到我们去对接云厂商的 ELB,我们可以让 ELB 去监听所有集群节点上的 23456 端口,只要在 23456 端口上有服务的,就认为有一个 Ingress 的实例在跑 。
整个的流量经过外部域名的一个解析跟分流到达了云厂商的 ELB,ELB 经过负载均衡并通过 NodePort 的方式到达 Ingress,Ingress 再通过 ClusterIP 调用到后台真正的 Pod 。这种系统看起来比较丰富,健壮性也比较好 。任何一个环节都不存在单点的问题,任何一个环节也都有管理与反馈 。
本文总结
本节课的主要内容就到此为止了,这里为大家简单总结一下:
- 大家要从根本上理解 Kubernetes 网络模型的演化来历,理解 PerPodPerIP 的用心在哪里;
- 网络的事情万变不离其宗,按照模型从 4 层向下就是发包过程,反正层层剥离就是收包过程,容器网络也是如此;
- Ingress 等机制是在更高的层次上(服务<->端口)方便大家部署集群对外服务,通过一个真正可用的部署实例,希望大家把 Ingress+Cluster IP + PodIP 等概念联合来看,理解社区出台新机制、新资源对象的思考 。
【Kubernetes 网络模型来龙去脉】
推荐阅读
- H3C网络设备环路检测详细说明及配置
- Android中的 eBPF 流量监控
- 网络许可证|10分钟搞定ICP、EDI、SP、IDC、ISP、VPN、呼叫中心
- 如何使用 firewall-cmd 管理网络服务
- 轻松学习http知识让枯燥的内容变得生动有趣:TCP/IP四层模型
- 黑客泄露了暗网网络托管提供商DH的数据库
- 让你的无线wifi网络无人可破!
- 一起了解网络域名的由来
- 初级入门IT网络工程师?收下这份关于NTP网络时间协议解读 纯干货
- 网络知识扫盲,一文搞懂 DNS