service 是k8s的核心概念,通过创建service,可以为一组相同功能的容器应用提供一个统一的入口地址,并将请求负载分发到后端的各个容器应用上。
对于容器应用最简便的方式就是通过tcp/ip机制及监听ip和端口号来实现。定义一个提供web服务的RC,由两个tomcat容器副本组成,每个容器都通过containerPort设置提供服务的端口号为8080.
直接通过pod的ip地址和端口号可以访问到容器应用内的服务,但是pod的ip地址是不可靠的,例如当pod所在的node发生故障时,pod将被kubernetes重新调度到另一个node,pod的ip地址将发生变化。更重要的是,如果容器应用本身是分布式的部署方式,通过多个实例共同提供服务,就需要在这些实例的前端设置一个负载均衡器来实现请求的分发。kubernetes中的service就是用于解决这些问题的核心组件。
多端口service
在service的定义中页可以相应地设置为将多个端口对应到多个应用服务。
从集群外部访问pod或service由于pod和service都是kubernetes集群范围内的虚拟概念。所以集群外的客户端系统无法通过pod的ip地址或者service的虚拟ip地址和虚拟端口号访问它们。为了解决这个问题可以将pod,或者service的端口号映射到宿主机。