kubernetes权威指南读书笔记-Serivce的ClusterIP地址

发布时间 2023-09-12 20:41:43作者: GaoYanbing

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共用一个对外端口。