Using Annotations to Configure Load Balancing
You can add annotations to a YAML file to use some CCE advanced functions. This section describes the available annotations when a LoadBalancer service is created.
- Interconnection with ELB
- Sticky Session
- Health Check
- HTTP Protocol
- Dynamic Adjustment of the Weight of the Backend ECS
- Pass-through Capability
- Host Network
- Timeout
Interconnection with ELB
Parameter |
Type |
Description |
Supported Cluster Version |
---|---|---|---|
kubernetes.io/elb.class |
String |
Select a proper load balancer type.
|
v1.9 or later |
kubernetes.io/elb.id |
String |
Mandatory when an existing load balancer is to be associated. ID of a load balancer. How to obtain: On the management console, click Service List, and choose Networking > Elastic Load Balance. Click the name of the target load balancer. On the Summary tab page, find and copy the ID.
NOTE:
The system preferentially connects to the load balancer based on the kubernetes.io/elb.id field. If this field is not specified, the spec.loadBalancerIP field is used (optional and available only in 1.23 and earlier versions). Do not use the spec.loadBalancerIP field to connect to the load balancer. This field will be discarded by Kubernetes. For details, see Deprecation. |
v1.9 or later |
kubernetes.io/elb.autocreate |
Mandatory when load balancers are automatically created. Example:
|
v1.9 or later |
|
kubernetes.io/elb.enterpriseID |
String |
Optional when load balancers are automatically created. Clusters of v1.15 and later versions support this field. In clusters earlier than v1.15, load balancers are created in the default project by default. This parameter indicates the ID of the enterprise project in which the ELB load balancer will be created. If this parameter is not specified or is set to 0, resources will be bound to the default enterprise project. How to obtain: Log in to the EPS console. In the navigation pane, choose Project Management. In the enterprise project list, click the name of the enterprise project to be added. On the enterprise project details page, copy the project ID. |
v1.15 or later |
kubernetes.io/elb.subnet-id |
String |
Optional when load balancers are automatically created. ID of the subnet where the cluster is located. The value can contain 1 to 100 characters.
|
Mandatory for versions earlier than v1.11.7-r0 Discarded in versions later than v1.11.7-r0 |
kubernetes.io/elb.lb-algorithm |
String |
Specifies the load balancing algorithm of the backend server group. The default value is ROUND_ROBIN. Options:
NOTE:
If this parameter is set to SOURCE_IP, the weight setting (weight field) of backend servers bound to the backend server group is invalid, and sticky session cannot be enabled. |
v1.9 or later |
The following shows how to use the preceding annotations:
- Associating an existing load balancer. For details, see Using kubectl to Create a Service (Using an Existing Load Balancer).
apiVersion: v1 kind: Service metadata: name: nginx annotations: kubernetes.io/elb.id: <your_elb_id> # ELB ID. Replace it with the actual value. kubernetes.io/elb.class: performance # Load balancer type kubernetes.io/elb.lb-algorithm: ROUND_ROBIN # Load balancer algorithm spec: selector: app: nginx ports: - name: service0 port: 80 protocol: TCP targetPort: 80 type: LoadBalancer
- Automatically creating a load balancer. For details, see Using kubectl to Create a Service (Automatically Creating a Load Balancer).
Shared load balancer:
apiVersion: v1 kind: Service metadata: annotations: kubernetes.io/elb.class: union kubernetes.io/elb.autocreate: '{ "type": "public", "bandwidth_name": "cce-bandwidth-1551163379627", "bandwidth_chargemode": "bandwidth", "bandwidth_size": 5, "bandwidth_sharetype": "PER", "eip_type": "5_bgp" }' kubernetes.io/elb.enterpriseID: '0' # ID of the enterprise project to which the load balancer belongs kubernetes.io/elb.lb-algorithm: ROUND_ROBIN # Load balancer algorithm labels: app: nginx name: nginx spec: ports: - name: service0 port: 80 protocol: TCP targetPort: 80 selector: app: nginx type: LoadBalancer
Dedicated load balancer:apiVersion: v1 kind: Service metadata: name: nginx labels: app: nginx namespace: default annotations: kubernetes.io/elb.class: performance kubernetes.io/elb.autocreate: '{ "type": "public", "bandwidth_name": "cce-bandwidth-1626694478577", "bandwidth_chargemode": "bandwidth", "bandwidth_size": 5, "bandwidth_sharetype": "PER", "eip_type": "5_bgp", "available_zone": [ "" ], "l4_flavor_name": "L4_flavor.elb.s1.small" }' kubernetes.io/elb.enterpriseID: '0' # ID of the enterprise project to which the load balancer belongs kubernetes.io/elb.lb-algorithm: ROUND_ROBIN # Load balancer algorithm spec: selector: app: nginx ports: - name: cce-service-0 targetPort: 80 nodePort: 0 port: 80 protocol: TCP type: LoadBalancer
Sticky Session
Parameter |
Type |
Description |
Supported Cluster Version |
---|---|---|---|
kubernetes.io/elb.session-affinity-mode |
String |
Source IP address-based sticky session is supported. That is, access requests from the same IP address are forwarded to the same backend server.
NOTE:
When kubernetes.io/elb.lb-algorithm is set to SOURCE_IP (source IP address algorithm), sticky session cannot be enabled. |
v1.9 or later |
kubernetes.io/elb.session-affinity-option |
Sticky session timeout. |
v1.9 or later |
apiVersion: v1 kind: Service metadata: name: nginx annotations: kubernetes.io/elb.id: <your_elb_id> # ELB ID. Replace it with the actual value. kubernetes.io/elb.class: union # Load balancer type kubernetes.io/elb.session-affinity-mode: SOURCE_IP # The sticky session type is source IP address. kubernetes.io/elb.session-affinity-option: '{"persistence_timeout": "30"}' # Stickiness duration (min) spec: selector: app: nginx ports: - name: service0 port: 80 protocol: TCP targetPort: 80 type: LoadBalancer
Health Check
Parameter |
Type |
Description |
Supported Cluster Version |
---|---|---|---|
kubernetes.io/elb.health-check-flag |
String |
Whether to enable the ELB health check.
If this parameter is enabled, the kubernetes.io/elb.health-check-option field must also be specified at the same time. |
v1.9 or later |
kubernetes.io/elb.health-check-option |
ELB health check configuration items. |
v1.9 or later |
|
kubernetes.io/elb.health-check-options |
ELB health check configuration item. Each Service port can be configured separately, and you can configure only some ports.
NOTE:
kubernetes.io/elb.health-check-option and kubernetes.io/elb.health-check-options cannot be configured at the same time. |
v1.19.16-r5 or later v1.21.8-r0 or later v1.23.6-r0 or later v1.25.2-r0 or later |
- The following shows how to use kubernetes.io/elb.health-check-option:
apiVersion: v1 kind: Service metadata: name: nginx annotations: kubernetes.io/elb.id: <your_elb_id> # ELB ID. Replace it with the actual value. kubernetes.io/elb.class: union # Load balancer type kubernetes.io/elb.health-check-flag: 'on' # Enable the ELB health check function. kubernetes.io/elb.health-check-option: '{ "protocol":"TCP", "delay":"5", "timeout":"10", "max_retries":"3" }' spec: selector: app: nginx ports: - name: service0 port: 80 protocol: TCP targetPort: 80 type: LoadBalancer
- For details about how to use kubernetes.io/elb.health-check-options, see Configuring Health Check for Multiple Ports.
HTTP Protocol
Parameter |
Type |
Description |
Supported Cluster Version |
---|---|---|---|
kubernetes.io/elb.protocol-port |
String |
Layer-7 forwarding configuration port used by the Service. |
v1.19.16 or later |
kubernetes.io/elb.cert-id |
String |
HTTP certificate used by the Service for Layer-7 forwarding. |
v1.19.16 or later |
For details about the application scenarios, see Service Using HTTP.
Dynamic Adjustment of the Weight of the Backend ECS
Parameter |
Type |
Description |
Supported Cluster Version |
---|---|---|---|
kubernetes.io/elb.adaptive-weight |
String |
Dynamically adjusts the weight of the load balancer backend ECS based on pods. The requests received by each pod are more balanced.
This parameter applies only to clusters of v1.21 or later and is invalid in passthrough networking. |
v1.21 or later |
apiVersion: v1 kind: Service metadata: name: nginx annotations: kubernetes.io/elb.id: <your_elb_id> # ELB ID. Replace it with the actual value. kubernetes.io/elb.class: union # Load balancer type kubernetes.io/elb.adaptive-weight: 'true' # Enable dynamic adjustment of the weight of the backend ECS. spec: selector: app: nginx ports: - name: service0 port: 80 protocol: TCP targetPort: 80 type: LoadBalancer
Pass-through Capability
Parameter |
Type |
Description |
Supported Cluster Version |
---|---|---|---|
kubernetes.io/elb.pass-through |
String |
Whether the access requests from within the cluster to the Service pass through the ELB load balancer. |
v1.19 or later |
For details about the application scenarios, see Enabling Passthrough Networking for LoadBalancer Services.
Host Network
Parameter |
Type |
Description |
Supported Cluster Version |
---|---|---|---|
kubernetes.io/hws-hostNetwork |
String |
If the pod uses hostNetwork, the ELB forwards the request to the host network after this annotation is used. Options:
|
v1.9 or later |
apiVersion: v1 kind: Service metadata: name: nginx annotations: kubernetes.io/elb.id: <your_elb_id> # ELB ID. Replace it with the actual value. kubernetes.io/elb.class: union # Load balancer type kubernetes.io/hws-hostNetwork: 'true' # The load balancer forwards the request to the host network. spec: selector: app: nginx ports: - name: service0 port: 80 protocol: TCP targetPort: 80 type: LoadBalancer
Timeout
Parameter |
Type |
Description |
Supported Cluster Version |
---|---|---|---|
kubernetes.io/elb.keepalive_timeout |
Integer |
Timeout for client connections. If there are no requests reaching the load balancer after the timeout duration elapses, the load balancer will disconnect the connection with the client and establish a new connection when there is a new request. Value:
|
v1.19.16-r30, v1.21.10-r10, v1.23.8-r10, v1.25.3-r10, and later |
For details about the application scenarios, see Configuring Timeout for a LoadBalancer Service.
Data Structure
Parameter |
Mandatory |
Type |
Description |
---|---|---|---|
name |
No |
String |
Name of the automatically created load balancer. The value can contain 1 to 64 characters. Only letters, digits, underscores (_), hyphens (-), and periods (.) are allowed. Default: cce-lb+service.UID |
type |
No |
String |
Network type of the load balancer.
Default: inner |
bandwidth_name |
Yes for public network load balancers |
String |
Bandwidth name. The default value is cce-bandwidth-******. The value can contain 1 to 64 characters. Only letters, digits, underscores (_), hyphens (-), and periods (.) are allowed. |
bandwidth_chargemode |
No |
String |
Bandwidth mode.
Default: bandwidth |
bandwidth_size |
Yes for public network load balancers |
Integer |
Bandwidth size. The default value is 1 to 2000 Mbit/s. Configure this parameter based on the bandwidth range allowed in your region.
The minimum increment for bandwidth adjustment varies depending on the bandwidth range.
|
bandwidth_sharetype |
Yes for public network load balancers |
String |
Bandwidth sharing mode.
|
eip_type |
Yes for public network load balancers |
String |
EIP type.
The specific type varies with regions. For details, see the EIP console. |
available_zone |
Yes |
Array of strings |
AZ where the load balancer is located. This parameter is available only for dedicated load balancers. |
l4_flavor_name |
Yes |
String |
Flavor name of the layer-4 load balancer. This parameter is available only for dedicated load balancers. |
l7_flavor_name |
No |
String |
Flavor name of the layer-7 load balancer. This parameter is available only for dedicated load balancers. The value of this parameter must be the same as that of l4_flavor_name, that is, both are elastic specifications or fixed specifications. |
elb_virsubnet_ids |
No |
Array of strings |
Subnet where the backend server of the load balancer is located. If this parameter is left blank, the default cluster subnet is used. Load balancers occupy different number of subnet IP addresses based on their specifications. Therefore, you are not advised to use the subnet CIDR blocks of other resources (such as clusters and nodes) as the load balancer CIDR block. This parameter is available only for dedicated load balancers. Example: "elb_virsubnet_ids": [ "14567f27-8ae4-42b8-ae47-9f847a4690dd" ] |
Parameter |
Mandatory |
Type |
Description |
---|---|---|---|
delay |
No |
String |
Initial waiting time (in seconds) for starting the health check. Value range: 1 to 50. Default value: 5 |
timeout |
No |
String |
Health check timeout, in seconds. Value range: 1 to 50. Default value: 10 |
max_retries |
No |
String |
Maximum number of health check retries. Value range: 1 to 10. Default value: 3 |
protocol |
No |
String |
Health check protocol. Value options: TCP or HTTP |
path |
No |
String |
Health check URL. This parameter needs to be configured when the protocol is HTTP. Default value: / The value can contain 1 to 10,000 characters. |
Parameter |
Mandatory |
Type |
Description |
---|---|---|---|
target_service_port |
Yes |
String |
Port for health check specified by spec.ports. The value consists of the protocol and port number, for example, TCP:80. |
monitor_port |
No |
String |
Re-specified port for health check. If this parameter is not specified, the service port is used by default.
NOTE:
Ensure that the port is in the listening state on the node where the pod is located. Otherwise, the health check result will be affected. |
delay |
No |
String |
Initial waiting time (in seconds) for starting the health check. Value range: 1 to 50. Default value: 5 |
timeout |
No |
String |
Health check timeout, in seconds. Value range: 1 to 50. Default value: 10 |
max_retries |
No |
String |
Maximum number of health check retries. Value range: 1 to 10. Default value: 3 |
protocol |
No |
String |
Health check protocol. Default value: protocol of the associated Service Value options: TCP, UDP, or HTTP |
path |
No |
String |
Health check URL. This parameter needs to be configured when the protocol is HTTP. Default value: / The value can contain 1 to 10,000 characters. |
Feedback
Was this page helpful?
Provide feedbackThank you very much for your feedback. We will continue working to improve the documentation.See the reply and handling status in My Cloud VOC.
For any further questions, feel free to contact us through the chatbot.
Chatbot