首页 > 解决方案 > 入口路由到不同的服务和不同的路径到相同的服务

问题描述

我有以下入口配置:

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。同时,我想使用um-service登录/api/auth/login/并查看其他用户。/api/users/list上面的配置只返回最后一个服务的默认路径,即 um-service。如何配置以便默认情况下 Web 加载,然后要么 要么/api/auth/login/api/users/list路由到 um-service 并且/api/tasks/还被路由到任务服务?好心劝告

标签: kuberneteskubernetes-ingressnginx-ingress

解决方案


如果我对您的理解正确,您希望达到这样的结果:

$ 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

推荐阅读