【问题标题】:Nginx Ingress resource annotation to setup proxy_pass directive用于设置 proxy_pass 指令的 Nginx Ingress 资源注释
【发布时间】:2021-06-15 00:11:19
【问题描述】:

当我使用 nginx 作为我的 k8s 集群的入口控制器时,指定入口规则会自动在 nginx pod 的 /etc/nginx/conf.d/ 文件中创建相应的配置。

因此,它在那里为相关的上游/后端服务配置了 proxy_pass 指令。它是http。 对于我的服务的这个入口规则:

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: my-ingress
  # annotations:
  #  nginx.org/redirect-to-https: "false"
  #  #nginx.ingress.kubernetes.io/ssl-passthrough: "true"
spec:
  ingressClassName: nginx 
  tls:
  - hosts:
    - test.myapp.com
    secretName: test-tls-secret
  rules:
  - host: test.myapp.com
    http:
      paths:
      - backend:
          serviceName: myui
          servicePort: 80
      - path: /api/
        backend:
          serviceName: myapp
          servicePort: 88              

默认情况下,它会在 nginx 配置中自动为后端创建此指令:

 proxy_pass http://default-my-ingress-test.myapp.com-myapp-88;

但是,我需要它是这样的 https:

proxy_pass https://default-my-ingress-test.myapp.com-myapp-88;

那么只有我的应用程序才能工作,因为该后端只接受 https 请求。

有没有办法为此目的使用任何注释或类似的东西通过 Ingress 资源修改特定后端服务的 proxy_pass 指令?


编辑:

有没有类似的注释可用?

或者是否有任何选项可以让我使用与实际 myapp 容器在同一个 pod 中的边车容器来处理它?

【问题讨论】:

    标签: nginx kubernetes proxy kubernetes-ingress nginx-ingress


    【解决方案1】:

    我最近有一个类似的要求,后端 pod 期望 https 上的请求。

    您需要的是 nginx 控制器的 ssl-passthrough 功能。您需要使用标志--enable-ssl-passthrough 启动 nginx 入口控制器。这可以作为命令行参数传递给 nginx 部署。

    此后,需要使用以下注解部署入口资源:

    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
    nginx.ingress.kubernetes.io/secure-backends: "true"
    nginx.ingress.kubernetes.io/ssl-redirect: "true"
    nginx.ingress.kubernetes.io/ssl-passthrough: "true"
    

    指示控制器将 TLS 连接直接发送到后端。

    【讨论】:

    • 我应该在入口资源中指定spec.tls 部分以及这些注释吗?而且,这些设置是否会将配置中的proxy_pass 指令更改为https?
    • 是的,仍然存在。我不太确定 proxy_pass 指令,但正如您提到的“我的应用程序将在后端仅接受 https 请求时工作” - 此配置指示 nginx 控制器将 https 请求发送到后端,而不是在控制器处终止它。
    • 我试过这个,但没有奏效。我在访问 POST 请求 https://test.myapp.com/api/v4/login 时收到 400 (Bad Request) 错误,浏览器中出现 net::ERR_INCOMPLETE_CHUNKED_ENCODING 错误。
    • 我不确定该错误是否是因为额外的 ssl-passthrough 注释。您还需要确保 nginx 控制器以启用--enable-ssl-passthrough 启动。 pod 日志应在启动期间显示类似 "Starting TLS proxy for SSL Passthrough" 的内容。
    • 我通过值文件将 enable-ssl-passthrough 设置为 true,并且 pod 描述在 args 部分中显示了这一点。但是pod日志中没有Starting TLS proxy for SSL Passthrough这样的日志。
    猜你喜欢
    • 2016-01-30
    • 1970-01-01
    • 2018-12-17
    • 2018-11-25
    • 2020-06-30
    • 1970-01-01
    • 1970-01-01
    • 2020-11-07
    • 1970-01-01
    相关资源
    最近更新 更多