簡體   English   中英

Kubernetes nginx 將流量路由到 /api/*

[英]Kubernetes nginx route traffic to /api/*

我有一個 kubernetes 集群,配置了 nginx 以將流量移植到我的 angular 應用程序。 它工作正常,但是當我訪問myipaddress/api/v1 - 我希望 nginx 將流量移植到我正在偵聽端口 3000 的 express 應用程序和 angular 應用程序不將myipaddress/api/v1視為路由組件在 angular 因為它不存在。

這是我的 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

這是我對 angular 的入口

---
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

我想為 angular 實現什么

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

好的,我自己設法找到了解決方案,張貼這個以防有人需要。 用於 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

這同樣適用於您需要反向代理的任何其他入口路徑。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM