kubernetes Service Catalog

1.Service Catalog

中文叫服務(wù)目錄,是將各種形態(tài)服務(wù)(包括IAAS、PAAS等服務(wù))集中統(tǒng)一的管理起來,其目的主要是為了管理第三方(相對于kubernetes而言,主要指集群外)服務(wù),使第三方服務(wù)通過統(tǒng)一的方式和規(guī)范接入到集群中,具體的服務(wù)實現(xiàn)在外部,托管方無需關(guān)注。外部的服務(wù)一般通過Service Broker的方式接入到服務(wù)目錄。

Service Catalog的動作

  • 創(chuàng)建ClusterServiceBroker
    通過ClusterServiceBroker將托管服務(wù)的代理配置到集群中,創(chuàng)建后會觸發(fā)ServiceBrokerCatalog獲取服務(wù)列表和ServicePlan,并將其以ClusterServiceClassClusterServicePlan存儲到本地

  • 創(chuàng)建ServiceInstance
    通過創(chuàng)建ServiceInstance向代理發(fā)起創(chuàng)建實例請求

  • 服務(wù)綁定
    將需要使用托管服務(wù)的應(yīng)用和托管服務(wù)綁定,生成secret,掛載到應(yīng)用中

Service Broker的動作

  • Catalog
  • Provision
  • Bind
  • Unbind
  • Deprovision

在kuberntes中,接入后的服務(wù)將由kuberntes托管,典型的如數(shù)據(jù)庫。Service Catalog的元數(shù)據(jù)存在etcd中,建議不和kubernetes本身的共用。要是使用Service Catalog,首先要注冊APIService資源(servicecatalog.k8s.io

service catalog

APIService中包含的資源類型

  • ClusterServiceBroker:ServiceBroker在集群內(nèi)的編排模板,封裝了其服務(wù)器連接詳細(xì)信息。主要是有由集群管理員創(chuàng)建的外部服務(wù)在集群中的代理。

  • ClusterServiceClass:外部服務(wù)會有不同的服務(wù)實例和類型,ClusterServiceBroker連接到ServiceBroker,通過catalog獲取該broker的服務(wù)列表,為每個具體服務(wù)創(chuàng)建ClusterServiceClass。

  • ClusterServicePlan:主要描述各個服務(wù)的計量計費標(biāo)準(zhǔn)和方式,一個ClusterServiceClass對應(yīng)一個ClusterServicePlan。

  • ServiceInstance:對應(yīng)具體的服務(wù)實例的預(yù)配置實例,由Service Catalog控制器負(fù)責(zé)與外部的service broker通信,通知創(chuàng)建實例,綁定,在kubernetes創(chuàng)建service與內(nèi)部應(yīng)用通信。

  • ServiceBinding:將ServiceInstance與需要訪問 的POD進(jìn)行綁定,關(guān)聯(lián)相關(guān)的證書到pod。

Service Catalog的認(rèn)證方式

使用步驟
集群管理員通過Service Catalog API Resources提供托管能力,使之在kubernetes中提供服務(wù)。

  • 從ServiceBroker中獲取服務(wù)列表(ClusterServiceClass)以及對應(yīng)的ClusterServicePlan
    首先,集群管理員創(chuàng)建ClusterServiceBroker,其中包含URL和訪問ServiceBroker地址必要的連接信息

    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.
      #####
    

    下面的時序圖說明從service broker獲取服務(wù)列表(ClusterServiceClass)和對應(yīng)的ClusterServicePlan的流程

    image.png

    ①.一旦ClusterServiceBroker被添加到Service Catalog,將會觸發(fā)一次對外部ServiceBroker的調(diào)用,來獲取服務(wù)列表

    ②.外部ServiceBroker會返回一系列的可用服務(wù)以及對應(yīng)的ServicePlan,這些服務(wù)和ServicePlan,將會以ClusterServiceClassClusterServicePlan

    ③.集群管理員通過如下命令獲取可用的服務(wù)列表和ServicePlan

     kubectl get clusterserviceclasses -o=custom-columns=SERVICE\ NAME:.metadata.name,EXTERNAL\ NAME:.spec.externalName
     kubectl get clusterserviceplans -o=custom-columns=PLAN\ NAME:.metadata.name,EXTERNAL\ NAME:.spec.externalName
    
  • 開通服務(wù)實例
    群集操作員可以通過創(chuàng)建ServiceInstance資源來啟動新實例。例如:

    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.
      #####
    

    以下序列圖說明了創(chuàng)建托管服務(wù)的實例所涉及的步驟


    image.png

    ①當(dāng)ServiceInstance 被創(chuàng)建時,Service Catalog會對Service broker發(fā)起調(diào)用,來創(chuàng)建服務(wù)實例請求
    ②Service broker執(zhí)行創(chuàng)建服務(wù)實例的動作,返回HTTP響應(yīng)結(jié)果
    ③集群操作員可以檢查實例的狀態(tài),看看它是否ready。

  • 綁定到托管服務(wù)
    在新的實例創(chuàng)建之后,集群管理員需要綁定托管的服務(wù),應(yīng)用程序才能獲取所需要的連接信息和賬戶信息,此過程通過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.
        #####
    

    以下序列圖說明綁定到托管服務(wù)實例所涉及的步驟:

    image.png

    ServiceBinding被創(chuàng)建之后,Service Catalog調(diào)用外部的service broker獲取綁定實例的必要信息
    service broker為請求創(chuàng)建合適的賬戶信息
    service broker返回連接和訪問托管服務(wù)的必要信息,由于服務(wù)提供方和使用時特定的,所以不同的請求返回的信息可能會不一樣。

  • 映射連接憑證
    綁定之后,最后一步將連接憑據(jù)和特定于服務(wù)的信息映射到應(yīng)用程序中。這些信息存儲在secrets中,集群中的應(yīng)用程序可以通過secrets直接連接和訪問托管服務(wù)。

    image.png

    執(zhí)行映射的方式如下

    ...
      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"
    

2.在kubernetes中安裝Service Catalog的CRD

[root@node4 repo]# helm repo add svc-cat https://svc-catalog-charts.storage.googleapis.com
"svc-cat" has been added to your repositories
[root@node4 repo]# helm search repo 
NAME                    CHART VERSION   APP VERSION DESCRIPTION                                       
svc-cat/catalog         0.2.1                       service-catalog API server and controller-manag...
svc-cat/catalog-v0.2    0.2.2                       service-catalog API server and controller-manag...
svc-cat/healthcheck     0.2.1                       HealthCheck monitors the health of Service Catalog
svc-cat/test-broker     0.2.1                       test service-broker deployment Helm chart.        
svc-cat/ups-broker      0.2.1                       user-provided service-broker deployment Helm ch...
[root@node4 repo]# helm install catalog  repo/catalog
NAME: catalog
LAST DEPLOYED: Fri Nov 22 15:07:16 2019
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
[root@node4 repo]# helm ls
NAME    NAMESPACE   REVISION    UPDATED                                 STATUS      CHART           APP VERSION
catalog default     1           2019-11-25 09:42:08.419781746 +0800 CST deployed    catalog-0.2.1   
[root@node4 repo]# kubectl get pod 
NAME                                                  READY   STATUS    RESTARTS   AGE
catalog-catalog-apiserver-548d58d5bb-dp764            0/2     Running   0          5s
catalog-catalog-controller-manager-7d4f797fbb-2sltc   0/1     Running   0          5s
[root@node4 repo]# kubectl get svc
NAME                                 TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)         AGE
catalog-catalog-apiserver            NodePort    172.20.250.33    <none>        443:30443/TCP   4m9s
catalog-catalog-controller-manager   ClusterIP   172.20.71.121    <none>        443/TCP         4m9s
#其他的會創(chuàng)建RoleBinding(當(dāng)前命名空間和kube-system   )、role、ClusterRoleBinding、ClusterRole、ServiceAccount、Secret、APIService

3.Service Broker實例

Service Broker實現(xiàn)主要要遵守上面提到的5個接口,當(dāng)然也有許多的SDK,方便開發(fā)者實現(xiàn)各自的broker,例如:

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容