Kubernetes 中有很多概念,理解这些概念是用好 k8s 的基础,之前在博问中提问过 如何简单易记地理解 k8s 中的 pod 概念 ,今天问一下如何理解 Service 的概念。
在 A friendly introduction to Kubernetes 这篇文章中是这么解释的:
Service is used to define a logical set of Pods and related policies used to access them.
微服务中的一个服务。
开发视角:服务=服务名:端口号就可以定位一个服务。
运维视角:再加一个服务IP(VIP一旦创建出来就不会变了)、背后一堆Pod IP、或者手动指定一个外部一个endpoint(比如db,或者外部服务)。
完整视角:k8s的服务是一个提供了服务发现,负载均衡(可以用默认的,也可以自己处理)机制的一个概念。
对于内部服务的消费方:比如是http服务,那么就是一个http://api:80
。
对于需要公开到集群外部:通常使用ingress或者搭配外部的lb,或者直接映射到集群机器上某个端口号
今天在 stackoverflow 上看到了一句话,从网络角度解释了 service ,对我理解 service 帮助很大:
The portal network (aka service network, cluster network) has no network interface but is a collection of iptables rules managed by kube-proxy.
@dudu: 一语道出了底层实现的原理
发现一篇讲解 Service 的好文:Load balancing and scaling long-lived connections in Kubernetes
An introduction to Kubernetes中的一个解释:
A Kubernetes Service provides you with a stable endpoint which can be used to direct traffic to the desired Pods even as the exact underlying Pods change due to updates, scaling, and failures.