Sam*_*Sam 3 ssl nginx kubernetes kubernetes-ingress nginx-ingress
我目前正在 k8s 集群中使用 NGINX 入口控制器。我试图使端到端加密工作,并且我能够使连接一直安全到 pod。
为了实现 HTTPS 一直到 pod,不得不使用注解
nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
Run Code Online (Sandbox Code Playgroud)
样本入口:
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
Run Code Online (Sandbox Code Playgroud)
我很困惑这到底是怎么发生的,因为当我们加密连接路径时也会被加密,那么 NGINX 如何进行基于路径的路由?它是否在入口解密连接并重新加密它?另外,使用这种方法会影响性能吗?
TL; 博士
它是否在入口解密连接并重新加密它?
简而言之,是的。请看下面的解释。
请求到达 a 的路径Pod可以看作:
假设我们有一个Ingress controller( nginx-ingress) 代替 an,Ingress您可以通过多种方式将您的客户端与 a Pod(简化)连接:
client-- (HTTP) --> Ingress controller-- (HTTP) --> Service---->PodIngress controller(with nginx.ingress.kubernetes.io/backend-protocol: "HTTPS")
client-- (HTTP) --> Ingress controller-- (HTTP S ) --> Service---->PodIngress controller在TLS 终止发生的地方加密和解密:
client-- (HTTP S ) --> Ingress controller(TLS 终止) -- (HTTP) --> Service---->Pod您的设置:
Ingress控制器上加密和解密,并在与 HTTPS 后端连接时再次加密:
nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"client-- (HTTP S ) --> Ingress controller(TLS 终止) -- (HTTP S ) --> Service---->PodPod地方加密和解密:
Ingress controllerclient-- (HTTP S ) --> Ingress controller-- (HTTP S ) --> Service---->Pod免责声明!
这只是一个简化的解释。有关更多参考,您可以查看此评论:
这里缺少一个细节,SSL Passthrough 流量永远不会到达入口控制器中的 NGINX。TLS 连接有一个 go 侦听器,它只是将流量通过管道传输到入口中定义的服务。
如需更多参考,您可以查看类似问题(附有答案):
您还可以使用与您类似的示例设置查看本文:
其他资源:
| 归档时间: |
|
| 查看次数: |
505 次 |
| 最近记录: |