【问题标题】:EKS ingress-nginx and NLB with https redirectEKS ingress-nginx 和 NLB 与 https 重定向
【发布时间】: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-nginxkubernetes.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


【解决方案1】:

要结束我们与@night-gold 的评论讨论,要使 NGINX 接受代理协议,您必须在 listen 指令中特别提及:

http {
    #...
    server {
        listen 80   proxy_protocol;
        listen 443  ssl proxy_protocol;
        #...
    }
}

查看NGINX guide 了解更多信息。

【讨论】:

  • 稍微精确一点,该指令在 configmap 中使用 use-proxy-protocol: 'true' 激活以使其全局生效。但是在configmap的http-sn-p里面并没有考虑到。
【解决方案2】:

除了这个答案,别忘了给服务添加代理协议的注解。

https://kubernetes-sigs.github.io/aws-load-balancer-controller/v2.2/guide/service/nlb/#protocols

这是我在掌舵图中的值

helm upgrade \
      ingress-nginx ingress-nginx/ingress-nginx \
      --namespace ingress-nginx \
      --set controller.service.type=LoadBalancer \
      --set controller.service.annotations."service\.beta\.kubernetes\.io/aws-load-balancer-type"=nlb \
      --set controller.service.annotations."service\.beta\.kubernetes\.io/aws-load-balancer-nlb-target-type"=ip \
      --set controller.service.annotations."service\.beta\.kubernetes\.io/aws-load-balancer-cross-zone-load-balancing-enabled"=true \
      --set controller.service.annotations."service\.beta\.kubernetes\.io/aws-load-balancer-type"=external \
      --set controller.service.annotations."service\.beta\.kubernetes\.io/aws-load-balancer-name"="nginx-ingress" \
      --set controller.service.annotations."service\.beta\.kubernetes\.io/aws-load-balancer-proxy-protocol"="*" \
      --set controller.service.annotations."service\.beta\.kubernetes\.io/aws-load-balancer-scheme"="internet-facing" \
      --set controller.config."proxy-real-ip-cidr"="xx.xx.xx.xx/xx" \
      --set controller.config."use-forwarded-headers"="true" \
      --set controller.config."use-proxy-protocol"="true" \
      --set controller.config."compute-full-forwarded-for"="true" \
      --set controller.config."http-snippet"="
server{
  listen 2443;
  return 308 https://\$host\$request_uri;
}" \
      --dry-run

【讨论】:

  • Helm conf 在这种情况下是无关紧要的,请看问题,你可以看到我放了 conf 行(不是 helm)
猜你喜欢
  • 2023-03-14
  • 2021-11-28
  • 1970-01-01
  • 2020-12-25
  • 2020-07-17
  • 2015-05-09
  • 1970-01-01
  • 1970-01-01
  • 2019-03-08
相关资源
最近更新 更多