Kubernetes Service是一种抽象,它定义了Pod逻辑集合和访问它们的策略。Service允许您通过单个服务访问一组Pod,而不必担心后端Pod的变化。
Service的主要作用:
- 为一组具有相同功能的Pod提供一个统一的入口地址。
- 负载均衡并分发服务请求到Pod上。
- 隔离后端Pod的变化对客户端的影响。客户端只识别Service地址。
- 提供Service发现能力,使Pod可以找出它需要交互的Service地址。
Service类型主要有三种:
- ClusterIP: 在集群内部公开服务,自动分配一个仅集群内部可以访问的虚拟IP。这是默认类型。
- NodePort: 在每个节点上开放一个端口,然后使用 : 来联系服务。
- LoadBalancer:创建一个外部负载均衡器,并为Service分配一个固定的外部IP。
一个简单的Service定义如下:
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
selector:
app: MyApp
ports:
- protocol: TCP
port: 80
targetPort: 9376
这个定义一个selector为”app=MyApp”的Service,端口为80,目标端口为容器的9376端口。
所以,Service主要作用是提供以下能力:
- 服务发现:通过环境变量和DNS以及API可以发现Service地址。
- 负载均衡:将请求均衡分发给Service后端的多个Pod。
- 支持动态伸缩:Service会自动发现和绑定新创建的Pod,并从绑定中删除被删除的Pod。
要理解Service,主要需要掌握:
- 3种Service类型及其作用。
- Service选择Pod的Selector机制。
- Service工作流程:创建一个Service,将产生什么资源和行为。
- 会编写和创建不同类型的Service定义。
- 会使用Label和Selector机制设计Service与Pod的对应关系。
- 理解Service如何实现服务发现与负载均衡的。
- 掌握Service的限制和注意事项。
理解Service对于熟练使用Kubernetes至关重要。它抽象了Pod,为微服务架构中的服务提供了统一入口和动态扩展能力。服务发现和负载均衡是微服务体系结构中的两个关键能力,而Kubernetes Service正是提供这两项功能的重要手段。