【问题标题】:Hosting two web apps with nginx ingress in Kubernetes在 Kubernetes 中使用 nginx 入口托管两个 Web 应用程序
【发布时间】:2020-08-31 02:03:15
【问题描述】:

我有一个在 Azure Kubernetes 服务 (AKS) 中运行的 kubernetes 集群。我一直在关注一系列研讨会,并设置了 NGINX 入口控制器。现在我正在使用 nip.io 来访问我的网站。他们让我创建一个入口资源来公开前端:

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: ratings-web-ingress
  annotations: 
    kubernetes.io/ingress.class: nginx
  spec:
    rules:
    - host: frontend.<redacted ip>.nip.io
    http:
      paths:
      - backend:
        serviceName: ratings-web
        servicePort: 80
      path: /

这很好用。我可以浏览 nip.io 地址,一切正常。 我想扩展它并创建一个单独的站点。我希望它在同一个地址,就在/foo

我尝试创建一个入口资源:

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: foo-web-ingress
  annotations: 
    kubernetes.io/ingress.class: nginx
  spec:
    rules:
    - host: frontend.<redacted ip>.nip.io
    http:
      paths:
      - backend:
        serviceName: foo-web
        servicePort: 80
      path: /foo

当我浏览 frontend.&lt;redacted ip&gt;.nip.io/foo 时,我得到一个 404 not found from nginx。 我尝试根据另一个 SO 帖子添加以下注释:

nginx.ingress.kubernetes.io/rewrite-target: /

现在当我浏览/foo 时,它会响应,但所有内容都是空白的。在网络应用程序中,它引用了根级别的所有内容,例如:

<link href="/assets/css/bootstrap.min.css" rel="stylesheet" type="text/css" />

当它看到这条路径时,我认为它会转到原始网站,所以我收到严格的 MIME 类型错误或 404 错误。

我需要怎么做才能在同一个 nginx 入口控制器上以不同的路径托管两个网站?

【问题讨论】:

  • 您能否提供在 AKS 中部署两个网站的 YAML?您是否检查是否可以使用端口转发访问网站?

标签: nginx kubernetes kubernetes-ingress azure-aks


【解决方案1】:

在合并这两个入口时,入口控制器会感到困惑,正确的顺序应该是什么,因为为同一主机定义了多个入口资源。

引用docs,您可以使用单个入口资源作为扇出。

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: simple-fanout-example
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
    kubernetes.io/ingress.class: nginx
spec:
  rules:
  - host: <redacted ip>.nip.io
    http:
      paths:
      - path: /foo
        backend:
          serviceName: foo-web
          servicePort: 80
      - path: /bar
        backend:
          serviceName: bar-web
          servicePort: 80

【讨论】:

  • 将它们全部放在一个资源中是否可以使其正常工作?
  • 如果同一主机有两个不同的入口资源,除非您使用合并支持,否则它将相互覆盖
  • 似乎仍然不起作用。现在,当我浏览 /foo 它重定向回根目录时,我在控制台中收到以下错误: Uncaught (in promise): Error: cannot match any routes。 URL 段:'foo'。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-21
  • 2020-09-12
  • 2022-10-25
  • 2021-08-07
  • 2018-06-29
  • 2015-05-07
相关资源
最近更新 更多