kubernetes Service Catalog

1.Service Catalog

中文叫服务目录,是将各种形态服务(包括IAAS、PAAS等服务)集中统一的管理起来,其目的主要是为了管理第三方(相对于kubernetes而言,主要指集群外)服务,使第三方服务通过统一的方式和规范接入到集群中,具体的服务实现在外部,托管方无需关注。外部的服务一般通过Service Broker的方式接入到服务目录。

Service Catalog的动作

  • 创建ClusterServiceBroker
    通过ClusterServiceBroker将托管服务的代理配置到集群中,创建后会触发ServiceBrokerCatalog获取服务列表和ServicePlan,并将其以ClusterServiceClassClusterServicePlan存储到本地

  • 创建ServiceInstance
    通过创建ServiceInstance向代理发起创建实例请求

  • 服务绑定
    将需要使用托管服务的应用和托管服务绑定,生成secret,挂载到应用中

Service Broker的动作

  • Catalog
  • Provision
  • Bind
  • Unbind
  • Deprovision

在kuberntes中,接入后的服务将由kuberntes托管,典型的如数据库。Service Catalog的元数据存在etcd中,建议不和kubernetes本身的共用。要是使用Service Catalog,首先要注册APIService资源(servicecatalog.k8s.io

service catalog

APIService中包含的资源类型

  • ClusterServiceBroker:ServiceBroker在集群内的编排模板,封装了其服务器连接详细信息。主要是有由集群管理员创建的外部服务在集群中的代理。

  • ClusterServiceClass:外部服务会有不同的服务实例和类型,ClusterServiceBroker连接到ServiceBroker,通过catalog获取该broker的服务列表,为每个具体服务创建ClusterServiceClass。

  • ClusterServicePlan:主要描述各个服务的计量计费标准和方式,一个ClusterServiceClass对应一个ClusterServicePlan。

  • ServiceInstance:对应具体的服务实例的预配置实例,由Service Catalog控制器负责与外部的service broker通信,通知创建实例,绑定,在kubernetes创建service与内部应用通信。

  • ServiceBinding:将ServiceInstance与需要访问 的POD进行绑定,关联相关的证书到pod。

Service Catalog的认证方式

使用步骤
集群管理员通过Service Catalog API Resources提供托管能力,使之在kubernetes中提供服务。

  • 从ServiceBroker中获取服务列表(ClusterServiceClass)以及对应的ClusterServicePlan
    首先,集群管理员创建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获取服务列表(ClusterServiceClass)和对应的ClusterServicePlan的流程

    image.png

    ①.一旦ClusterServiceBroker被添加到Service Catalog,将会触发一次对外部ServiceBroker的调用,来获取服务列表

    ②.外部ServiceBroker会返回一系列的可用服务以及对应的ServicePlan,这些服务和ServicePlan,将会以ClusterServiceClassClusterServicePlan

    ③.集群管理员通过如下命令获取可用的服务列表和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
    
  • 开通服务实例
    群集操作员可以通过创建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.
      #####
    

    以下序列图说明了创建托管服务的实例所涉及的步骤


    image.png

    ①当ServiceInstance 被创建时,Service Catalog会对Service broker发起调用,来创建服务实例请求
    ②Service broker执行创建服务实例的动作,返回HTTP响应结果
    ③集群操作员可以检查实例的状态,看看它是否ready。

  • 绑定到托管服务
    在新的实例创建之后,集群管理员需要绑定托管的服务,应用程序才能获取所需要的连接信息和账户信息,此过程通过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.
        #####
    

    以下序列图说明绑定到托管服务实例所涉及的步骤:

    image.png

    ServiceBinding被创建之后,Service Catalog调用外部的service broker获取绑定实例的必要信息
    service broker为请求创建合适的账户信息
    service broker返回连接和访问托管服务的必要信息,由于服务提供方和使用时特定的,所以不同的请求返回的信息可能会不一样。

  • 映射连接凭证
    绑定之后,最后一步将连接凭据和特定于服务的信息映射到应用程序中。这些信息存储在secrets中,集群中的应用程序可以通过secrets直接连接和访问托管服务。

    image.png

    执行映射的方式如下

    ...
      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
#其他的会创建RoleBinding(当前命名空间和kube-system   )、role、ClusterRoleBinding、ClusterRole、ServiceAccount、Secret、APIService

3.Service Broker实例

Service Broker实现主要要遵守上面提到的5个接口,当然也有许多的SDK,方便开发者实现各自的broker,例如:

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,117评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,328评论 1 293
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,839评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,007评论 0 206
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,384评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,629评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,880评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,593评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,313评论 1 243
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,575评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,066评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,392评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,052评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,082评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,844评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,662评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,575评论 2 270

推荐阅读更多精彩内容