W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
服務(wù)目錄(Service Catalog)是 服務(wù)目錄是一種擴(kuò)展 API,它能讓 Kubernetes 集群中運(yùn)行的應(yīng)用易于使用外部托管的的軟件服務(wù),例如云供應(yīng)商提供的數(shù)據(jù)倉(cāng)庫(kù)服務(wù)。
服務(wù)目錄可以檢索、供應(yīng)、和綁定由 服務(wù)代理人(Service Brokers) 提供的外部托管服務(wù)(Managed Services), 而無(wú)需知道那些服務(wù)具體是怎樣創(chuàng)建和托管的。
服務(wù)代理(Service Broker)是由Open Service Broker API 規(guī)范定義的一組托管服務(wù)的端點(diǎn),這些服務(wù)由第三方提供并維護(hù),其中的第三方可以是 AWS、GCP 或 Azure 等云服務(wù)提供商。 托管服務(wù)的一些示例是 Microsoft Azure Cloud Queue、Amazon Simple Queue Service 和 Google Cloud Pub/Sub,但它們可以是應(yīng)用程序能夠使用的任何軟件交付物。
使用服務(wù)目錄,集群操作員 可以瀏覽某服務(wù)代理所提供的托管服務(wù)列表,供應(yīng)托管服務(wù)實(shí)例并與之綁定, 以使其可以被 Kubernetes 集群中的應(yīng)用程序使用。
應(yīng)用開(kāi)發(fā)人員, 希望使用消息隊(duì)列,作為其在 Kubernetes 集群中運(yùn)行的應(yīng)用程序的一部分。 但是,他們不想承受構(gòu)造這種服務(wù)的開(kāi)銷,也不想自行管理。 幸運(yùn)的是,有一家云服務(wù)提供商通過(guò)其服務(wù)代理以托管服務(wù)的形式提供消息隊(duì)列服務(wù)。
集群操作員可以設(shè)置服務(wù)目錄并使用它與云服務(wù)提供商的服務(wù)代理通信,進(jìn)而部署消息隊(duì)列服務(wù)的實(shí)例 并使其對(duì) Kubernetes 中的應(yīng)用程序可用。 應(yīng)用開(kāi)發(fā)者于是可以不關(guān)心消息隊(duì)列的實(shí)現(xiàn)細(xì)節(jié),也不用對(duì)其進(jìn)行管理。 他們的應(yīng)用程序可以簡(jiǎn)單的將其作為服務(wù)使用。
服務(wù)目錄使用Open Service Broker API 與服務(wù)代理進(jìn)行通信,并作為 Kubernetes API 服務(wù)器的中介,以便協(xié)商啟動(dòng)部署和獲取 應(yīng)用程序使用托管服務(wù)時(shí)必須的憑據(jù)。
它是基于 CRDs 架構(gòu)實(shí)現(xiàn)的。
服務(wù)目錄安裝 ?servicecatalog.k8s.io
? API 并提供以下 Kubernetes 資源:
ClusterServiceBroker
?:服務(wù)目錄的集群內(nèi)表現(xiàn)形式,封裝了其服務(wù)連接細(xì)節(jié)。集群運(yùn)維人員創(chuàng)建和管理這些資源,并希望使用該代理服務(wù)在集群中提供新類型的托管服務(wù)。
ClusterServiceClass
?:由特定服務(wù)代理提供的托管服務(wù)。當(dāng)新的 ?ClusterServiceBroker
?資源被添加到集群時(shí),服務(wù)目錄控制器將連接到服務(wù)代理以獲取可用的托管服務(wù)列表。然后為每個(gè)托管服務(wù)創(chuàng)建對(duì)應(yīng)的新 ?ClusterServiceClass
? 資源。
ClusterServicePlan
?:托管服務(wù)的特定產(chǎn)品。例如托管服務(wù)可能有不同的計(jì)劃可用,如免費(fèi)版本和付費(fèi)版本,或者可能有不同的配置選項(xiàng),例如使用 SSD 存儲(chǔ)或擁有更多資源。與 ?ClusterServiceClass
?類似,當(dāng)一個(gè)新的 ?ClusterServiceBroker
?被添加到集群時(shí),服務(wù)目錄會(huì)為每個(gè)托管服務(wù)的每個(gè)可用服務(wù)計(jì)劃創(chuàng)建對(duì)應(yīng)的新 ?ClusterServicePlan
?資源。
ServiceInstance
?:?ClusterServiceClass
? 提供的示例。由集群運(yùn)維人員創(chuàng)建,以使托管服務(wù)的特定實(shí)例可供一個(gè)或多個(gè)集群內(nèi)應(yīng)用程序使用。當(dāng)創(chuàng)建一個(gè)新的 ?ServiceInstance
?資源時(shí),服務(wù)目錄控制器將連接到相應(yīng)的服務(wù)代理并指示它調(diào)配服務(wù)實(shí)例。
ServiceBinding
?:?ServiceInstance
? 的訪問(wèn)憑據(jù)。由希望其應(yīng)用程序使用服務(wù) ?ServiceInstance
?的集群運(yùn)維人員創(chuàng)建。創(chuàng)建之后,服務(wù)目錄控制器將創(chuàng)建一個(gè) Kubernetes ?Secret
?,其中包含服務(wù)實(shí)例的連接細(xì)節(jié)和憑據(jù),可以掛載到 Pod 中。服務(wù)目錄支持這些認(rèn)證方法:
集群運(yùn)維人員可以使用服務(wù)目錄 API 資源來(lái)供應(yīng)托管服務(wù)并使其在 Kubernetes 集群內(nèi)可用。涉及的步驟有:
首先,集群運(yùn)維人員在 ?servicecatalog.k8s.io
? 組內(nèi)創(chuàng)建一個(gè) ?ClusterServiceBroker
?資源。此資源包含訪問(wèn)服務(wù)代理終結(jié)點(diǎn)所需的 URL 和連接詳細(xì)信息。
這是一個(gè) ?ClusterServiceBroker
?資源的例子:
apiVersion: servicecatalog.k8s.io/v1beta1
kind: ClusterServiceBroker
metadata:
name: cloud-broker
spec:
# 指向服務(wù)代理的末端。(這里的 URL 是無(wú)法使用的。)
url: https://servicebroker.somecloudprovider.com/v1alpha1/projects/service-catalog/brokers/default
#####
# 這里可以添加額外的用來(lái)與服務(wù)代理通信的屬性值,
# 例如持有者令牌信息或者 TLS 的 CA 包。
#####
下面的時(shí)序圖展示了從服務(wù)代理列出可用托管服務(wù)和計(jì)劃所涉及的各個(gè)步驟:
ClusterServiceBroker
?資源被添加到了服務(wù)目錄之后,將會(huì)觸發(fā)一個(gè)到外部服務(wù)代理的 調(diào)用,以列舉所有可用服務(wù);
ClusterServiceClass
?和 ?ClusterServicePlan
?資源中。
kubectl get clusterserviceclasses \
-o=custom-columns=SERVICE\ NAME:.metadata.name,EXTERNAL\ NAME:.spec.externalName
它應(yīng)該輸出一個(gè)和以下格式類似的服務(wù)名稱列表:
SERVICE NAME EXTERNAL NAME
4f6e6cf6-ffdd-425f-a2c7-3c9258ad2468 cloud-provider-service
... ...
他們還可以使用以下命令查看可用的服務(wù)計(jì)劃:
kubectl get clusterserviceplans \
-o=custom-columns=PLAN\ NAME:.metadata.name,EXTERNAL\ NAME:.spec.externalName
它應(yīng)該輸出一個(gè)和以下格式類似的服務(wù)計(jì)劃列表:
PLAN NAME EXTERNAL NAME
86064792-7ea2-467b-af93-ac9694d96d52 service-plan-name
... ...
集群運(yùn)維人員 可以通過(guò)創(chuàng)建一個(gè) ?ServiceInstance
?資源來(lái)啟動(dòng)一個(gè)新實(shí)例的配置。
下面是一個(gè) ?ServiceInstance
?資源的例子:
apiVersion: servicecatalog.k8s.io/v1beta1
kind: ServiceInstance
metadata:
name: cloud-queue-instance
namespace: cloud-apps
spec:
# 引用之前返回的服務(wù)之一
clusterServiceClassExternalName: cloud-provider-service
clusterServicePlanExternalName: service-plan-name
#####
# 這里可添加額外的參數(shù),供服務(wù)代理使用
#####
以下時(shí)序圖展示了配置托管服務(wù)新實(shí)例所涉及的步驟:
ServiceInstance
?資源時(shí),服務(wù)目錄將啟動(dòng)一個(gè)到外部服務(wù)代理的調(diào)用, 請(qǐng)求供應(yīng)一個(gè)實(shí)例。
在設(shè)置新實(shí)例之后,集群運(yùn)維人員必須綁定到托管服務(wù)才能獲取應(yīng)用程序使用服務(wù)所需的連接憑據(jù)和服務(wù)賬戶的詳細(xì)信息。該操作通過(guò)創(chuàng)建一個(gè) ?ServiceBinding
?資源完成。
以下是 ?ServiceBinding
?資源的示例:
apiVersion: servicecatalog.k8s.io/v1beta1
kind: ServiceBinding
metadata:
name: cloud-queue-binding
namespace: cloud-apps
spec:
instanceRef:
name: cloud-queue-instance
#####
# 這里可以添加供服務(wù)代理使用的額外信息,例如 Secret 名稱或者服務(wù)賬號(hào)參數(shù),
#####
以下順序圖展示了綁定到托管服務(wù)實(shí)例的步驟:
ServiceBinding
?之后,服務(wù)目錄調(diào)用外部服務(wù)代理,請(qǐng)求綁定服務(wù)實(shí)例所需的信息。
完成綁定之后的最后一步就是將連接憑據(jù)和服務(wù)特定的信息映射到應(yīng)用程序中。這些信息存儲(chǔ)在 secret 中,集群中的應(yīng)用程序可以訪問(wèn)并使用它們直接與托管服務(wù)進(jìn)行連接。
執(zhí)行此映射的一種方法是使用聲明式 Pod 配置。
以下示例描述了如何將服務(wù)賬戶憑據(jù)映射到應(yīng)用程序中。名為 ?sa-key
? 的密鑰保存在一個(gè)名為 ?provider-cloud-key
? 的卷中,應(yīng)用程序會(huì)將該卷掛載在 ?/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 值映射為應(yīng)用程序的環(huán)境變量。 在這個(gè)示例中,消息隊(duì)列的主題名從 Secret ?provider-queue-credentials
? 中名為 ?topic
?的主鍵映射到環(huán)境變量 ?TOPIC
?中。
...
env:
- name: "TOPIC"
valueFrom:
secretKeyRef:
name: provider-queue-credentials
key: topic
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: