服务目录控制面通信与安全基线核验 - 第3节
3.1 Service Catalog 的定义与核心定位
Service Catalog 是 Kubernetes 生态中用于管理外部服务依赖的扩展组件。它允许集群内的应用通过声明式的方式发现、订阅和绑定由外部 Broker 提供的托管服务(如数据库、消息队列、对象存储等),而无需手动处理连接凭证或网络配置。
从架构视角看,Service Catalog 充当了Kubernetes 控制平面与外部服务市场之间的桥梁。它实现了两个关键能力:
- 服务发现:从 Service Broker 获取可用服务及其方案的目录。
- 服务生命周期管理:通过 Kubernetes 原生资源对象(
ClusterServiceClass、ServiceInstance、ServiceBinding)驱动服务的创建、绑定、更新与删除。
关键概念:Service Catalog 本身不托管任何服务实例,它只负责将外部 Broker 的能力映射为 Kubernetes 资源,并将连接信息以 Secret 形式注入到应用 Pod 中。
3.1.1 核心资源模型
| Kubernetes 资源 | 作用 | 生命周期 |
|---|---|---|
| ClusterServiceClass | 描述 Broker 提供的服务类型(如 "MySQL 5.7"、"Redis 6.2") | 由 Catalog 控制器自动同步,只读 |
| ClusterServicePlan | 描述服务的具体套餐(如 "small"、"medium"、"large") | 由 Catalog 控制器自动同步,只读 |
| ServiceInstance | 用户请求创建的一个具体服务实例 | 用户创建/删除,驱动 Broker 的 provision/deprovision |
| ServiceBinding | 将服务实例的访问凭证绑定到应用 | 用户创建/删除,驱动 Broker 的 bind/unbind |
3.2 Open Service Broker API 标准
Open Service Broker API(OSB API)是 Service Catalog 与外部 Broker 通信的标准化协议。它定义了一组 RESTful 端点,用于实现服务的生命周期管理和绑定。该标准由 Cloud Foundry、Kubernetes 和 OpenShift 等社区共同维护,确保了跨平台的服务互操作性。
3.2.1 OSB API 核心端点
| 端点 | HTTP 方法 | 功能描述 |
|---|---|---|
/v2/catalog |
GET | 获取 Broker 提供的所有服务及其套餐列表 |
/v2/service_instances/:id |
PUT | 创建或更新一个服务实例(provision) |
/v2/service_instances/:id |
DELETE | 删除一个服务实例(deprovision) |
/v2/service_instances/:id/service_bindings/:binding_id |
PUT | 创建绑定,返回连接凭证(bind) |
/v2/service_instances/:id/service_bindings/:binding_id |
DELETE | 删除绑定(unbind) |
3.2.2 异步操作与轮询
对于耗时较长的操作(如创建数据库实例),OSB API 支持异步响应。Broker 在收到请求后立即返回 202 Accepted,并在响应头中提供 Operation 字段。Catalog 控制器随后通过轮询 /v2/service_instances/:id/last_operation 端点来获取操作状态。
# 异步创建实例的典型流程
PUT /v2/service_instances/abc-123
{
"service_id": "mysql-service-id",
"plan_id": "small-plan-id",
"parameters": { "storage_gb": 10 }
}
# 响应:202 Accepted
# Location: /v2/service_instances/abc-123/last_operation?operation=provisioning-001
# 轮询状态
GET /v2/service_instances/abc-123/last_operation?operation=provisioning-001
# 响应:{"state": "in progress"}
# 最终响应:{"state": "succeeded"}
3.3 服务目录的价值
引入 Service Catalog 为云原生平台带来了以下核心价值:
- 标准化服务消费:应用团队无需关心底层基础设施的差异,通过统一的 Kubernetes 资源即可消费任何兼容 OSB API 的服务。
- 降低运维复杂度:服务实例的创建、扩缩容、备份等操作由 Broker 负责,平台团队只需维护 Catalog 控制器的健康。
- 安全凭证管理:绑定操作自动将连接信息写入 Kubernetes Secret,避免硬编码或手动传递敏感信息。
- 多云与混合云支持:同一套 Service Catalog 可以对接多个 Broker(公有云、私有云、本地中间件),实现服务资源的统一视图。
典型场景:开发团队在部署应用时,只需在 YAML 中声明一个
ServiceInstance 资源,指定服务类为 "postgresql-14"、套餐为 "standard"。Catalog 控制器自动调用对应 Broker 的 API 创建数据库实例,并将连接字符串以 Secret 形式注入到应用 Pod 的环境变量中。整个过程无需人工介入,实现了基础设施即代码。
3.4 Service Catalog 与 Broker 的通信架构
下图展示了 Service Catalog 控制器如何通过 OSB API 与外部 Broker 交互,完成服务实例的创建与绑定流程。
3.5 服务目录的典型工作流程
下图展示了从用户提交 ServiceInstance 到应用 Pod 获取凭证的完整时序流程。
注意事项:在实际生产环境中,Service Catalog 与 Broker 之间的通信必须使用 HTTPS 并配置 TLS 证书验证。同时,Broker 的端点应位于集群网络可达的位置,且需要配置适当的认证机制(如 Basic Auth 或 Bearer )。