3

我最近遇到了 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,并use-proxy-protocol: 'true'在 nginx 的 configmap 中激活会通过 308 重定向破坏 http-snippet:

http-snippet: |
    server {
      listen 2443;
      return 308 https://$host$request_uri;
    }

有没有人有办法让它可以使用带有所有好的标题和重定向工作的nlb?

编辑评论请求添加完整的工作配置

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'
4

2 回答 2

1

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

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

查看NGINX 指南了解更多信息。

于 2021-01-07T16:48:15.487 回答
-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
于 2021-09-21T14:09:01.720 回答