kubernetes权威指南读书笔记-Serivce的ClusterIP地址
EndPoint:由POD的IP加上容器的端口构造;它表示POD里的一个服务进程对外的通信地址;一个POD也存在多个ENDPOINT的情况。
Kuernetes Service的一个功能就是实现负载均衡。它是这样来实现的,kubernetes内部在每个Node上都运行了一套全局的虚拟负载均衡器,自动注入并自动实时更新集群中所有Service的路由表,通过iptables或者IPVS机制,把对Serivces的请求转发到其后端对应的某个POD实例上,并在内部实现服务的负载均衡与会话保持机制。结合ClusterIP,每个服务就具备了唯一IP地址的通信节点,远程服务之间的通信问题就变成了基础的TCP网络通信问题。
ClusterIP具有这些特征:
- 在Service的整个生命周期中,其地址不会发生改变;
- 是一种虚拟的IP地址;
- 仅作用于kubernetes service这个对象,并由kubernetes管理和分配IP地址(来源于ClusterIP地址池),与Node和master所在的物理网络完全无关;
- ClusterIP无法被ping通,clusterIP只能与ServicePort组成一个具体的服务访问点,单独的ClusterIP不具备TCP/IP通信的基础;
- ClusterIP属于kubernetes集群这个封闭的空间,集群外的节点要访问这个通信端口,则需要做一些额外的工作;如设置为NodePort类型;
HeadLess Service:在Service的定义中设置了cluserIP:None;它与普通的Service区别在于没有clusterIP,如果解析HeadLess service的DNS域名,则返回的是该Service对应的全部POD的Endpoint列表,意味着客户端是直接与后端的POD建立TCP/IP连接进行通信的,没有通过虚拟ClusterIP地址进行转发,因此通信性能最高,等同于“原生网络通信”。
Service的多端口问题:由于kubernetes service支持多个endpoint,在这种情况下,就要求每个Endpoint都定义一个名称进行区分。
Service的外网访问问题:
讲解这个概念之前需要明确三个类型的IP地址
- Node IP:Node的IP地址;它是节点的物理网卡地址;
- Pod IP: POD的IP地址;它是Docker Engine分配的地址;
- Service IP:service的IP地址;
NodePort的实现方式是,在kubernetes集群的每个Node上都为需要外部访问的Service开启一个对应的TCP监听端口,外部系统只要用任意一个Node的IP地址+NodePort端口号即可访问此服务。但是这种在每个Node上开启TCP监听端口的方式,又造成了占用Node有限端口资源的问题,对此引入了Ingress,使得多个Service共用一个对外端口。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了