Я изучаю Kubernetes, используя K3S. Из-за некоторых ограничений проекта я использую вход Traefik. (Раньше я использовал вход nginx.)
Я пытаюсь развернуть несколько модулей за входом, используя подход «разветвления». Например, у меня есть контейнеры CX и CY, каждый со своими конечными точками http, определенными без префикса, например. /api, /data, / и т. д. Оба контейнера будут работать на одном хосте. Поведение kubernetes по умолчанию заключается в пересылке всего пути в контейнер, поэтому, если у меня есть CX в /CX, то, когда я пингую URL/CX, контейнер видит путь /CX, а это означает, что мне придется переопределить все пути в контейнере. быть /CX/api, /CX/data и т. д.
Когда я использовал nginx, у меня был доступ к:
ingress:
enabled: true
className: "nginx"
#className: "traefik"
annotations:
nginx.ingress.kubernetes.io/use-regex: "true"
nginx.ingress.kubernetes.io/rewrite-target: /$2
hosts:
- host:
paths:
- path: /postgres(/|$)(.*)
pathType: ImplementationSpecific
Что перепишет путь. У Traefik есть промежуточное программное обеспечение для этого (но его сложно заставить работать).
Я упускаю фундаментальный принцип проектирования http-сервисов, предназначенных для Kubernetes? Мне это кажется такой простой проблемой, но поддержка перезаписи пути довольно ограничена. Должен ли я проектировать свои контейнеры, модули или сервисы по-другому?

У вас есть 2 варианта.
Используйте функции входных контроллеров, чтобы переписать свой путь. в данном случае промежуточное программное обеспечение traefik.
Определите новую запись DNS для каждого вашего приложения, например CX.yourdomain.com, и используйте эти адреса в качестве входящих хостов напрямую, без перезаписи пути.