Kubernetes Service机制
容器网络模型讲完后,我们再看下K8S集群内访问的Service机制。先从一个简单的例子讲起,客户端访问容器应用,最简单的方式莫过于直接容器IP+端口了。
但,简单的生活总是暂时的。
当有多个后端实例,如何做到负载均衡?如何保持会话亲和性?容器迁移,IP发生变化如何访问?健康检查怎么做?怎么通过域名访问?
K8S提供的解决方案是在客户端和后端Pod之间引入一个抽象层:Service。什么是K8S的Service呢?
K8S的Service有时候也称为K8S的微服务,代表的是K8S后端服务的入口,它注意包含服务的访问IP(虚IP)和端口,因此工作在L4。既然Service只存储服务入口信息,那如何关联后端Pod呢?Service通过Label Selector选择与之匹配的Pod。那么被Service选中的Pod,当它们Running且Ready后,K8S的Endpoints Controller会生成一个新的Endpoints对象,记录Pod的IP和端口,这就解决了前文提到的后端实例健康检查问题。另外,Service的访问IP和Endpoint/Pod IP都会在K8S的DNS服务器里存储域名和IP的映射关系,因此用户可以在集群内通过域名的方式访问Service和Pod。