没有选择器的服务
服务对象默认通过标签选择器自动发现后端副本,由控制器维护地址列表。当后端不在集群里,或者在另一个命名空间,或者正处于跨集群迁移阶段,可以省略选择器,改由人工维护地址列表。这时服务只提供固定的集群内地址与端口映射能力,后端由你负责。
基本信息
| 适用平台 | Kubernetes 1.20+,核心接口组 |
|---|---|
| 关键差异 | 省略选择器后系统不再自动维护后端 |
| 后端载体 | 地址列表对象与地址分片对象 |
| 命名要求 | 后端对象名称必须与服务名称一致 |
| 典型用途 | 接管集群外后端、跨命名空间后端、迁移桥接 |
典型使用场景
- 把集群外的数据库或第三方接口映射成集群内域名,业务侧不必改配置
- 后端位于另一个命名空间,需要跨命名空间提供统一入口
- 数据库从自建迁移到托管服务,用同一服务名平滑切换
- 多集群场景下把远端集群的服务地址写进本地入口
- 灰度期把一部分流量指向外部环境做对比验证
无选择器的服务
无选择器的服务
apiVersion: v1
kind: Service
metadata:
name: external-api
spec:
ports:
- port: 443 # 服务对外暴露的端口
targetPort: 8443 # 映射到后端的端口
# 不写 selector:后端由下面的地址列表维护手动维护后端地址
手动维护后端地址
apiVersion: v1
kind: Endpoints
metadata:
name: external-api # 必须与服务名称完全一致
subsets:
- addresses:
- ip: 10.20.30.40 # 真实可达的地址
- ip: 10.20.30.41
ports:
- port: 8443 # 后端实际监听端口字段读法
| 字段 | 含义 | 注意点 |
|---|---|---|
| 服务端口 | 集群内访问使用的端口 | 业务侧配置里写这个端口 |
| 目标端口 | 后端实际监听端口 | 写错等于后端全不可用 |
| 地址列表 | 后端真实地址与端口 | 需人工保证更新及时 |
| 名称一致性 | 后端对象名与服务名相同 | 不一致时静默不生效 |
地址分片对象由控制器从地址列表自动生成。若直接维护分片对象,控制器可能随后覆盖你的内容,因此优先维护地址列表,或在明确知道后果时再直接操作分片。
人工维护意味着没有自愈能力:后端地址变化后如果没人更新,服务会持续把流量发往失效地址,且对象本身不会报错。