kubernets 集群里面有很多pod,那不同的pod 之间是怎么通信的呢?就是通过服务来通信的
2.1 什么是服务
服务是kubernets 的一个抽象概念,它定义了一个pod的逻辑集合以及访问这个逻辑集合的策略,有时也别称为微服务;
服务的目标是提供一种桥梁,使得飞kubernets 的原生态程序,在无需为kubernets 编写特性程序的前提下,轻松访问后端pod
服务为用户提供一对ip和port端口(因为pod 所在的节点会变化,因为各种正常、异常的原因)给其他的服务或者pod 使用,他们可以通过ip;port 轻松访问这个后端的服务pod
2.2 服务的定义
服务是通过标签选择器(label selecto) 来实现的;可以把服务当作一个标签的定义或者配置服务器,配置了pod 的ip + port 号码;每次新建pod 都会定义服务。类似 于 server 启动一个TCP 的服务进程(tcp 端口)
{
"id": "myapp", #定义一个名为myapp 的服务
"selector": { #标签是myapp
"app": "MyApp"
},
"containerPort": 9376, #容器的端口 9376
"protocol": "TCP",
"port": 8765
}
上面就是定义了一个名字为myapp的服务,使得所有标签是myapp 的pod 都监听端口 9376 的TCP 监听,其他的pod或者服务都可以通过这个端口来跟这些pod 进行通信。
2.3 服务是如何工作的
kubernets 每个节点(机器)上都一台一个代理服务(service proxy),这个service proxy 会监听 kubernets master 的任务,负责添加、删除服务以及服务对应的pod;这样每个节点的porxy 收到请求后就可以查询这个请求访问的pod 的ip 和port ,如果这pod 有很多replica 时,还负责负载均衡,把这个请求直接通过网络传输给某一个负载轻的pod处理。
下面是服务的工作原理: