在kubernetes中,还有一个大家常听到的词叫做service。这个service其实和java里面的微服务的服务发现是个概念。举个例子:
现在有一个10个工作节点的kubernetes集群,然后我们在里面启动1个nginx的Deployment的pod,然后副本设置为3,那么在整个集群中就会运行3个pod的nginx服务,此时这3个nginx对应的服务器节点位置是随机的,因此我们也无法确定nginx具体的ip地址。那么这个时候如果需要对外提供访问怎么办呢?有的同学可能会说,我在外部启动一个nginx,然后配置下upstream为3个pod的实际访问地址就可以了。这样的做法比较传统,但是也没毛病。但是想一下,如果此时某个节点挂掉了,nginx的副本就不满足3个,那此时kubernetes集群会自动再创建一个pod,那这时候我们是不是需要手动的修改nginx的upstream呢?是不是很麻烦。
为了解决上面这种案例,kubernetes里面就提供了一个叫做service的东西,它是kubernetes里面的一个api对象。当我们定义一个service之后,那么可以把pod注册到这个service上,然后通过service对外提供服务给调用者,此时调用者直接访问service,然后service把访问转发给后端的pods集群。示意图如下:
从上图可以看出,service算作是kubernetes提供的一种服务发现的机制,他有如下几个特点:
1、Pod 有自己的 IP 地址 2、Service 被赋予一个唯一的 dns name 3、Service 通过 label selector 选定一组 Pod 4、Service 实现负载均衡,可将请求均衡分发到选定这一组 Pod
还没有评论,来说两句吧...