【发布时间】:2021-04-13 06:09:05
【问题描述】:
我最近遇到了 nlb 的问题,在 lb 上使用带有 https 终止的 nlb 与重定向 http=>https 和 EKS 上的 ingress-nginx 一起工作真是一次冒险。
现在,我想将 X-Forwarded 标头传递给 pod,但这会破坏 http=>https 重定向,我在 http 请求上得到 400。
在服务上,我尝试把服务用http或者tcp协议,同样的。
将service.beta.kubernetes.io/aws-load-balancer-proxy-protocol: "*" 标头添加到服务中,在所有目标上激活代理协议v2,并在nginx 的configmap 中激活use-proxy-protocol: 'true' 通过308 重定向中断http-sn-p:
http-snippet: |
server {
listen 2443;
return 308 https://$host$request_uri;
}
有没有人有办法让它可以使用带有所有好的标头和重定向工作的 nlb?
EDIT应评论请求添加完整的工作配置
apiVersion: v1
kind: ConfigMap
metadata:
labels:
app.kubernetes.io/version: 0.41.0
app.kubernetes.io/component: controller
name: ingress-nginx-controller
data:
http-snippet: |
server {
listen 2443 proxy_protocol;
return 308 https://$host$request_uri;
}
proxy-real-ip-cidr: 10.4.0.0/16
use-forwarded-headers: 'true'
use-proxy-protocol: 'true'
compute-full-forwarded-for: 'true'
【问题讨论】:
-
你从哪里得到
ingress-nginx? kubernetes.github.io/ingress-nginx/deploy ?如果是这样,那么要启用 HTTPS 重定向,您只需在 Ingress 资源中配置 TLS:kubernetes.github.io/ingress-nginx/user-guide/… -
请阅读标题,我特意询问您有 NLB 而不是 CLB 或 ALB 的用例。
-
我又读了一遍,但我仍然不明白,如果在入口资源中配置了 TLS,当 nginx 自动执行重定向时,为什么要使用该 http-sn-p 进行重定向。我自己在生产中使用 NLB 和 nginx 入口,我不必做任何事情来获得您想要实现的目标。
-
呵呵,我在这里看到了问题...我编辑了帖子。
-
查看官方指南 (docs.nginx.com/nginx/admin-guide/load-balancer/…) 似乎
listen指令应该包含proxy_protocol以便 NGINX 接受代理协议标头。您可以尝试将listen 2443;更改为listen 2443 proxy_protocol;吗?
标签: amazon-ec2 amazon-eks aws-nlb ingress-nginx