更新时间:2024-10-14 GMT+08:00
为ELB Ingress配置服务器名称指示(SNI)
SNI证书是一种扩展服务器证书,允许同一个IP地址和端口号下对外提供多个访问域名,可以根据客户端请求的不同域名来使用不同的安全证书,确保HTTPS通信的安全性。
在配置SNI时,用户需要添加绑定域名的证书,客户端会在发起SSL握手请求时就提交请求的域名信息,负载均衡收到SSL请求后,会根据域名去查找证书。如果找到域名对应的证书,则返回该证书;如果没有找到域名对应的证书,则返回服务器默认证书。
- 该功能仅支持1.15.11及以上版本的集群。
- 当使用HTTPS协议时,才支持配置SNI。
- 用于SNI的证书需要指定域名,每个证书只能指定一个域名。支持泛域名证书。
- 安全策略选择(kubernetes.io/elb.tls-ciphers-policy)仅在1.17.11及以上版本的集群中支持。
满足以上条件时可进行SNI配置,以自动创建关联ELB为例,yaml文件配置如下,本例中sni-test-secret-1、sni-test-secret-2为SNI证书,该证书指定的域名必须与证书中的域名一致。
1.21及以下版本集群:
apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: name: ingress-test annotations: kubernetes.io/elb.class: performance kubernetes.io/ingress.class: cce kubernetes.io/elb.port: '443' kubernetes.io/elb.autocreate: '{ "type": "public", "bandwidth_name": "cce-bandwidth-******", "bandwidth_chargemode": "bandwidth", "bandwidth_size": 5, "bandwidth_sharetype": "PER", "eip_type": "5_bgp", "available_zone": [ "" ], "elb_virsubnet_ids":["b4bf8152-6c36-4c3b-9f74-2229f8e640c9"], "l7_flavor_name": "L7_flavor.elb.s1.small" }' kubernetes.io/elb.tls-ciphers-policy: tls-1-2 spec: tls: - secretName: ingress-test-secret - hosts: - example.top #签发证书时指定域名为example.top secretName: sni-test-secret-1 - hosts: - example.com #签发证书时指定域名为example.com secretName: sni-test-secret-2 rules: - host: example.com http: paths: - path: '/' backend: serviceName: <your_service_name> #替换为您的目标服务名称 servicePort: 80 property: ingress.beta.kubernetes.io/url-match-mode: STARTS_WITH
1.23及以上版本集群:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: ingress-test annotations: kubernetes.io/elb.class: performance kubernetes.io/elb.port: '443' kubernetes.io/elb.autocreate: '{ "type": "public", "bandwidth_name": "cce-bandwidth-******", "bandwidth_chargemode": "bandwidth", "bandwidth_size": 5, "bandwidth_sharetype": "PER", "eip_type": "5_bgp", "available_zone": [ "" ], "elb_virsubnet_ids":["b4bf8152-6c36-4c3b-9f74-2229f8e640c9"], "l7_flavor_name": "L7_flavor.elb.s1.small" }' kubernetes.io/elb.tls-ciphers-policy: tls-1-2 spec: tls: - secretName: ingress-test-secret - hosts: - example.top #签发证书时指定域名为example.top secretName: sni-test-secret-1 - hosts: - example.com #签发证书时指定域名为example.com secretName: sni-test-secret-2 rules: - host: example.com http: paths: - path: '/' backend: service: name: <your_service_name> #替换为您的目标服务名称 port: number: 8080 #替换为您的目标服务端口 property: ingress.beta.kubernetes.io/url-match-mode: STARTS_WITH pathType: ImplementationSpecific ingressClassName: cce
父主题: ELB Ingress管理