到不同服务的入口路由和到同一服务的不同路径

时间:2021-01-29 11:46:11

标签: kubernetes kubernetes-ingress nginx-ingress

我有以下入口配置:

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: my-ingress
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/use-regex: "true"
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - http:
      paths:
      - path: /
        pathType: Exact
        backend:
          serviceName: web-service
          servicePort: 5000
      paths:
      - path: /api/tasks/.*
        pathType: Prefix
        backend:
          serviceName: tasks-service
          servicePort: 5004
      paths:
      - path: /api/.*
        pathType: Prefix
        backend:
          serviceName: um-service
          servicePort: 5001

我打算默认加载前端,然后使用其他路径加载其他服务。我想从 /api/tasks/total_count 获得总任务数并从 /api/tasks/raise 提出新任务。同时,我想使用 /api/auth/login/ 登录,并使用 /api/users/list 来查看其他用户都使用 um-service 服务。 上面的配置只返回最后一个服务的默认路径,即um-service。 如何配置以便默认加载网络,然后将 /api/auth/login/api/users/list 路由到 um-service 而 /api/tasks/ 也路由到任务服务?恳请指教

1 个答案:

答案 0 :(得分:2)

如果我理解正确的话,你想达到那个结果:

$ curl <MY_DOMAIN>/api/auth/login
um-service
$ curl <MY_DOMAIN>/api/users/list
um-service
$ curl <MY_DOMAIN>/api/tasks/
tasks-service
$ curl <MY_DOMAIN>/
web-service

你几乎做对了一切,但 paths 应该只给出一次

试试这个配置:

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: my-ingress
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/use-regex: "true"
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - http:
      paths:
      - path: /
        backend:
          serviceName: web-service
          servicePort: 5000
      - path: /api/tasks/.*
        backend:
          serviceName: tasks-service
          servicePort: 5004
      - path: /api/.*
        backend:
          serviceName: um-service
          servicePort: 5001