更新时间:2024-04-17 GMT+08:00

CCE.Service

模型说明

CCE.Service用于部署华为云PaaS层的K8S资源对象Service。通过创建Service,可为一组具有相同功能的容器应用提供一个统一的入口地址,并将请求进行负载分发到后端的各个容器应用上。

模型属性

表1 模型定义属性说明

属性

是否必选

描述

k8sManifest

kubernetes service描述文件

参数类型:dict

取值说明:用户自定义,建议更新时不要更改metadata下面的名称(name)和标签(labels)

使用建议:参考kubernetes官方文档 https://kubernetes.io/docs/concepts/services-networking/service

clusterId

资源所属集群的ID

参数类型:HuaweiCloud.CCE.Cluster.Id

取值说明:已有集群的ID或新建集群的ID

取值约束:满足UUID规则,最大64位

使用建议:1、通过get_reference自动获取,通过连线到cluster对象以get_reference自动获取; 2、不填写,在创建堆栈过程中,通过界面选取; 3、直接填写ID,CCE控制服务台-资源管理-虚拟机集群-查看集群-集群ID;

namespace

资源所属集群的命名空间

参数类型:string

取值说明:需为集群下有效的namespace,示例:default;如果定义k8sManifest,其值会被k8sManifest>metadata>namespace覆盖

取值约束:由小写字母、数字、和中划线组成,且必须以字母开头

使用建议:根据已有集群或即将创建集群自定义

关联关系

表2 关联关系说明

关系说明

关联节点

依赖关系

AOS.Batch

依赖关系

DCS.Redis

依赖关系

RDS.MySQL

依赖关系

CCE.Storage.EVS

依赖关系

OBS.Bucket

依赖关系

CCE.Storage.SFS

依赖关系

CCE.ConfigMap

依赖关系

CCE.Job

依赖关系

CCE.Storage.OBS

依赖关系

CCE.DaemonSet

依赖关系

CCE.Secret

依赖关系

CCE.Service

依赖关系

CCE.Ingress

依赖关系

CCE.StatefulSet

依赖关系

CCE.NodePool

依赖关系

CCE.Deployment

依赖关系

CCE.Pod

依赖关系

RDS.PostgreSQL

被包含关系

CCE.Cluster

关联关系

ULB.LoadBalancer

CCE.ServiceULB.LoadBalancer的关联关系:

  1. 编写service.yaml时,在metadata中的annotations字段中添加如下语句:kubernetes.io/elb.class: union;
  1. spec中的loadBalancerIP需要填写ULB的私网IP,ULB的私网IP可以通过get_attribute方式获取,例如loadBalancerIP: {get_attribute: [ULB.LoadBalancer元素名称, vip_address]}。

    通过负载均衡创建service具体可以参考公网访问-四层负载均衡

输出

属性

参数类型

描述

IP

数组

应用服务的ExternalIPs属性或LoadBalancerIP属性的值

Port

数组

应用服务的NodePort属性的值

refName

string

应用服务的名称

blueprint样例

tosca_definitions_version: huaweicloud_tosca_version_1_0
inputs:
  labels:
    description: 应用实例标签,需和service中的selector参数下设置的标签一致
    label: 工作负载
    default: test
  deploymentName:
    description: 工作负载名称 
    label: 工作负载
    default: deployment-test
  image:
    description: 应用镜像地址
    label: 工作负载
  ingressName:
    description: ingress名称
    label: 入口信息
    default: ingress-test
  host:
    description: ingress host域名信息
    label: 入口信息
    default: test.com
  secretName:
    description: 密钥名称
    label: 入口信息
    type: HuaweiCloud.ECS.KeyPair.Name
  serviceName:
    description: 服务名称
    label: 网络服务
    default: service-test
  servicePort:
    description: 服务端口
    label: 网络服务
    default: 8888
    type: integer
  path:
    description: 应用路由
    label: 网络服务
    default: /test
  protocol:
    description: 服务协议,只能填写TCP或者UDP
    label: 网络服务
    default: TCP
  targetPort:
    description: 应用本身开放服务端口
    label: 网络服务
    default: 8888
    type: integer
node_templates:
  my-deployment:
    properties:
      k8sManifest:
        apiVersion: apps/v1
        kind: Deployment
        metadata:
          labels:
            app:
              get_input: labels
          name:
            get_input: deploymentName
        spec:
          replicas: 1
          selector:
            matchLabels:
              app:
                get_input: labels
          strategy:
            rollingUpdate:
              maxSurge: 0
              maxUnavailable: 1
            type: RollingUpdate
          template:
            metadata:
              labels:
                app:
                  get_input: labels
            spec:
              containers:
                - image:
                    get_input: image
                  imagePullPolicy: IfNotPresent
                  name: nginx
    requirements: []
    type: HuaweiCloud.CCE.Deployment
  my-ingress:
    properties:
      k8sManifest:
        apiVersion: extensions/v1beta1
        kind: Ingress
        metadata:
          annotations:
            ingress.beta.kubernetes.io/role: data
            ingress.kubernetes.io/secure-backends: 'false'
          labels:
            isExternal: 'true'
            zone: data
          name:
            get_input: ingressName
        spec:
          rules:
            - host:
                get_input: host
              http:
                paths:
                  - backend:
                      serviceName:
                        get_input: serviceName
                      servicePort:
                        get_input: servicePort
                    path:
                      get_input: path
          tls:
            - secretName:
                get_input: secretName
              hosts:
                - get_input: host
    requirements:
      - dependency:
          node: my-service
    type: HuaweiCloud.CCE.Ingress
  my-service:
    properties:
      k8sManifest:
        apiVersion: v1
        kind: Service
        metadata:
          name:
            get_input: serviceName
        spec:
          ports:
            - name:
                get_input: serviceName
              port:
                get_input: servicePort
              protocol:
                get_input: protocol
              targetPort:
                get_input: targetPort
          selector:
            app:
              get_input: labels
          sessionAffinity: ClientIP
          type: ClusterIP
    requirements:
      - dependency:
          node: my-deployment
    type: HuaweiCloud.CCE.Service