Tencent Kubernetes Engine (TKE) supports existing Cloud Load Balancers (CLBs) by using the service.kubernetes.io/tke-existed-lbid: <LoadBalanceId>
annotation. You can use this annotation to specify a CLB instance to be associated with cluster service resources. TKE also provides the feature of CLB sharing by multiple services, which allows you to specify multiple services to share an existing CLB. To configure this feature, refer to the sample configuration in this document.
tke-createdBy-flag = yes
is configured for all CLBs created by services. When a service is terminated, the corresponding resources are deleted. If an existing CLB is used, this tag is not configured, and the corresponding resources are not deleted when the service is terminated.tke-clusterId =
is configured for all services. If the ClusterId is correct, the tag is deleted when the service is terminated.tke-clusterId: cls-xxxx
is retained for the CLB, and can only be cleared manually.apiVersion: v1
kind: Service
metadata:
annotations:
service.kubernetes.io/tke-existed-lbid: lb-6swtxxxx
name: nginx-service
spec:
ports:
- name: 80-80-no
port: 80
protocol: TCP
targetPort: 80
selector:
app: nginx
type: LoadBalancer
Note:
service.kubernetes.io/tke-existed-lbid: lb-6swtxxxx
indicates that the service uses an existing CLB for configuration.- Note that the service type must be set to
LoadBalancer
.
When the Service Controller component manages CLB lifecycles, it only supports the purchase of pay-as-you-go CLBs. When you need to use a CLB for a long term, the monthly subscription mode is more cost-effective. In such cases, you can purchase and manage CLBs independently, use annotations to control the use of existing CLBs by services, and remove CLB lifecycle management from the Service Controller component.
According to the official Kubernetes restrictions in service design, when multiple port protocols are opened under the same service, these protocols must be the same. In many game scenarios, users need to simultaneously open the TCP and UDP services in the same port. Tencent CLBs support simultaneous listening on UDP and TCP over the same port. This demand can be met through CLB sharing by multiple services.
For example, in the following service configuration, game-service
is described as two service resources. The descriptions are basically the same except for the protocols for listening. Both services specify the use of an existing CLB lb-6swtxxxx
through annotations. By applying the resources to a cluster through kubectl, multiple protocols can be exposed over the same CLB port.
apiVersion: v1
kind: Service
metadata:
annotations:
service.kubernetes.io/tke-existed-lbid: lb-6swtxxxx
name: game-service-a
spec:
ports:
- name: 80-80-tcp
port: 80
protocol: TCP
targetPort: 80
selector:
app: game
type: LoadBalancer
------------------------------------------------
apiVersion: v1
kind: Service
metadata:
annotations:
service.kubernetes.io/tke-existed-lbid: lb-6swtxxxx
name: game-service-b
spec:
ports:
- name: 80-80-udp
port: 80
protocol: UDP
targetPort: 80
selector:
app: game
type: LoadBalancer
Was this page helpful?