An SNI certificate is an extended server certificate that allows the same IP address and port number to provide multiple access domain names for external systems. Different security certificates can be used based on the domain names requested by clients to ensure HTTPS communication security.
When configuring SNI, you need to add a certificate associated with a domain name. The client submits the requested domain name information when initiating an SSL handshake request. After receiving the SSL request, the load balancer searches for the certificate based on the domain name. If the certificate is found, the load balancer will return it to the client. If the certificate is not found, the load balancer will return the default server certificate.
After SNI is configured, if you delete the SNI configuration on the CCE console or delete the target annotation from the YAML file, the configuration on the ELB will be retained.
If the server cannot find an SNI certificate matching the client-requested domain name, it will return the default server certificate.
apiVersion: v1
kind: Service
metadata:
name: test
labels:
app: test
namespace: default
annotations:
kubernetes.io/elb.class: performance # Load balancer type
kubernetes.io/elb.id: 65318265-4f01-4541-a654-fa74e439dfd3 # ID of an existing load balancer
kubernetes.io/elb.protocol-port: https:80 # Port where SNI is to be enabled
kubernetes.io/elb.cert-id: b64ab636f1614e1a960b5249c497a880 # HTTPS server certificate
kubernetes.io/elb.tls-certificate-ids: 5196aa70b0f143189e4cb54991ba2286,8125d71fcc124aabbe007610cba42d60 # SNI certificate IDs
kubernetes.io/elb.lb-algorithm: ROUND_ROBIN
spec:
selector:
app: test
externalTrafficPolicy: Cluster
ports:
- name: cce-service-0
targetPort: 80
nodePort: 0
port: 80
protocol: TCP
type: LoadBalancer
loadBalancerIP: **.**.**.** # Private IP address of the load balancer
Parameter |
Type |
Description |
|---|---|---|
kubernetes.io/elb.protocol-port |
String |
If a Service is HTTP/HTTPS-compliant, configure the protocol and port number in the format of "protocol:port". where,
For example, to use SNI, the Service protocol must be https and the Service port must be 80. Therefore, the parameter value is https:80. |
kubernetes.io/elb.cert-id |
String |
ID of an ELB certificate, which is used as the HTTPS server certificate. How to obtain: Log in to the ELB console and choose Certificates. In the certificate list, copy the ID under the target certificate name. |
kubernetes.io/elb.tls-certificate-ids |
String |
In ELB, the IDs of SNI certificates that must contain a domain name are separated by commas (,). If the server cannot find an SNI certificate matching the client-requested domain name, it will return the default server certificate. How to obtain: Log in to the ELB console and choose Certificates. In the certificate list, copy the ID under the target certificate name. |
kubernetes.io/elb.client-ca-cert-id |
String |
Required only for mutual authentication. The ELB certificate ID serves as the CA certificate. How to obtain: Log in to the ELB console and choose Certificates. In the certificate list, copy the ID under the target certificate name. Dedicated load balancers are available in clusters of v1.23.14-r0, v1.25.9-r0, v1.27.6-r0, v1.28.4-r0, or later. |