Динамическая маршрутизация только по имени хоста — правила Kubernetes Ingress

У меня есть кластер K8s с несколькими развернутыми службами, и я хотел бы использовать один Ingress для направления каждого входящего запроса в соответствующую службу через уникальное имя хоста DNS.

В настоящее время мне удалось разрешить запрос только при использовании корневого пути, то есть service-123.app.com.

Как только я пытаюсь сделать запрос с путем, он не разрешается. Пути являются допустимыми путями к каждой службе. Например, приложение ожидает service-123.app.com/page/12345.

Возможно, я не совсем понимаю, как должны работать правила K8s Ingress, но я надеялся, что они будут соответствовать только на основе имени хоста и просто пересылать по пути к соответствующему сервису.

Я пропустил что-то очень простое здесь? Любая помощь горячо приветствуется. Спасибо!

Вот мои файлы конфигурации.

Ingress.yaml

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    ......
  name: app-name
  namespace: default
spec:
  rules:
  - host: service-123.app.com
    http:
      - path: "/*"
        backend:
          serviceName: service-123
          servicePort: 80
  - host: service-456.app.com
    http:
      paths:
      - path: "/*"
        backend:
          serviceName: service-456
          servicePort: 80

сервис.yaml

---
apiVersion: v1
kind: Service
metadata:
  annotations: {}
  labels:
    app: service-123
  name: service-123
  namespace: default
spec:
  ports:
  - name: port8080
    port: 80
    targetPort: 8080
  selector:
    app: service-123
  type: NodePort

Привет пользователь 2252867. Какую версию Kubernetes вы используете?

mozello 29.03.2022 15:41
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
1
1
40
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Не уверен, какой K8 и входной контроллер вы используете, но в более поздних версиях K8 вы можете указать pathType, который лучше обрабатывает подстановочные знаки пути.

У вас будет что-то вроде этого:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    ......
  name: app-name
  namespace: default
spec:
  rules:
  - host: service-123.app.com
    http:
      - path: /
        pathType: Prefix
        backend:
          serviceName: service-123
          servicePort: 80
  - host: service-456.app.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          serviceName: service-456
          servicePort: 80

Если вы используете входящий контроллер nginx, хороший способ увидеть правильную конфигурацию nginx — посмотреть на фактическую nginx.conf, сгенерированную входным контроллером.

$ kubectl cp <nginx-ingress-controller-pod>:nginx.conf nginx.conf
$ cat nginx.conf

Другие вопросы по теме