我在kubernetes有两个服务,一个是mtls,另一个是tls。我正试着为他们配置一个入口。我想为mtls服务配置ssl通行证,但将tls服务保留在没有ssl-pass身的情况下,它不需要客户端证书。
我用两个不同的yaml文件在同一个主机名下配置了两个入口。一个有通,另一个没有通。
当前的行为是,如果我首先创建mtls入口,那么tls将无法工作,我发送给tls的https请求将始终路由到mtls服务。然后返回404。但是,如果我首先配置tls入口,那么mtls入口。然后tls 1将工作,但mtls的证书颁发将失败。
我不确定SSLpass身批注是否在主机级别配置?或者我能让它在每个路径级别上工作吗?小扁桃体进入。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
ingress.kubernetes.io/ssl-passthrough: "true"
nginx.ingress.kubernetes.io/ssl-passthrough: "true"
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/backend-protocol: HTTPS
nginx.ingress.kubernetes.io/ssl-redirect: "false"
name: mtls-ingress
spec:
rules:
- host: app.abc.com
http:
paths:
- backend:
service:
name: mtls-service
port:
number: 8081
path: /mtls-api
pathType: Prefix
tls:
- hosts:
- app.abc.com
secretName: tls-nginx-mtls然后tls进入:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/backend-protocol: HTTPS
nginx.ingress.kubernetes.io/ssl-redirect: "false"
name: tls-ingress
spec:
rules:
- host: app.abc.com
http:
paths:
- backend:
service:
name: tls-service
port:
number: 8080
path: /tls-api
pathType: Prefix
tls:
- hosts:
- app.abc.com
secretName: tls-nginx-tls这就像两个入口相互覆盖一样,只有第一个注释起作用。它看起来是为主机配置的,而不是入口或路径。不知道。请帮帮忙。谢谢。
发布于 2022-01-22 11:35:05
您希望在同一个主机上对其中一个服务使用注释nginx.ingress.kubernetes.io/ssl-passthrough: "true"的两个服务。
这将不起作用,因为通过SSL,代理不知道将流量路由到哪里的路径。
注释nginx.inress.kubernetes.io/ssl-pass身指示控制器将TLS连接直接发送到后端,而不是让NGINX解密通信。 因为SSL传递在OSI模型(TCP)的第4层上工作,而不是在第7层(HTTP)上工作,所以使用SSL可以使设置在Ingress对象上的所有其他注释无效。
解决方案是为服务使用子域,而不是使用路径。
此外,GitHub还提供了有关此问题的一些链接:
以及来自服务器故障的关于NginX工作流程的SSLTrans身。
https://stackoverflow.com/questions/70785851
复制相似问题