【问题标题】:Kubernetes nginx route traffic to /api/*Kubernetes nginx 将流量路由到 /api/*
【发布时间】:2021-05-23 05:39:10
【问题描述】:

我有一个配置了 nginx 的 kubernetes 集群,可以将流量传输到我的 Angular 应用程序。 它工作正常,但是当我访问myipaddress/api/v1 时 - 我希望 nginx 将流量移植到正在侦听端口 3000 的 express 应用程序,并且角度应用程序不要将 myipaddress/api/v1 视为角度的路由组件不存在。

这是我用于 express 的 kubernetes nginx 入口

apiVersion: v1
kind: Service
metadata:
  name: backend
spec:
  type: ClusterIP
  ports:
  - port: 3000
    targetPort: 3000
  selector:
    app: backend

---

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: backend-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - http:
      paths:
      - path: /api/?(.*)
        pathType: Prefix
        backend:
          service:
            name: backend
            port:
              number: 3000

这是我的角度入口

---
apiVersion: v1
kind: Service
metadata:
  name: webapp
spec:
  type: ClusterIP
  ports:
  - port: 80
    targetPort: 80
  selector:
    app: webapp

--- 
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: webapp-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: webapp
            port:
              number: 80

我想要实现的角度

myipaddres.com        -> serve angular application`
myipaddress.com/users -> serve angular router for /users

我想要实现的快递:

myipaddress.com/api/v1/users -> call the users v1 endpoint in express
myipaddress.com/api/v2/users -> call the users v2 endpoint in express

【问题讨论】:

    标签: angular express nginx kubernetes


    【解决方案1】:

    好的,我自己设法找到了解决方案,将其发布以防有人需要。 kubernetes 的最新 api(最新发布)支持正则表达式,但您应该使用注释显式启用它。

    ---
    # ingress traffic
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: backend-ingress
      annotations:
        kubernetes.io/ingress.class: nginx
        nginx.ingress.kubernetes.io/use-regex: "true" # enabling regex annotation
    spec:
      rules:
      - http:
          paths:
          - path: /api/*      # works fine with regex enabled
            pathType: Prefix
            backend:
              service:
                name: backend
                port:
                  number: 3000
    

    这同样适用于您需要反向代理的任何其他入口路径。

    【讨论】:

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