3. 服务目录(Service Catalog)基础:定义、用途与在Kubernetes中的角色
3.1 什么是服务目录?
服务目录(Service Catalog)是云原生环境中一种结构化的服务清单,它将组织内所有可用的微服务、中间件、数据存储及第三方API进行统一注册、分类和描述。在Kubernetes生态中,服务目录不仅是一个静态列表,更是一个动态的、可被Kubecost等成本管理工具实时消费的元数据层。
核心定义: 服务目录 = 服务元数据 + 成本归属标签 + 水位指标映射 + 变更影响域。
与传统的CMDB(配置管理数据库)不同,Kubernetes服务目录天然具备以下特征:
- 动态性: 服务实例随Pod生命周期自动注册与注销。
- 标签驱动: 通过Label和Annotation承载成本中心、环境、团队等维度。
- 可观测性: 直接关联CPU/内存/网络等资源水位指标。
3.2 服务目录的核心用途
| 用途维度 | 具体说明 | Kubecost关联场景 |
|---|---|---|
| 成本归属 | 将Pod/Namespace/Deployment映射到业务线、项目或团队 | 按服务目录维度拆分成本报告 |
| 水位监控 | 记录每个服务的资源请求/限制、实际使用率、HPA阈值 | 识别水位高风险服务(如CPU使用率>80%) |
| 变更影响分析 | 标记服务间的依赖关系与调用链 | 准入策略评估变更是否触发级联成本风险 |
| 合规审计 | 记录服务Owner、审批人、SLA等级 | 准入策略强制要求高风险变更必须审批 |
| 容量规划 | 聚合同类服务的资源画像与增长趋势 | 预测未来成本并设置预算告警 |
3.3 服务目录在Kubernetes中的角色定位
在Kubernetes集群中,服务目录并非一个独立的API资源,而是一种由自定义资源(CRD)、标签约定和外部工具(如Kubecost)共同构建的逻辑层。其角色可以概括为以下三层:
- 数据聚合层: 从集群中所有Namespace、Deployment、StatefulSet、Service、Ingress等资源中提取元数据,形成统一视图。
- 策略执行层: 作为准入控制器的输入源,Kubecost根据服务目录中的水位标签和成本标签,判断变更请求是否触发高风险阈值。
- 可视化与洞察层: 在Kubecost仪表盘中,服务目录是用户浏览成本、水位、效率的默认入口。
实践建议: 在Kubernetes集群中,建议使用统一的标签规范(如
service-name、cost-center、tier)来构建服务目录。Kubecost会自动扫描这些标签并建立索引,无需额外配置。
3.4 服务目录与水位高风险变更的关系
在《Kubecost准入策略覆盖服务目录水位高风险变更》课程中,服务目录是准入策略的决策基础。具体关系如下:
- 水位高风险定义: 服务目录中记录的CPU/内存使用率超过预设阈值(如CPU > 75% 或 内存 > 80%)。
- 变更触发条件: 当用户提交Deployment更新、HPA修改、资源配额变更等请求时,Kubecost准入控制器查询服务目录中该服务的水位状态。
- 策略动作: 若服务目录显示该服务处于“高水位”状态,准入策略可执行阻断、告警或要求审批等操作。
注意: 服务目录的准确性直接影响准入策略的有效性。如果服务目录中的水位数据滞后或标签缺失,可能导致误判(如误阻断正常变更)或漏判(如放过高风险变更)。建议定期使用Kubecost的“服务目录健康检查”功能验证数据完整性。
3.5 服务目录的典型架构
下图展示了服务目录在Kubernetes集群中的逻辑架构及其与Kubecost准入控制器的交互关系:
3.6 服务目录的标签设计示例
以下是一个典型的生产环境服务目录标签设计,Kubecost会自动识别这些标签并建立成本与水位索引:
# 服务目录标签规范示例
apiVersion: v1
kind: Namespace
metadata:
name: payment-service
labels:
service-name: payment-gateway # 服务名称
cost-center: fintech # 成本中心
tier: critical # 服务等级
owner-team: payment-team # 所属团队
environment: production # 环境
annotations:
kubecost.watermark/cpu-threshold: "75" # CPU水位阈值(%)
kubecost.watermark/mem-threshold: "80" # 内存水位阈值(%)
kubecost.watermark/action: "block" # 高风险变更动作
关键点: 服务目录中的
kubecost.watermark/* 注解是Kubecost准入策略的核心输入。准入控制器在拦截变更请求时,会读取这些注解并与当前实际水位对比,从而决定是否执行策略动作。
3.7 服务目录的维护与治理
为了确保服务目录在准入策略中的有效性,建议遵循以下治理原则:
| 治理维度 | 最佳实践 | Kubecost工具支持 |
|---|---|---|
| 标签一致性 | 使用Kubernetes准入控制器(如Kyverno)强制标签规范 | Kubecost标签推荐器 |
| 水位阈值更新 | 根据历史水位数据定期调整阈值,避免误报 | Kubecost水位分析报告 |
| 服务目录审计 | 每周检查未标记或孤儿服务 | Kubecost服务目录健康检查 |
| 变更影响评估 | 在服务目录中维护依赖关系图 | Kubecost依赖关系可视化 |
通过以上治理措施,服务目录将成为Kubecost准入策略可靠且高效的决策基础,确保水位高风险变更得到及时识别与管控。