У меня есть две службы, запущенные в кубернетах с URL-адресами, скажем, https://service1.abc.cloud.com
и https://service2.abc.cloud.com
. У меня есть маршруты, определенные в Ingress для обеих служб, например, мой путь swagger https://service1.abc.cloud.com/docs
, а во входящем я определил / docs to go для моей службы на порту SSO 8082. После успешного SSO SSO перенаправляет на мою службу1 / docs route.
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: {{ template "service1.fullname" . }}
labels:
{{ include "service1.labels" . | indent 4 }}
{{ include "chart.labels" . | indent 4 }}
annotations:
{{ include "service1.annotations" . | indent 4 }}
spec:
rules:
- host: {{ template "service1.dns" . }}
http:
paths:
- path: /docs
backend:
serviceName: {{ template "service1.fullname" . }}
servicePort: 8082
Подобный входящий файл предназначен для service2.
До сих пор история была хороша, но появилось требование, что нам нужно иметь общий URL-адрес для всех services и параметр пути для общего URL-адреса будут иметь имя службы. Итак, у нас есть 2 входных файла для service1 и service2.
Новый URL-адрес для service1 и service2 будет: -
https://mynamespace.abc.cloud.com/service1
https://mynamespace.abc.cloud.com/service2
Я создал общий входной файл для хоста mynamespace, как показано ниже. Итак, теперь у меня есть 3 входных файла: один для mynamespace, один для service1 и один для service2. Я знаю, что это должен быть один входной файл, выполняющий все сопоставления маршрутов, но до тех пор, пока мы не откажемся от URL-адресов service1 и service2, которые нам нужны для поддержки старых URL-адресов service1 и service2. После прекращения поддержки мы будем объединять весь код в одно развертывание и входить.
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: {{ template "mynamespace.fullname" . }}
labels:
{{ include "mynamespace.labels" . | indent 4 }}
{{ include "chart.labels" . | indent 4 }}
annotations:
{{ include "mynamespace.ingress.annotations" . | indent 4 }}
spec:
rules:
- host: {{ template "iot.dns" . }}
http:
paths:
- path: /mynamespace/docs
backend:
serviceName: {{ template "service1.fullname" . }}
servicePort: 8082
Проблема в том, что я не могу направить / mynamespace / docs хоста mynamespace в / docs хоста service1. У меня также есть sidecar SSO, который находится на порту 8082, а мои service1 и service2 находятся на порту 8080.
Конечная цель, которую необходимо достичь: - Когда пользователь нажимает url https://mynamespace.abc.cloud.com/service1/docs
, он должен внутренне открыть файл swagger service1, который является размещено в https://service1.abc.barco.cloud.com/docs
. URL-адрес в браузере не должен изменяться, поэтому перенаправление должно происходить на уровне кубернетов, а URL-адрес не должен изменяться в браузере. Поскольку мне также нужно поддерживать старые URL-адреса, они также должны работать, например, https://service1.abc.cloud.com
и https://service2.abc.cloud.com
Старый дизайн ниже: -
New design below:-
введите описание изображения здесь