Часть "path" самих URL конечных точек (для этого вопроса SO, часть /questions/53008947/...
) не изменится.Но остальная часть URL может.
Docker публикует сервисы на уровне TCP-порта (опция docker run -p
, раздел Docker Compose ports:
) и не смотрит, какой трафик проходит через порт.Если в вашем стеке есть что-то вроде прокси-сервера Apache или nginx, которое может изменить сопоставления путей уровня HTTP, но вы, вероятно, знаете об этом в своей среде.
Kubernetes работает аналогично, нобольше слоев.Контейнер работает в модуле Pod и может публиковать некоторые порты из модуля Pod.Это не используется напрямую;вместо этого Сервис ссылается на Pod (по его меткам) и повторно публикует свои порты, возможно, на разных номерах портов.Сервис имеет DNS-имя service-name.namespace.svc.cluster.local
, которое можно использовать в кластере;вы также можете настроить службу так, чтобы она была доступна на фиксированном TCP-порте на каждом узле службы (NodePort
) или, если ваш Kubernetes работает на провайдере публичного облака, создать там балансировщик нагрузки (LoadBalancer
),Опять же, все это строго на уровне TCP и не влияет на пути HTTP.
Существует еще одна часть Kubernetes, контроллер Ingress, который действует как декларативная оболочка для прокси-сервера nginx (или чего-то еще).с аналогичным функционалом). работает на уровне HTTP и может изменять пути.
Другим следствием этого является то, что URL для доступа к службе может отличаться в разных средах: http://localhost:12345/path
в локальнойнастройка разработки, http://other_service:8080/path
в Docker Compose, http://other-service/path
в Kubernetes, https://api.example.com/other/path
в производстве.Вам нужен какой-то способ сделать это настраиваемым (часто это переменная окружения).