新聞中心
服務目錄
服務目錄(Service Catalog)是 服務目錄是一種擴展 API,它能讓 Kubernetes 集群中運行的應用易于使用外部托管的的軟件服務,例如云供應商提供的數(shù)據(jù)倉庫服務。

服務目錄可以檢索、供應、和綁定由 服務代理人(Service Brokers) 提供的外部托管服務(Managed Services), 而無需知道那些服務具體是怎樣創(chuàng)建和托管的。
服務代理(Service Broker)是由Open Service Broker API 規(guī)范定義的一組托管服務的端點,這些服務由第三方提供并維護,其中的第三方可以是 AWS、GCP 或 Azure 等云服務提供商。 托管服務的一些示例是 Microsoft Azure Cloud Queue、Amazon Simple Queue Service 和 Google Cloud Pub/Sub,但它們可以是應用程序能夠使用的任何軟件交付物。
使用服務目錄,集群操作員 可以瀏覽某服務代理所提供的托管服務列表,供應托管服務實例并與之綁定, 以使其可以被 Kubernetes 集群中的應用程序使用。
示例用例
應用開發(fā)人員, 希望使用消息隊列,作為其在 Kubernetes 集群中運行的應用程序的一部分。 但是,他們不想承受構造這種服務的開銷,也不想自行管理。 幸運的是,有一家云服務提供商通過其服務代理以托管服務的形式提供消息隊列服務。
集群操作員可以設置服務目錄并使用它與云服務提供商的服務代理通信,進而部署消息隊列服務的實例 并使其對 Kubernetes 中的應用程序可用。 應用開發(fā)者于是可以不關心消息隊列的實現(xiàn)細節(jié),也不用對其進行管理。 他們的應用程序可以簡單的將其作為服務使用。
架構
服務目錄使用Open Service Broker API 與服務代理進行通信,并作為 Kubernetes API 服務器的中介,以便協(xié)商啟動部署和獲取 應用程序使用托管服務時必須的憑據(jù)。
它是基于 CRDs 架構實現(xiàn)的。
API 資源
服務目錄安裝 ?servicecatalog.K8S.io? API 并提供以下 Kubernetes 資源:
- ?
ClusterServiceBroker?:服務目錄的集群內(nèi)表現(xiàn)形式,封裝了其服務連接細節(jié)。集群運維人員創(chuàng)建和管理這些資源,并希望使用該代理服務在集群中提供新類型的托管服務。 - ?
ClusterServiceClass?:由特定服務代理提供的托管服務。當新的 ?ClusterServiceBroker?資源被添加到集群時,服務目錄控制器將連接到服務代理以獲取可用的托管服務列表。然后為每個托管服務創(chuàng)建對應的新 ?ClusterServiceClass? 資源。 - ?
ClusterServicePlan?:托管服務的特定產(chǎn)品。例如托管服務可能有不同的計劃可用,如免費版本和付費版本,或者可能有不同的配置選項,例如使用 SSD 存儲或擁有更多資源。與 ?ClusterServiceClass?類似,當一個新的 ?ClusterServiceBroker?被添加到集群時,服務目錄會為每個托管服務的每個可用服務計劃創(chuàng)建對應的新 ?ClusterServicePlan?資源。 - ?
ServiceInstance?:?ClusterServiceClass? 提供的示例。由集群運維人員創(chuàng)建,以使托管服務的特定實例可供一個或多個集群內(nèi)應用程序使用。當創(chuàng)建一個新的 ?ServiceInstance?資源時,服務目錄控制器將連接到相應的服務代理并指示它調(diào)配服務實例。 - ?
ServiceBinding?:?ServiceInstance? 的訪問憑據(jù)。由希望其應用程序使用服務 ?ServiceInstance?的集群運維人員創(chuàng)建。創(chuàng)建之后,服務目錄控制器將創(chuàng)建一個 Kubernetes ?Secret?,其中包含服務實例的連接細節(jié)和憑據(jù),可以掛載到 Pod 中。
認證
服務目錄支持這些認證方法:
- 基本認證(用戶名/密碼)
- OAuth 2.0 不記名令牌
使用方式
集群運維人員可以使用服務目錄 API 資源來供應托管服務并使其在 Kubernetes 集群內(nèi)可用。涉及的步驟有:
- 列出服務代理提供的托管服務和服務計劃。
- 配置托管服務的新實例。
- 綁定到托管服務,它將返回連接憑證。
- 將連接憑證映射到應用程序中。
列出托管服務和服務計劃
首先,集群運維人員在 ?servicecatalog.k8s.io? 組內(nèi)創(chuàng)建一個 ?ClusterServiceBroker ?資源。此資源包含訪問服務代理終結點所需的 URL 和連接詳細信息。
這是一個 ?ClusterServiceBroker ?資源的例子:
apiVersion: servicecatalog.k8s.io/v1beta1
kind: ClusterServiceBroker
metadata:
name: cloud-broker
spec:
# 指向服務代理的末端。(這里的 URL 是無法使用的。)
url: https://servicebroker.somecloudprovider.com/v1alpha1/projects/service-catalog/brokers/default
#####
# 這里可以添加額外的用來與服務代理通信的屬性值,
# 例如持有者令牌信息或者 TLS 的 CA 包。
#####下面的時序圖展示了從服務代理列出可用托管服務和計劃所涉及的各個步驟:
- 一旦 ?
ClusterServiceBroker?資源被添加到了服務目錄之后,將會觸發(fā)一個到外部服務代理的 調(diào)用,以列舉所有可用服務; - 服務代理返回可用的托管服務和服務計劃列表,這些列表將本地緩存在 ?
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
... ...供應一個新實例
集群運維人員 可以通過創(chuàng)建一個 ?ServiceInstance ?資源來啟動一個新實例的配置。
下面是一個 ?ServiceInstance ?資源的例子:
apiVersion: servicecatalog.k8s.io/v1beta1
kind: ServiceInstance
metadata:
name: cloud-queue-instance
namespace: cloud-apps
spec:
# 引用之前返回的服務之一
clusterServiceClassExternalName: cloud-provider-service
clusterServicePlanExternalName: service-plan-name
#####
# 這里可添加額外的參數(shù),供服務代理使用
#####以下時序圖展示了配置托管服務新實例所涉及的步驟:
- 創(chuàng)建 ?
ServiceInstance?資源時,服務目錄將啟動一個到外部服務代理的調(diào)用, 請求供應一個實例。 - 服務代理創(chuàng)建一個托管服務的新實例并返回 HTTP 響應。
- 接下來,集群運維人員可以檢查實例的狀態(tài)是否就緒。
綁定到托管服務
在設置新實例之后,集群運維人員必須綁定到托管服務才能獲取應用程序使用服務所需的連接憑據(jù)和服務賬戶的詳細信息。該操作通過創(chuàng)建一個 ?ServiceBinding ?資源完成。
以下是 ?ServiceBinding ?資源的示例:
apiVersion: servicecatalog.k8s.io/v1beta1
kind: ServiceBinding
metadata:
name: cloud-queue-binding
namespace: cloud-apps
spec:
instanceRef:
name: cloud-queue-instance
#####
# 這里可以添加供服務代理使用的額外信息,例如 Secret 名稱或者服務賬號參數(shù),
#####以下順序圖展示了綁定到托管服務實例的步驟:
- 在創(chuàng)建 ?
ServiceBinding?之后,服務目錄調(diào)用外部服務代理,請求綁定服務實例所需的信息。 - 服務代理為相應服務賬戶啟用應用權限/角色。
- 服務代理返回連接和訪問托管服務示例所需的信息。這是由提供商和服務特定的,故返回的信息可能因服務提供商和其托管服務而有所不同。
映射連接憑據(jù)
完成綁定之后的最后一步就是將連接憑據(jù)和服務特定的信息映射到應用程序中。這些信息存儲在 secret 中,集群中的應用程序可以訪問并使用它們直接與托管服務進行連接。
Pod 配置文件
執(zhí)行此映射的一種方法是使用聲明式 Pod 配置。
以下示例描述了如何將服務賬戶憑據(jù)映射到應用程序中。名為 ?sa-key? 的密鑰保存在一個名為 ?provider-cloud-key? 的卷中,應用程序會將該卷掛載在 ?/var/secrets/provider/key.json? 路徑下。環(huán)境變量 ?PROVIDER_APPLICATION_CREDENTIALS ?將映射為掛載文件的路徑。
...
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"以下示例描述了如何將 Secret 值映射為應用程序的環(huán)境變量。 在這個示例中,消息隊列的主題名從 Secret ?provider-queue-credentials? 中名為 ?topic ?的主鍵映射到環(huán)境變量 ?TOPIC ?中。
...
env:
- name: "TOPIC"
valueFrom:
secretKeyRef:
name: provider-queue-credentials
key: topic 名稱欄目:創(chuàng)新互聯(lián)kubernetes教程:Kubernetes服務目錄
文章路徑:http://www.dlmjj.cn/article/cojdohp.html


咨詢
建站咨詢
