В Kubernetes можно ресурсу Service прописать либо аналогичный "проброс портов", либо указать использовать автоматически создаваемый load balancer облачного провайдера (который магическим образом у облачного провайдера прикручен к куберу).
И там, и там оркестратор сам убедится, что если запрос попал на правильный порт X но на неправильную ноду (ту, на которой не запущено в данный момент ни одной реплики нужного сервиса), то он будет прозрачно проксирован на нужную ноду. И там, и там прибитый гвоздем порт открывается всегда одновременно на всех нодах, чтобы было меньше путаницы.
б) Через использование общего HTTP-сервера
В кластере, однако, может быть запущено 20 веб-приложений (например, веб-сайтов), каждому из которых нужен порт 80 или 443. При этом приколотить намертво конкретный порт 80 ноды можно, как описано выше, только к одному конкретному сервису.
Выходят из этого положения так: запускают на весь кластер один веб-сервер (nginx или traefik), а затем динамически изменяют его конфигурацию, чтобы он на основании имени домена (или других данных HTTP-запроса) отправлял запрос в нужный сервис (заодно терминируя TLS, управляя сертификатами).
В Kubrenetes за описание таких "кусков конфигураций общего HTTP-сервера для конкретного сервиса" отвечает ресурс Ingress ("точка входа"). В Swarm, формально, решения этой проблемы нет, но существует стандартный процесс установки-настройки Traefik, который позволяет делать тоже самое (конфигурация конкретного сервиса настраивается через специальные swarm-аннотации).
Это единственное место из перечисленных, где в Kubernetes сделано что-то более просто и логично, чем в Swarm.
#programming #devops
И там, и там оркестратор сам убедится, что если запрос попал на правильный порт X но на неправильную ноду (ту, на которой не запущено в данный момент ни одной реплики нужного сервиса), то он будет прозрачно проксирован на нужную ноду. И там, и там прибитый гвоздем порт открывается всегда одновременно на всех нодах, чтобы было меньше путаницы.
б) Через использование общего HTTP-сервера
В кластере, однако, может быть запущено 20 веб-приложений (например, веб-сайтов), каждому из которых нужен порт 80 или 443. При этом приколотить намертво конкретный порт 80 ноды можно, как описано выше, только к одному конкретному сервису.
Выходят из этого положения так: запускают на весь кластер один веб-сервер (nginx или traefik), а затем динамически изменяют его конфигурацию, чтобы он на основании имени домена (или других данных HTTP-запроса) отправлял запрос в нужный сервис (заодно терминируя TLS, управляя сертификатами).
В Kubrenetes за описание таких "кусков конфигураций общего HTTP-сервера для конкретного сервиса" отвечает ресурс Ingress ("точка входа"). В Swarm, формально, решения этой проблемы нет, но существует стандартный процесс установки-настройки Traefik, который позволяет делать тоже самое (конфигурация конкретного сервиса настраивается через специальные swarm-аннотации).
Это единственное место из перечисленных, где в Kubernetes сделано что-то более просто и логично, чем в Swarm.
#programming #devops