第 6 章 Service Catalog 组件
6.1. Service Catalog
6.1.1. 概述
在开发基于微服务的应用程序以在云原生平台中运行时,可以通过许多方式置备不同的资源并共享其协调、凭证和配置,具体取决于服务供应商和平台。
为了给开发人员提供更加顺畅的体验,OpenShift Container Platform 包含服务目录(service catalog),这是 Kubernetes 的 Open Service Broker API (OSB API) 实施。用户可以将部署在 OpenShift Container Platform 中的应用程序与广泛的服务代理连接。
服务目录允许集群管理员使用单一 API 规格集成多个平台。OpenShift Container Platform Web 控制台显示服务目录中由服务代理提供的集群服务类,让用户能够发现并实例化服务以用于其应用程序。
因此,服务用户可从使用不同供应商的不同类型的服务简易性和一致性中受益,而服务供应商则可得益于通过一个集成点来访问多个平台。
6.1.2. 设计
服务目录的设计遵循以下基本工作流:
以下新的术语在概念和术语中进一步定义。
- 集群管理员在其 OpenShift Container Platform 集群中注册一个或多个 集群服务代理。在安装过程中可以为一些默认的服务代理或手动完成。
- 每个服务代理指定一组 集群服务类和 这些服务(服务计划)到 OpenShift Container Platform,它们应该提供给用户使用。
- 使用 OpenShift Container Platform Web 控制台或 CLI,用户可以发现可用的服务。例如,集群服务版本类可以是名为 BestDataBase 的数据库即服务。
- 用户选择集群服务类,并请求自己的 新实例。例如,服务实例可以是名为
my_db
的 BestDataBase 实例。 - 用户链接或将、其服务实例 绑定到 一组容器集(即应用)。例如,
my_db
服务实例可以绑定到名为my_app
的用户的应用。
当用户向置备或取消置备资源时,请求将向服务目录发出请求,然后向适当的集群服务代理发送请求。对于某些服务,应该花费一些时间完成 置备
、取消置备
和更新
等操作。如果集群服务代理不可用,服务目录将继续重试操作。
此基础架构允许在 OpenShift Container Platform 上运行的应用程序与它们使用的服务间进行松散耦合。这样,使用这些服务的应用程序可以专注于自己的业务逻辑,同时将这些服务的管理留给提供商。
6.1.2.1. 删除资源
当用户使用服务时(或者可能不再需要计费)时,可以删除服务实例。要删除服务实例,必须先删除服务绑定。删除服务绑定称为 unbinding。删除过程的一部分包括删除引用要删除的服务绑定的 secret。
删除所有服务绑定后,可以删除服务实例。删除服务实例称为 取消置备。
如果删除了包含服务绑定和服务实例的项目或命名空间,服务目录必须首先请求集群服务代理来删除关联的实例和绑定。这应该会延迟项目或命名空间的实际删除,因为服务目录必须与集群服务代理通信并等待它们执行取消置备工作。在正常情况下,这可能需要几分钟或更长时间,具体取决于该服务。
如果删除部署所使用的服务绑定,还必须从部署中删除对绑定 secret 的任何引用。否则,下次推出部署将失败。
6.1.3. 概念和术语
- Cluster Service Broker
集群服务版本代理 是一个符合 OSB API 规格的服务器,用于管理由一个或多个服务组成的集合。软件可以托管在您自己的 OpenShift Container Platform 集群中,或其他位置。
集群管理员可以创建代表集群服务版本代理的
ClusterServiceBroker
API 资源,并将它们注册到 OpenShift Container Platform 集群。这允许集群管理员使用集群中可用的集群服务代理提供新类型的受管服务。ClusterServiceBroker
资源指定集群服务代理的连接详情,以及这些服务组(以及这些服务的变体),供用户使用。特殊备注是authInfo
部分,其中包含用于与集群服务代理进行身份验证的数据。ClusterServiceBroker
资源示例apiVersion: servicecatalog.k8s.io/v1beta1 kind: ClusterServiceBroker metadata: name: BestCompanySaaS spec: url: http://bestdatabase.example.com authInfo: basic: secretRef: namespace: test-ns name: secret-name
- Cluster Service Class
在服务目录的上下文中也与"service"同步,集群服务类 是由特定集群服务代理提供的托管服务类型。每次一个新集群服务版本代理资源被添加到集群中时,服务目录控制器会连接到对应的集群服务代理来获取服务产品列表。自动为每个
ClusterServiceClass
资源创建新的 ClusterServiceClass 资源。注意OpenShift Container Platform 还具有一个名为 services 的核心概念,它是与内部负载平衡相关的 Kubernetes 资源。这些资源不一定与服务目录和 OSB API 的上下文中使用术语混淆。
ClusterServiceClass
资源示例apiVersion: servicecatalog.k8s.io/v1beta1 kind: ClusterServiceClass metadata: name: smallDB brokerName: BestDataBase plans: [...]
- Cluster Service Plan
- 集群服务计划 代表集群服务类的层。例如,群集服务类可以公开一组提供不同服务质量(QoS)程度的计划,每个计划都有不同的成本。
- 服务实例
服务实例是集群服务版本类的调配实例。当用户希望使用服务类提供的功能时,他们可以创建新的服务实例。
创建新的
ServiceInstance
资源时,服务目录控制器连接到适当的集群服务代理,并指示它置备服务实例。ServiceInstance
资源示例apiVersion: servicecatalog.k8s.io/v1beta1 kind: ServiceInstance metadata: name: my_db namespace: test-ns spec: externalClusterServiceClassName: smallDB externalClusterServicePlanName: default
- Application(应用程序)
- 术语 应用程序 指的是 OpenShift Container Platform 部署工件(如在用户项目中运行的 pod),它将使用一个服务实例。
- 凭证
- 凭据是 应用与服务实例通信所需的信息。
- 服务绑定
服务绑定是服务实例和应用程序间的链接。它们由希望应用程序引用和使用服务实例的集群用户创建。
创建后,服务目录控制器会创建一个 Kubernetes secret,其中包含服务实例的连接详情和凭证。这种 secret 通常会挂载到 pod 中。
ServiceBinding
资源示例apiVersion: servicecatalog.k8s.io/v1beta1 kind: ServiceBinding metadata: name: myBinding namespace: test-ns spec: instanceRef: name: my_db parameters: securityLevel: confidential secretName: mySecret
用户不应使用 Web 控制台更改实例化实例的环境变量的前缀,因为它可能导致应用程序路由无法访问。
- 参数
参数是一个 特殊字段,可用于在使用服务绑定或服务实例时将其他数据传递给集群服务代理。唯一格式化要求是有效的 YAML(或 JSON)参数。在上例中,安全级别参数会传递给服务绑定请求中的集群服务代理。对于需要更多安全性的参数,将其放入机密并使用
参数 From
来引用它们。Service Binding Resource 引用 Secret 示例
apiVersion: servicecatalog.k8s.io/v1beta1 kind: ServiceBinding metadata: name: myBinding namespace: test-ns spec: instanceRef: name: my_db parametersFrom: - secretKeyRef: name: securityLevel key: myKey secretName: mySecret
6.1.4. 提供的 Cluster Service Broker
OpenShift Container Platform 提供以下集群服务代理用于服务目录。