更新时间:2024-12-04 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管理