img

Руководство по Kubernetes Ingress

Введение

Kubernetes – это платформа, которая предоставляет возможность работать с модулями, службами и внешними ресурсами и при этом иметь гибкий и масштабируемый способ обмена данными. Если абстрагироваться от основной сетевой инфраструктуры, Kubernetes позволяет приложениям, развернутым в кластере, с легкостью поддерживать безопасную и надежную связь.

В дополнение к поддержке внутрикластерной сети, Kubernetes помогает пользователям подключать приложения к ресурсам, который находятся за пределами кластера. Для этих целей Kubernetes использует концепцию Ingress.

В этом руководстве содержится вся необходимая информация о различных типах и преимуществах Kubernetes Ingress, а также практические примеры. 

Что такое Kubernetes Ingress?

Kubernetes Ingress – это ресурс, который определяет правила маршрутизации внешнего трафика для кластера. Это объект Kubernetes API, который управляет внешним доступом к службам путем определения хоста, пути и другой необходимой информации. Администраторы определяют Ingress с помощью манифестов YAML, CLI или вызовов Kubernetes API.

Ingress позволяет адаптивно создавать правила маршрутизации DNS и обеспечивает кластерные службы:

  • Балансировкой нагрузки
  • Виртуальным хостингом на основе имени
  • Терминированием TLS/SSL-соединений

Поскольку Ingress выступает в роли единой точки входа в кластер, он упрощает процесс управления приложениями и устранения неполадок, связанных с маршрутизацией.

Ingress vs. Engress

Сетевая политика Kubernetes позволяет администраторам управлять и создавать отдельные наборы правил для входящего и исходящего трафика модулей. Ingress и Engress используются для разграничения двух направлений трафика:

  • Ingress направляет внешний трафик в кластер.
  • Engress контролирует трафик, который исходит из кластера. Как правило, исходящий трафик запускается службой кластера или модулем и перенаправляется внешнему адресату с помощью заранее определенных правил.

Что такое контроллер Kubernetes Ingress?

Контроллер Kubernetes Ingress – это реализация Ingress API, которая выполняет функции балансировщика нагрузки и обратного прокси в кластере Kubernetes. Контроллер интерпретирует и реализует правила в соответствии со спецификацией ресурса Ingress. Он следит за изменениями ресурсов кластера и динамически меняет свои настройки, чтобы маршрутизация входящего трафика функционировала правильно. 

Контроллер Ingress во многом похож на другие контроллеры Kubernetes, например, Deployments, ReplicaSets и StatefulSets. Он отслеживает состояние ресурсов в кластере и гарантирует, что оно соответствует состоянию, которое определил пользователь. 

В одном кластере может быть запущено несколько ingress-контроллеров. Кроме того, существует несколько различных реализаций ingress-контроллеров, например, NGINX Ingress Controller, Kong Ingress, HAProxy и Traefik. Эти контроллеры предлагают такие функции, как разделение трафика и маршрутизация на основе пути. Их различие состоит в количестве протоколов передачи данных, протоколов аутентификации и поддержке алгоритмов балансировки нагрузки. 

Как работает Kubernetes Ingress?

Предоставление доступа к службам кластера для внешнего пользования с помощью Kubernetes Ingress – это многошаговый процесс. Далее мы объясним, как работает Ingress, перечислив стандартные шаги, необходимые для предоставления доступа к службе.

1. Создание Ingress-ресурса. Пользователь создает Ingress-ресурс и предоставляет всю необходимую информацию о конфигурации. Сюда относятся имена хостов, пути и службы, к которым необходимо получить доступ извне. 

2. Развертывание Ingress-контроллера. Пользователь создает Ingress-контроллер и прибегает к его помощи. После того, как контроллер будет запущен, он начнет отслеживать сервер API и реагировать на изменения в спецификации Ingress, обновляя правила маршрутизации и меняя конфигурацию системы.

3. Проксирование и балансировка нагрузки. Ingress-контроллер – это точка входа для внешнего запроса, который поступает в кластер. Используя балансировку нагрузки или DNS-запись, которая подключается к IP-адресу контроллера, трафик направляется к контроллеру. Как только будет установлено соединение, Ingress-контроллер берет на себя роль прокси и балансировщика нагрузки. 

4. Маршрутизация. Контроллер анализирует входящие запросы, собирает данные (имя хоста, путь и атрибуты заголовка) и на основе правил Ingress-ресурса определяет службу, куда он будет пересылать запрос. 

5. Терминирование SSL/TLS-соединений. При необходимости Ingress-контроллер может выполнять шифрование и дешифрование SSL/TLS-сертификатов.

6. Взаимодействие со службой. После того, как контроллер определит, какую именно службу запрашивает клиент, он проксирует запрос и позволяет службе обработать его. 

Типы Ingress

Существуют различные типы Ingress. Их различают по структуре и размерам кластера и количеству служб в нем. Ниже представлено описание самых распространенных типов.

Single Service Ingress (Ingress с одной службой)

Single Service Ingress (также известный как Simple Ingress – элементарный Ingress) – это базовая настройка Ingress, которая позволяет предоставлять доступ внешнему трафику к какой-то отдельной службе. При таком раскладе Ingress напрямую связан со службой (см. схему ниже). 

Такой тип Ingress-соединения позволяет избежать необходимости настраивать несколько имен хостов или применять маршрутизацию на основе пути.

Fanout Ingress (Ingress с разветвлением)

В случае, если Ingress нужно предоставлять доступ более чем к одной службе в кластере, Fanout Ingress вам очень сильно поможет. Он позволяет предоставлять доступ к службам, используя несколько разных имен хостов. 

На схеме выше вы можете видеть пример простого Fanout Ingress. Ingress перенаправляет запрос в нужную службу, опираясь на его URL-адрес HTTP, например, example.com/service-a. Этот тип Ingress позволяет направлять трафик с помощью одного и того же IP-адреса в более чем одну службу.

Name-based Virtual Hosting (Виртуальный хостинг на основе имени)

Ingress на основе NBVH направляет HTTP-трафик в более чем один хост с одним и тем же IP-адресом. NBVH позволяет пользователям использовать различные имена доменов для размещения нескольких служб или веб-сайтов на одном IP-адресе или порте. На схеме ниже продемонстрировано, как работает NBVH.

NBVH считывает заголовки HTTP-запросов для того, чтобы направить трафик в нужную службу. Например, клиентский запрос на посещение домена service-a.example.com будет перенаправлен в Службу А, а, перейдя по service-b.example.com, можно обратиться к Службе B, находящейся в том же домене.

Разница между Ingress, ClusterIP, NodePort и LoadBalancer

Ingress – это один из многих способов предоставления доступа к службам в кластере. Другие стандартные подходы подразумевают использование таких служб, как ClusterIP, NodePort и LoadBalancer. 

  • ClusterIP использует внутренний IP-адрес для того, чтобы предоставлять доступ к службам извне. Этот метод лучше всего подходит для этапов разработки и тестирования, но его также можно использовать для запуска информационных панелей и доступа к внутреннему трафику. 
  • NodePort – это виртуальная машина, которая предоставляет доступ к службе с помощью номера постоянного порта. Несмотря на то, что не рекомендуется использовать NodePort в производственной среде, ее довольно часто используют в процессе разработки и тестирования. Однако такое возможно только в том случае, если отсутствует необходимость в балансировке нагрузки, то есть если доступ необходимо предоставлять только к одной службе. 
  • LoadBalancer – это единственный метод (из этих трех), который вполне может стать заменой Ingress. Все потому, что он подходит для использования в производственной среде, а также может предоставлять доступ к службам для внешнего трафика.

Преимущества Kubernetes Ingress

Концепция Ingress оптимизирует работу Kubernetes несколькими способами: от упрощения внутрикластерных процессов и конфигурации до предоставления большей гибкости и расширяемости. Настроив Ingress в кластере, пользователи получат следующие преимущества:

  • Упрощенное управление внешними подключениями. С помощью Ingress пользователи могут настраивать и контролировать доступ к своим службам.
  • Можно определять правила маршрутизации, опираясь на имя хоста и URL-адрес. Это свойство Ingress дает больше контроля над маршрутизацией.
  • Настройка встроенной балансировки нагрузки. Создав несколько реплик служб для распределения трафика, вы сможете повысить масштабируемость и уровень доступности. За счет наличия встроенной балансировки нагрузки Ingress может оптимизировать использование доступных ресурсов, а также гарантировать, что приложение сможет обрабатывать большой объем трафика.
  • Упрощенное обнаружение служб. Ingress стандартизирует процесс предоставления доступа к службам и абстрагируется от деталей. Так что клиенты могут обнаруживать нужные службы и взаимодействовать с ними с помощью согласованного интерфейса. 
  • Шифрование и дешифрование HTTPS-трафика. За счет сквозного шифрования терминирование SSL/TLS-соединений позволяет клиентам и службам безопасно обмениваться данными. 
  • Можно использовать гибкие и расширяемые стратегии маршрутизации. За счет разнообразия поддерживаемых Ingress-контроллеров и за счет того, что в кластере можно запускать более чем один контроллер, у пользователей есть возможность создавать ту структуру, которая будет соответствовать их сценарию использования. 

Примеры Kubernetes Ingress

Самый распространенный способ внедрения Ingress в кластер Kubernetes состоит в том, что вам нужно указать соответствующую конфигурацию в YAML-файле, а затем применить ее с помощью kubectl. Каждый такой YAML-файл должен содержать следующие поля:

  • apiVersion
  • kind
  • metadata
  • spec 

Поле metadata содержит имя объекта Ingress, которое должно являться допустимым именем для поддомена DNS.

Ниже представлены несколько примеров YAML-файлов.

  • Single Service Ingress
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: simple-ingress-example
spec:
  defaultBackend:
    service:
      name: example-service
      port:
        number: 80
  • Fanout Ingress
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: fanout-ingress-example
spec:
  defaultBackend:
    service:
      name: example-service
      port:
        number: 80
  rules:
    - host: service-a.example.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: service-a
                port:
                  number: 80
    - host: service-b.example.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: service-b
                port:
                  number: 80

Примечание: если HTTP-запрос не соответствует ни одному из объектов, которые перечислены в поле rules, то по умолчанию Ingress использует службу, которая была указана в поле defaultBackend. В примере ниже это example-service.

  • NBVH Ingress
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: nbvh-example
spec:
  rules:
    - host: service-a.example.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: service-a
                port:
                  number: 80
    - host: service-b.example.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: service-b
                port:
                  number: 80

Заключение

Прочитав данное руководство, вы должны были получить общее представление о том, что такое Kubernetes Ingress. В руководстве было пояснено, как работает Ingress и Ingress-контроллеры, приводятся примеры и схемы. Кроме того, здесь были описаны наиболее важные преимущества, которые вы можете получить, настроив в вашем кластере Ingress. 

Ссылка
скопирована
Получите бесплатные уроки на наших курсах
Все курсы
DevOps
Скидка 25%
DevOps-инженер с нуля
Научитесь использовать инструменты и методы DevOps для автоматизации тестирования, сборки и развертывания кода, управления инфраструктурой и ускорения процесса доставки продуктов в продакшн. Станьте желанным специалистом в IT-индустрии и претендуйте на работу с высокой заработной платой.
Получи бесплатный
вводный урок!
Пожалуйста, укажите корректный e-mail
отправили вводный урок на твой e-mail!
Получи все материалы в telegram и ускорь обучение!
img
Еще по теме:
img
Git Flow - это специальная система ветвления для Git. Она помогает команде лучше контролировать и добавлять различные версии про
img
Docker — популярная платформа виртуализации на уровне ОС. Она поставляет приложения в пакетах (контейнерах), которые, представля
img
Хуки в Git — это bash-скрипты, которые запускаются до или после команд Git, например, коммитов и пушей. Они позволяют автоматизи
img
  Nomad и Kubernetes – это две самые популярные платформы оркестровки, предназначенные для оркестровки динамических рабочих нагр
img
  Давайте узнаем о новом Ops-течении – GitOps! DevOps поспособствовал цифровизации многих компаний. Речь идет о командах разрабо
img
  Канареечное (canary) развёртывание – это метод разработки и развертывания программного обеспечения, который позволяет выпускат
21 ноября
20:00
Бесплатный вебинар
Введение в Docker