Skip to content

1.Service

​ Service,是Kubernetes用来实现Pod负载均衡的一个服务;要想实现Pod的负载均衡,首先需要通过labels为Pod打上特定的标签,而后创建Service时使用Selector选择对应的标签,最终通过节点的kube-proxy来完成负载均衡的规则创建

image-20240123135851549

shell
#iptables\ipvs规则
iptables -t nat -d serviceIP -j DNAT podIP1
#iptables\ipvs规则
iptables -t nat -d serviceIP -j DNAT podIP1

1.1Service概述

​ Service定义了一个服务的访问入口地址,前端应用通过这个入口地址访问其背后的一组由Pod副本组成的集群实例,Service与其后端的Pod副本集群之间是通过Label Selector来实现“无缝对接”。RC保证Service的Pod副本实例数目保持预期水平.

1.2kubernetes的服务发现机制

主要通过kube-dns这个组件来进行DNS方式的服务发现

1.3外部系统访问Service的问题

IP类型说明
Node IPNode节点的IP地址
Pod IPPod的IP地址
Cluster IPService的IP地址

Node IP

NodeIP是集群中每个节点的物理网卡IP地址,是真实存在的物理网络,kubernetes集群之外的节点访问kubernetes内的某个节点或TCP/IP服务的时候,需要通过NodeIP进行通信。

Pod IP

Pod IP是每个Pod的IP地址,是Docker Engine根据docker0网桥的IP段地址进行分配的,是一个虚拟二层网络,集群中一个Pod的容器访问另一个Pod中的容器,是通过Pod IP进行通信的,而真实的TCP/IP流量是通过Node IP所在的网卡流出的

Cluster IP

1.Service的Cluster IP是一个虚拟IP,只作用于Service这个对象,由kubernetes管理和分配IP地址(来源于Cluster IP地址池)。

2.Cluster IP无法被ping通,因为没有一个实体网络对象来响应。

3.Cluster IP结合Service Port组成的具体通信端口才具备TCP/IP通信基础,属于kubernetes集群内,集群外访问该IP和端口需要额外处理。

4.k8s集群内Node IP 、Pod IP、Cluster IP之间的通信采取k8s自己的特殊的路由规则,与传统IP路由不同

1.4外部访问Kubernetes集群

通过宿主机与容器端口映射的方式进行访问,例如:Service定位文件如下:

可以通过任意Node的IP 加端口访问该服务。也可以通过Nginx或HAProxy来设置负载均衡。