service-catalog
weight: 67
title: 服务目录(Service Catalog)
date: “2022-05-21T00:00:00+08:00”
type: book
服务目录(Service Catalog)是
它提供列表清单、提供
由
托管服务可以是
通过
场景样例
应用程序开发人员编写基于
集群运营商可以设置
架构
API 资源
- ClusterServiceBroker:作为
service broker 的集群内代理,封装其服务器连接详细信息。这些由集群运营者创建和管理,希望使用broker 服务在其集群中提供新类型的托管服务。 - ClusterServiceClass:由特定
service broker 提供的托管服务。将新ClusterServiceBroker 资源添加到集群时,Service catalog controller 将连接到service broker 以获取可用托管服务的列表清单。然后它会创建新的ClusterServiceClass 资源,与每个托管服务相对应。 - ClusterServicePlan:托管服务的特定产品。例如,托管服务可能有不同的可用套餐,例如免费套餐或付费套餐,或者可能有不同的配置选项,例如使用
SSD 存储或拥有更多资源。同向集群添加ClusterServiceClass 一样,当添加一个新的ClusterServiceBroker 时,Service Catalog 会创建一个新的ClusterServicePlan 资源,与每个托管服务可用的每个服务套餐对应。 - ServiceInstance:一个提供好的
ClusterServiceClass 实例。这些是由集群运营者创建的托管服务的特定实例,供一个或多个集群内应用程序使用。当创建一个新的ServiceInstance 资源时,Service Catalog controller 连接到相应的服务代理并指示它提供服务实例。 - ServiceBinding:访问
ServiceInstance 的凭据。由想让他们的应用利用ServiceInstance 的集集群运营者创建。创建之后,Service Catalog controller 将创建一个与此服务实例对应的Kubernetes 的Secret ,包含此服务实例的连接详细信息和凭证 ,可以挂载到Pod 中。
鉴权认证
- Basic (username/password)
- OAuth 2.0 Bearer Token
用法
集群运营者可以使用
- 列出
Service Broker 提供的托管服务清单和服务套餐。 - 提供托管服务的新实例。
- 绑定到托管服务,该服务返回连接凭证。
- 将连接凭证映射到应用程序中。
列出托管服务和服务组
首先,集群运营者必须在
这是一个
apiVersion: servicecatalog.k8s.io/v1beta1
kind: ClusterServiceBroker
metadata:
name: cloud-broker
spec:
# Points to the endpoint of a service broker. (This example is not a working URL.)
url: https://servicebroker.somecloudprovider.com/v1alpha1/projects/service-catalog/brokers/default
#####
# Additional values can be added here, which may be used to communicate
# with the service broker, such as bearer token info or a caBundle for TLS.
#####
以下是说明从一个
-
将
ClusterServiceBroker 资源添加到Service catalog 中,它会触发对外部Service Broker 的调用以获取可用服务的清单。 -
Service Broker 返回可用托管服务的清单和服务套餐的列表,它们分别在本地缓存为ClusterServiceClass
资源和ClusterServicePlan
资源。 -
然后,集群运营者可以使用以下命令获取可用托管服务的清单:
kubectl get clusterserviceclasses -o=custom-columns=SERVICE\ NAME:.metadata.name,EXTERNAL\ NAME:.spec.externalName
它应该输出一个类似于以下格式的服务名称列表:
SERVICE NAME EXTERNAL NAME 4f6e6cf6-ffdd-425f-a2c7-3c9258ad2468 cloud-provider-service ... ...
他们还可以使用以下命令查看可用的服务套餐:
kubectl get clusterserviceplans -o=custom-columns=PLAN\ NAME:.metadata.name,EXTERNAL\ NAME:.spec.externalName
它应该输出一个类似于以下格式的套餐名称列表:
PLAN NAME EXTERNAL NAME 86064792-7ea2-467b-af93-ac9694d96d52 service-plan-name ... ...
提供新的实例
集群运营者可以通过创建
如下是一个
apiVersion: servicecatalog.k8s.io/v1beta1
kind: ServiceInstance
metadata:
name: cloud-queue-instance
namespace: cloud-apps
spec:
# References one of the previously returned services
clusterServiceClassExternalName: cloud-provider-service
clusterServicePlanExternalName: service-plan-name
#####
# Additional parameters can be added here,
# which may be used by the service broker.
#####
以下序列图说明了提供一个新的托管服务的实例所涉及的步骤:
- 当
ServiceInstance
资源创建后,Service Catalog 发起到外部service broker 来提供服务的一个实例。 service broker 创建托管服务的新实例并返回HTTP 响应。- 然后,集群运营者可以检查实例的状态,来确认它是否准备就绪。
绑定到托管服务
在提供新实例后,集群运营者必须绑定到托管服务才能获取到应用程序使用服务所需的连接凭证和服务帐户详细信息。这是通过创建 ServiceBinding
资源完成的。
以下是一个 ServiceBinding
资源的例子:
apiVersion: servicecatalog.k8s.io/v1beta1
kind: ServiceBinding
metadata:
name: cloud-queue-binding
namespace: cloud-apps
spec:
instanceRef:
name: cloud-queue-instance
#####
# Additional information can be added here, such as a secretName or
# service account parameters, which may be used by the service broker.
#####
以下序列图说明了绑定到托管服务实例所涉及的步骤:
-
在
ServiceBinding 创建后,Service Catalog 给外部service broker 发一个调用请求,获取与服务实例绑定所需的信息。 -
service broker 为相应的服务帐户启用应用程序权限/ 角色。 -
service broker 返回连接和访问托管服务实例所需的信息。根据不同的提供商和不同的服务,返回的信息可能在服务提供商和其管理服务之间有所不同。
映射连接凭证
绑定后,最后一步是将连接凭证和服务特定的信息映射到应用程序中。这些信息存储在
Pod 配置文件
执行此映射的一种方法是使用声明式
以下示例描述了如何将服务帐户凭证映射到应用程序中。被调用的
---
spec:
volumes:
- name: provider-cloud-key
secret:
secretName: sa-key
containers:
---
volumeMounts:
- name: provider-cloud-key
mountPath: /var/secrets/provider
env:
- name: PROVIDER_APPLICATION_CREDENTIALS
value: "/var/secrets/provider/key.json"
以下示例描述如何将topic
名称从名为 provider-queue-credentials
的TOPIC
。
---
env:
- name: "TOPIC"
valueFrom:
secretKeyRef:
name: provider-queue-credentials
key: topic
下一步
- 如果熟悉
Helm Charts ,使用Helm 将Service Catalog 安装到Kubernetes 集群中。或者,可以使用SC 工具安装服务目录。 - 查看 sample service brokers。
- 探索 kubernetes-incubator/service-catalog 项目。
以上翻译自官方文档。
Service Catalog 的安装( 利用Helm) 和交互
服务目录
要了解更多关于
本文档的其余部分详细介绍了如何:
- 在集群上设置
Service Catalog - 与
Service Catalog API 进行交互
前提条件
Kubernetes 版本
kubectl
版本
大多数与kubectl
命令行界面实现的。与集群版本一样,
首先,检查 kubectl
版本:
kubectl version
确保
如果需要升级客户端,请按照安装说明 获取新的 kubectl
二进制文件。
例如,运行以下命令以在
curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/darwin/amd64/kubectl
chmod +x ./kubectl
集群内DNS
您需要启用
- Minikube
hack/local-up-cluster.sh
- 大多数云提供商
Helm
使用
如果还没有安装Helm
如果尚未安装helm
CLI,然后运行
如果已经安装了Helm
如果已经安装了
如果不是, 请安装更新版本的helm init --upgrade
。
有关安装的更多详细信息,请参阅
Tiller 权限
需要对cluster-admin
权限,才能正确安装
kubectl create clusterrolebinding tiller-cluster-admin \
--clusterrole=cluster-admin \
--serviceaccount=kube-system:default
Helm Repository 设置
此
helm repo add svc-cat https://svc-catalog-charts.storage.googleapis.com
然后,确保
helm search service-catalog
应该看到以下输出:
NAME VERSION DESCRIPTION
svc-cat/catalog x,y.z service-catalog API server and controller-manag...
RBAC
与集群内
Minikube
如果您正在使用
minikube start --extra-config=apiserver.Authorization.Mode=RBAC
hack/local-cluster-up.sh
如果使用 hack/local-up-cluster.sh
脚本,请使用以下命令启动集群:
AUTHORIZATION_MODE=Node,RBAC hack/local-up-cluster.sh -O
云提供商
许多云提供商为你启用了
安装Service Catalog
集群和
helm install svc-cat/catalog \
--name catalog --namespace catalog
安装Service Catalog CLI 客户端
按照适用于操作系统的说明安装
MacOS
curl -sLO https://download.svcat.sh/cli/latest/darwin/amd64/svcat
chmod +x ./svcat
mv ./svcat /usr/local/bin/
svcat version --client
Linux
curl -sLO https://download.svcat.sh/cli/latest/linux/amd64/svcat
chmod +x ./svcat
mv ./svcat /usr/local/bin/
svcat version --client
Windows
下面的片段仅在当前会话的
iwr 'https://download.svcat.sh/cli/latest/windows/amd64/svcat.exe' -UseBasicParsing -OutFile svcat.exe
mkdir -f ~\bin
$env:PATH += ";${pwd}\bin"
svcat version --client
手动方式
插件方式使用客户端
要将
$ ./svcat install plugin
Plugin has been installed to ~/.kube/plugins/svcat. Run kubectl plugin svcat --help for help using the plugin.
当作为插件运行时,这些命令与添加全局--flag
--flag=true
。