![](/img/trans.png)
[英]How to secure with SSL HTTPS a Nginx front-end and Puma back-end in Amazon EC2 AWS
[英]How NGINX Ingress controller back-end protocol annotation works in path based routing?
我目前正在 k8s 集群中使用 NGINX 入口控制器。 我试图使端到端加密工作,并且我能够使连接一直安全到 pod。
为了实现 HTTPS 一直到 pod,不得不使用注解
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; 博士
它是否在入口解密连接并重新加密它?
简而言之,是的。 请看下面的解释。
请求到达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
----> Pod
Ingress controller
上加密和解密:
client
-- (HTTP S ) --> Ingress controller
(TLS Termination) -- (HTTP) --> Service
----> Pod
您的设置:
Ingress
控制器上加密和解密,并在通过nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
与 HTTPS 后端连接时再次加密:
client
-- (HTTP S ) --> Ingress controller
(TLS Termination) -- (HTTP S ) --> Service
----> Pod
Ingress controller
的Pod
上加密和解密:
client
-- (HTTP S ) --> Ingress controller
-- (HTTP S ) --> Service
----> Pod
免责声明!
这只是一个简化的解释。 有关更多参考,您可以查看此评论:
这里缺少一个细节,SSL Passthrough 流量永远不会到达入口控制器中的 NGINX。 TLS 连接有一个 go 侦听器,它只是将流量通过管道传输到入口中定义的服务。
如需更多参考,您可以查看类似问题(附有答案):
您还可以使用与您类似的示例设置查看本文:
其他资源:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.