如何解决NGINX Ingress控制器后端协议注释如何在基于路径的路由中工作? 说明
我目前正在k8s集群中使用NGINX入口控制器。我试图使端到端加密有效,并且能够使连接一直到Pod都保持安全。
为了在pod之前实现HTTPS,我必须使用注释
nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
示例入口:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: foo-api-ingress
annotations:
kubernetes.io/ingress.class: "nginx"
nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
spec:
tls:
- hosts:
- foo.example.com
secretName: foo-cert
rules:
- host: foo.example.com
http:
paths:
- path: /path1
backend:
serviceName: foo-api-path1-service
servicePort: 443
- path: /path2
backend:
serviceName: foo-api-path2-service
servicePort: 443
对于这种情况的发生方式,我感到困惑,因为当我们加密连接路径时也会被加密,那么NGINX如何进行基于路径的路由?它会在入口处解密连接并重新加密吗?另外,使用此方法会影响性能吗?
解决方法
TL; DR
它会在入口处解密连接并重新加密吗?
简而言之,是的。请参阅下面的说明。
说明
请求到达Pod
的路径可以看作:
假设我们使用Ingress controller
(nginx-ingress
)来代替Ingress
,则可以采用几种方法将客户端与Pod
连接(简化):
- 未加密:
-
client
-(HTTP)->Ingress controller
-(HTTP)->Service
---->Pod
-
- 在
Ingress controller
(用nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
加密)-
client
-(HTTP)->Ingress controller
-(HTTP S )->Service
----> {{1 }}
-
- 在TLS Termination发生的
Pod
处进行加密和解密:-
Ingress controller
-(HTTP S )->client
(TLS终止)-(HTTP)->Ingress controller
---- >Service
-
您的设置:
- 在TLS Termination发生的
Pod
控制器处进行加密和解密,并在Ingress
与HTTPS后端连接时再次加密:-
nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
-(HTTP S )->client
(TLS终止)-(HTTP S )-> { {1}} ---->Ingress controller
-
- 在
Service
被SSL Passthrough配置的Pod
处进行加密和解密:-
Pod
-(HTTP S )->Ingress controller
-(HTTP S )->client
---->Ingress controller
-
免责声明!
这只是一个简化的解释。有关更多参考,您可以查看以下评论:
这里缺少一个详细信息,SSL传递流量永远不会到达入口控制器中的NGINX。有一个用于TLS连接的go侦听器,该侦听器仅将流量传递到入口中定义的服务。
有关更多参考,您可以查看类似的问题(有答案):
您还可以使用与您的示例设置类似的示例设置来查看本文:
其他资源:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。