【问题标题】:Angular on Kubernetes (ingress routing)Kubernetes 上的 Angular(入口路由)
【发布时间】:2019-11-21 04:38:58
【问题描述】:

我需要如何配置我的 Angular 7 应用程序正在运行的入口?

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: myingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
    nginx.ingress.kubernetes.io/use-regex: "true"
spec:
  rules:
  - http:
      paths:
      - path:
        backend:
          serviceName: angular-service
          servicePort: 80
      - path: /test
        backend:
          serviceName: angular-service
          servicePort: 80

Angular 由 nginx 镜像托管:

FROM nginx:alpine
COPY . /usr/share/nginx/html

在 Kubernetes 上:

种类:服务 api版本:v1 元数据: 名称:测试服务 规格: 选择器: 应用:测试 端口:

- 端口:80

apiVersion: extensions/v1beta1 种类:部署 元数据: 名称:测试 规格: 复制品:2 模板: 元数据: 标签: 应用:测试 规格: 节点选择器: “beta.kubernetes.io/os”:Linux 容器: - 名称:测试 图片:xxx.azurecr.io/test:latest imagePullPolicy:总是 端口: - 容器端口:80

在路径上/一切正常。但是在 /test 上它不起作用。 控制台输出:

Uncaught SyntaxError: Unexpected token

Uncaught SyntaxError: Unexpected token

Uncaught SyntaxError: Unexpected token <1>

标签: angular kubernetes nginx-ingress


【解决方案1】:

在不知道 nginx-ingress 版本的情况下,这只是猜测。

根据https://kubernetes.github.io/ingress-nginx/examples/rewrite/#rewrite-target 的文档说:

从 0.22.0 版本开始,使用注解 nginx.ingress.kubernetes.io/rewrite-target 的入口定义不向后兼容以前的版本。在 0.22.0 及更高版本中,请求 URI 中需要传递到重写路径的任何子字符串都必须在捕获组中明确定义。

这意味着您需要显式传递路径,例如:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: myingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /$2
    nginx.ingress.kubernetes.io/use-regex: "true"
spec:
  rules:
  - http:
      paths:
      - path: /
        backend:
          serviceName: angular-service
          servicePort: 80
      - path: /test/(/|$)(.*)
        backend:
          serviceName: angular-service
          servicePort: 80

【讨论】:

  • 感谢您的帮助。我在帖子中添加了一些细节。不幸的是,您的代码不起作用。日志看起来像正常的连接信息。我没有收到任何错误。但是网站是空的(和控制台错误)。
  • 您在从 Angular 配置中删除 "baseHref" : "/test", 后对其进行了测试?您能否更新问题以提供有关您如何测试的更多详细信息?另外,你能用nginx配置更新问题吗?
  • 我分享了更多细节
  • 我仍然没有看到任何用于测试的 nginx 日志。我不确定通往 nginx Pod 和 nginx Ingress 的路径。您能否在测试期间将它们的日志添加到//test/app2?另外,您的测试令人困惑。请将其设为/test/app2(以正确者为准)。
  • 我试图找到您要求的所有信息。但是我并没有真正理解您所说的“哪些路径到达 nginx Pod 与 nginx 入口”。
【解决方案2】:

我只是通过创建两个完全不同的Ingress 来让它工作: 没有其他工作。

  • 我的后台是/api
  • 前端是/
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: frontend-ingress
  annotations:
    kubernetes.io/ingress.class: nginx
spec:
  rules:
  - http:
      paths:
      - path: /
        backend:
          serviceName: frontend-service
          servicePort: 5000
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: backend-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /$2
    nginx.ingress.kubernetes.io/use-regex: "true"
spec:
  rules:
  - http:
      paths:
      - path: /test/(/|$)(.*)
        backend:
          serviceName: backend-service
          servicePort: 5000

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-09
    • 1970-01-01
    • 1970-01-01
    • 2020-05-04
    • 1970-01-01
    • 2021-06-20
    • 2018-08-31
    相关资源
    最近更新 更多