【问题标题】:Nginx Ingress Controller: What is the purpose of the host variable?Nginx Ingress Controller:宿主变量的用途是什么?
【发布时间】:2021-01-29 17:47:19
【问题描述】:

我有这个 nginx 入口控制器:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: my-ingress
  annotations:
    nginx.ingress.kubernetes.io/use-regex: "true"
    kubernetes.io/ingress.allow-http: "true"
    nginx.ingress.kubernetes.io/enable-cors: "true"
    nginx.ingress.kubernetes.io/ssl-redirect: "false"
    nginx.ingress.kubernetes.io/force-ssl-redirect: "false"
    # Limit uploads to 8TB
    nginx.ingress.kubernetes.io/proxy-body-size: 800000m
spec:
  rules:
  - host: myhost.info
    http:
      paths:
      # NOTE: this one should come after all other routes. To avoid hijacking requests.
      - path: /api/walrus(/|$)(.*)
        backend:
          serviceName: service-a
          servicePort: 8080
      - path: /api(/|$)(.*)
        backend:
          serviceName: service-b
          servicePort: 8080
      - path: /(.*)
        backend:
          serviceName: frontend
          servicePort: 8080
  - http:
      paths:
      # NOTE: this one should come after all other routes. To avoid hijacking requests.
      - path: /api/walrus(/|$)(.*)
        backend:
          serviceName: service-a
          servicePort: 8080
      - path: /api(/|$)(.*)
        backend:
          serviceName: service-b
          servicePort: 8080
      - path: /(.*)
        backend:
          serviceName: frontend
          servicePort: 8080

我复制了路径只是为了清楚。我的问题是,添加host 键与不添加时的最终结果有何不同?

到目前为止,我一直在使用它,因为如果我没有它,我会将我的 POST 请求重定向到 get 请求中,如以下问题所示:Kubernetes NGINX Ingress changes HTTP request from a POST to a GET

但我也注意到,在 EKS 上,如果我确实添加了主机,则入口只会为所有内容返回 404,直到我将其删除并仅使用 http 离开。所以我对此有点困惑,希望有人在这里澄清做事的正确方法。

另外,对于生产环境,如何将主机正确设置为公共域以及如何设置 tls 证书?

【问题讨论】:

标签: kubernetes nginx-ingress


【解决方案1】:

关于 HTTPS:https://aws.amazon.com/blogs/opensource/network-load-balancer-nginx-ingress-controller-eks/#bGA9CAkdlMh 有一个部分“定义 Ingress 资源(使用 SSL 终止)以将流量路由到上面创建的服务”,该部分显示了如何在 nginx-ingress 终止 TLS。即使您没有使用 AWS 网络负载均衡器 (NLB),这也可能会有所帮助。对于带有 NLB 的 AWS,您还有另一种选择,在 NLB 处终止:https://aws.amazon.com/blogs/aws/new-tls-termination-for-network-load-balancers/

有两个 nginx 入口控制器,不清楚您使用的是哪一个。 nginxinc controller 需要一个“主机”。另一个,https://github.com/kubernetes/ingress-nginx,我不确定。当您使用 TLS 时,nginx 使用 SNI 进行 HTTPS,这似乎需要一个“主机”:http://nginx.org/en/docs/http/configuring_https_servers.html#sni

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-01
    • 1970-01-01
    • 2019-02-24
    • 2019-04-30
    • 2019-07-29
    • 2021-03-09
    • 2020-12-05
    • 1970-01-01
    相关资源
    最近更新 更多