tencent cloud


Service CLB Configuration

Last updated: 2022-03-30 18:28:39


    TkeServiceConfig is a Custom Resource Definition (CRD) provided by TKE. TkeServiceConfig can help you configure LoadBalancer-type Services more flexibly and manage various CLB configurations in them.

    Use cases

    CLB parameters and features that cannot be defined by Service YAML semantics can be configured through TkeServiceConfig.

    Configuration instructions

    TkeServiceConfig can help you quickly perform CLB configuration. Through the Service annotation service.cloud.tencent.com/tke-service-config:, you can specify the target configuration and apply it to the Service.


    TkeServiceConfig resources and the Service need to be in the same namespace.

    TkeServiceConfig does not help you directly configure or modify protocols and ports. You need to describe protocols and ports in the configuration in order to deliver the specified configuration to the listener. You can declare multiple sets of listener configurations in a single TkeServiceConfig. Currently, configurations are mainly provided for CLB health check and backend access.
    When the protocol and port are specified, the configuration will be accurately delivered to the corresponding listener:

    • spec.loadBalancer.l4Listeners.protocol: layer-4 protocol
    • spec.loadBalancer.l4Listeners.port: listening port

    Associated Actions Between Service and TkeServiceConfig

    1. During the creation of a Loadbalancer-type Service, if you set annotation service.cloud.tencent.com/tke-service-config-auto: "true", -auto-service-config will be automatically created. Alternatively, you can specify your own created TkeServiceConfig through service.cloud.tencent.com/tke-service-config:. These two annotations cannot be used at the same time.
    2. The automatically created TkeServiceConfig has the following sync behaviors:
    • When a layer-4 listener is added during Service resource update, if there is no corresponding TkeServiceConfig configuration segment for the listener or forwarding rule, Service-Controller will automatically add the corresponding TkeServiceConfig configuration segment.
    • When a layer-4 listener is deleted, Service-Controller will automatically delete the corresponding TkeServiceConfig segment.
    • When Service resources are deleted, the corresponding TkeServiceConfig will also be deleted.
    • When you modify the default TkeServiceConfig of the Service, the TkeServiceConfig content will also be applied to the CLB.
    1. You can also refer to the following complete TkeServiceConfig configuration and create your own desired CLB configuration. Services will import the configuration through the annotation service.cloud.tencent.com/tke-service-config:.
    2. A manually created TkeServiceConfig has the following sync behaviors:
    • When you add a configuration annotation in the Service, the CLB will immediately set synchronization.
    • When you delete a configuration annotation in the Service, the CLB will remain unchanged.
    • When you modify the TkeServiceConfig configuration, the CLB of the Service that imported the configuration will set synchronization based on the new TkeServiceConfig.
    • If the Service listener does not find the corresponding configuration, the listener will not be modified.
    • If the Service listener finds the corresponding configuration but the configuration does not contain specified attributes, the listener will not be modified.

    Complete Configuration Reference

    apiVersion: cloud.tencent.com/v1alpha1
    kind: TkeServiceConfig
      name: sample # Configuration name
      namespace: default # Configuration namespace
        l4Listeners: # Layer-4 rule configuration, applicable to Service listener configuration.
        - protocol: TCP # Layer-4 rule for protocol ports anchoring the Service. Required. Enumerated value: TCP|UDP.
          port: 80 # Required. Value range: 1-65535.
          session: # Configuration related to session persistence. Optional.
            enable: true # Indicates whether to enable session persistence. Required. Boolean.
            sessionExpireTime: 100 # Session persistence duration. Optional. Default value: 30. Value range: 30-3600. Unit: second.
          healthCheck: # Configuration related to health check. Optional.
            enable: true # Indicates whether to enable health check. Required. Boolean.
            intervalTime: 10 # Health check probe interval. Optional. Default value: 5. Value range: 5-300. Unit: second.
            healthNum: 2 # Healthy threshold, indicating the number of consecutive healthy health check results that it takes to indicate normal forwarding. Optional. Default value: 3. Value range: 2-10. Unit: times.
            unHealthNum: 3 # Unhealthy threshold, indicating the number of consecutive unhealthy health check results that it takes to indicate a forwarding exception. Optional. Default value: 3. Value range: 2-10. Unit: times.
            timeout: 10 # Health check response timeout threshold. This should be less than the health check interval. Optional. Default value: 2. Value range: 2-60. Unit: second.
          scheduler: WRR # Request forwarding method. WRR, LEAST_CONN, and IP_HASH indicate polling by weight, least connections, and hashing by IP address, respectively. Optional. Enumerated value: WRR | LEAST_CONN.
        internetMaxBandwidthOut: 100 # Max egress bandwidth, valid only for public network LBs. Optional. Value range: 0-2048. Unit: Mbps.


    Sample deployment: jetty-deployment.yaml

    apiVersion: apps/v1
    kind: Deployment
        app: jetty
      name: jetty-deployment
      namespace: default
      progressDeadlineSeconds: 600
      replicas: 3
      revisionHistoryLimit: 10
          app: jetty
          maxSurge: 25%
          maxUnavailable: 25%
        type: RollingUpdate
          creationTimestamp: null
            app: jetty
          - image: jetty:9.4.27-jre11
            imagePullPolicy: IfNotPresent
            name: jetty
            - containerPort: 80
              protocol: TCP
            - containerPort: 443
              protocol: TCP
            resources: {}
            terminationMessagePath: /dev/termination-log
            terminationMessagePolicy: File
          dnsPolicy: ClusterFirst
          restartPolicy: Always
          schedulerName: default-scheduler
          securityContext: {}
          terminationGracePeriodSeconds: 30

    Sample Service: jetty-service.yaml

    apiVersion: v1
    kind: Service
        service.cloud.tencent.com/tke-service-config: jetty-service-config 
        # Specify the existing `tke-service-config`
        # service.cloud.tencent.com/tke-service-config-auto: true 
        # Automatically create a `tke-service-config`
      name: jetty-service
      namespace: default
      - name: tcp-80-80
        port: 80
        protocol: TCP
        targetPort: 80
      - name: tcp-443-443
        port: 443
        protocol: TCP
        targetPort: 443
        app: jetty
      type: LoadBalancer

    This sample includes the following configurations:

    • The Service is of the public network LoadBalancer type, with two TCP services declared: one on port 80 and the other on port 443.
    • The jetty-service-config CLB configuration is used.

    TkeServiceConfig sample: jetty-service-config.yaml

    apiVersion: cloud.tencent.com/v1alpha1
    kind: TkeServiceConfig
      name: jetty-service-config
      namespace: default
        - protocol: TCP
          port: 80
            enable: false
        - protocol: TCP
          port: 443
            enable: true
            sessionExpireTime: 3600
            enable: true
            intervalTime: 10
            healthNum: 2
            unHealthNum: 2
            timeout: 5
          scheduler: WRR

    This sample includes the following configurations:
    The name is jetty-service-config, and in the layer-4 listener configuration, two configuration segments are declared:

    1. The TCP listener of port 80 will be configured.
      Health check is disabled.
    2. The TCP listener of port 443 will be configured.
    • Health check is enabled, with the health check interval set to 10s, the healthy threshold set to 2 times, the unhealthy threshold also set to 2 times, and the timeout threshold set to 5s.
    • The session persistence feature is enabled, with the timeout period set to 3,600s.
    • The forwarding policy is configured as "weighted round robin".

    kubectl configuration commands

    ➜ kubectl apply -f jetty-deployment.yaml
    ➜ kubectl apply -f jetty-service.yaml
    ➜ kubectl apply -f jetty-service-config.yaml
    ➜ kubectl get pods
    NAME                                READY   STATUS    RESTARTS   AGE
    jetty-deployment-8694c44b4c-cxscn   1/1     Running   0          8m8s
    jetty-deployment-8694c44b4c-mk285   1/1     Running   0          8m8s
    jetty-deployment-8694c44b4c-rjrtm   1/1     Running   0          8m8s
    ➜ kubectl get service jetty
    NAME    TYPE           CLUSTER-IP       EXTERNAL-IP       PORT(S)                      AGE
    jetty   LoadBalancer   80:31338/TCP,443:32373/TCP   2m47s
    # Get the `TkeServiceConfig` configuration list
    ➜ kubectl get tkeserviceconfigs.cloud.tencent.com
    NAME                   AGE
    jetty-service-config   52s
    # Update and modify the `TkeServiceConfig` configuration
    ➜ kubectl edit tkeserviceconfigs.cloud.tencent.com jetty-service-config
    TkeServiceConfig.cloud.tencent.com/jetty-service-config edited

    Contact Us

    Contact our sales team or business advisors to help your business.

    Technical Support

    Open a ticket if you're looking for further assistance. Our Ticket is 7x24 avaliable.

    7x24 Phone Support