мы (наконец) переходим с Traefik 1 на 2. Мы запускаем более 400 приложений на GKE. Наша единственная оставшаяся задача заключается в следующем:
В Traefik 1 мы устанавливаем аннотацию для входа каждого приложения, которая добавляет заголовок к запросу к серверной части. Значение этого заголовка уникально для каждого Ingress. Вот пример со значением . Каждое приложение имеет другое значение в своем Ingress.:
---
Версия API: networking.k8s.io/v1
вид: Вход
метаданные:
имя: тестап
пространство имен: тест
аннотации:
ingress.kubernetes.io/custom-request-headers: X-Backend-Hint:<имя приложения>
спецификация:
...
Traefik 2 больше не поддерживает этот заголовок. Похоже, что единственный способ добавить такой заголовок запроса в каждое приложение — создать уникальное промежуточное ПО customRequestHeaders для каждого уникального значения, а затем добавить это промежуточное ПО в соответствующий Ingress. Вот так:
---
apiVersion: traefik.containo.us/v1alpha1
вид: ПО промежуточного слоя
метаданные:
имя: бэкэнд-подсказка-заголовок
пространство имен: тест
спецификация:
заголовки:
пользовательские заголовки запроса:
X-Backend-Hint: <имя приложения>
---
Версия API: networking.k8s.io/v1
вид: Вход
метаданные:
имя: тестап
пространство имен: тест
аннотации:
traefik.ingress.kubernetes.io/router.middlewares: test-backend-hint-header@kubernetescrd
спецификация:
...
Автоматизировать это, конечно, можно, но это означает развертывание более 400 почти идентичных промежуточных программ. Не создаст ли это проблем для Traefik?
Это действительно лучший способ? Или мы можем каким-то образом использовать одно промежуточное ПО с переменной, переданной через аннотацию Ingress? Может еще что-то, о чем я не подумал?
На данный момент из-за совместимости с другими инструментами, которые ссылаются на Ingress, такими как cert-manager и external-dns, мы пока не можем использовать CRD IngressRoute, но должны использовать классический Ingress.