使用 nginx ingress SSL 直通底层服务时缺少主机名 (SNI)
Hostname (SNI) missing while using nginx ingress SSL Passtrough to underlying service
我正在尝试使用 nginx-ingress-controller
实现 SSL 通道。这是我的 Ingress 对象:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/backend-protocol: HTTPS
nginx.ingress.kubernetes.io/ssl-passthrough: "true"
nginx.ingress.kubernetes.io/ssl-redirect: "true"
labels:
my-label: example
name: example
namespace: example
spec:
rules:
- host: '*.example.com'
http:
paths:
- backend:
serviceName: example
servicePort: 8443
path: /
控制器参数中存在 --enable-ssl-passtrough
标志。
当请求通过入口控制器到达我的底层服务时,我正在尝试解析 SNI 以找出使用哪个域来找出我应该出示的证书,但该服务找不到 SNI 和 returns 这个错误:
{"level":"debug","ts":1592992137.1836417,"msg":"Error getting server name","error":"No hostname"}
解析时nginx-ingress-controller
是否去掉SNI?或者这种行为的原因可能是什么?
在此先感谢您的帮助
我直接联系了 nginx-ingress 开发人员,我得到的信息是这不起作用的原因是 nginx-ingress
不支持的通配符域。
其他所有配置都正确,当将 *.example.com
更改为特定内容(例如 whatever.example.com
)时,它可以正常工作。
我正在尝试使用 nginx-ingress-controller
实现 SSL 通道。这是我的 Ingress 对象:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/backend-protocol: HTTPS
nginx.ingress.kubernetes.io/ssl-passthrough: "true"
nginx.ingress.kubernetes.io/ssl-redirect: "true"
labels:
my-label: example
name: example
namespace: example
spec:
rules:
- host: '*.example.com'
http:
paths:
- backend:
serviceName: example
servicePort: 8443
path: /
控制器参数中存在 --enable-ssl-passtrough
标志。
当请求通过入口控制器到达我的底层服务时,我正在尝试解析 SNI 以找出使用哪个域来找出我应该出示的证书,但该服务找不到 SNI 和 returns 这个错误:
{"level":"debug","ts":1592992137.1836417,"msg":"Error getting server name","error":"No hostname"}
解析时nginx-ingress-controller
是否去掉SNI?或者这种行为的原因可能是什么?
在此先感谢您的帮助
我直接联系了 nginx-ingress 开发人员,我得到的信息是这不起作用的原因是 nginx-ingress
不支持的通配符域。
其他所有配置都正确,当将 *.example.com
更改为特定内容(例如 whatever.example.com
)时,它可以正常工作。