Service 是什么
Service 为一组实例提供稳定的虚拟地址与域名:它靠标签选择器绑定后端实例,实例增删时后端列表自动维护。四种类型对应不同的暴露范围,从集群内部访问到对外提供入口都有对应做法,是集群内服务发现与流量入口的基础对象。
基本信息
| 作用 | 为标签匹配的一组实例提供固定地址与名字,屏蔽实例变化 |
|---|---|
| 四种类型 | 集群内部地址、节点端口、云负载均衡、外部域名指向 |
| 端口概念 | 服务端口对外暴露,目标端口指向容器实际监听端口 |
| 后端维护 | 由选择器自动维护后端列表,不匹配时列表为空 |
| 协议 | 支持 TCP、UDP,转发规则由转发模式决定 |
| 访问方式 | 集群内可直接用服务名访问,跨命名空间需带命名空间后缀 |
典型使用场景
- 服务间调用:内部服务用集群内地址互相访问,不关心实例地址变化
- 对外提供入口:用负载均衡类型把服务暴露到公网或内网入口
- 临时调试:节点端口类型在没有负载均衡的环境里快速验证
- 接入外部依赖:用外部域名类型把集群内的名字指向外部服务地址
- 流量分流:同一套实例用多个服务或端口组合暴露不同能力
- 灰度入口:通过入口规则把不同路径或域名指向不同服务
四种类型速览
| 类型 | 暴露方式 | 典型用途 |
|---|---|---|
| 集群内部 | 集群内虚拟地址 | 服务间调用,默认类型 |
| 节点端口 | 每个节点上的高位端口 | 测试环境、无负载均衡时外部访问 |
| 负载均衡 | 云厂商负载均衡加公网地址 | 生产对外入口 |
| 外部域名 | 指向外部域名的别名 | 接入集群外的依赖服务 |
服务定义示例
服务定义示例
apiVersion: v1
kind: Service
metadata:
name: web
spec:
type: ClusterIP
selector:
app: web
ports:
- name: http
port: 80
targetPort: 8080
protocol: TCP
# 端口与目标端口要分清:前者是服务端口,后者是容器监听端口服务端口与目标端口是两个概念:服务端口是对外暴露的端口,目标端口是容器实际监听的端口,写错时探测可能通过但流量打不到应用。
访问不通先看后端列表:列表为空说明选择器与实例标签不匹配,或实例还没通过就绪检查,这两类原因占到多数。
负载均衡类型依赖云厂商实现:创建后会同时产生云上的负载均衡资源,删除服务时记得确认关联资源是否一起回收,避免继续计费。
跨命名空间访问要带命名空间后缀:只写服务名时默认在当前命名空间里解析,找不到就会报域名解析失败。
服务配置的核对清单
- 核对选择器与实例标签完全一致,避免后端列表为空
- 核对服务端口与目标端口分别对应哪一层
- 核对协议类型,非网页类服务常需要显式声明
- 核对就绪检查,避免尚未就绪的实例接收流量
- 核对命名空间,跨空间访问需要带上命名空间后缀
- 核对云资源回收,删除服务时确认入口资源一并清理
服务的命名与端口规划要形成约定:同一命名空间内服务名唯一,端口用途写进文档,后续排查不必靠猜测。