Сервисы и ингрессы

В подразделе Сеть выбранного неймспейса доступны страницы:

Services

Сервис (Service) является объектом, который определяет логический набор подов и политику доступа к ним. Сервисы создают связь между подами, которые от них зависят. Использование сервиса позволяет делать доступными за пределами кластера уникальные IP-адреса подов. Сервисы могут быть сконфигурированы для разных режимов доступа. Для выбора режима доступа существуют следующие типы сервисов:

  • LoadBalancer - автоматически предоставляет внешний балансировщик нагрузки для приложений в кластере. Используйте этот тип, когда необходимо обеспечить доступ к приложениям извне кластера;
  • ExternalName - открывает доступ к сервису по содержимому поля externalName (например, foo.bar.example.com), возвращая запись CNAME с его значением. При этом не используется прокси;
  • ClusterIP - предназначен для внутренних нужд кластера, обеспечивая доступ к подам внутри кластера;
  • NodePort - позволяет обращаться к приложениям внутри кластера снаружи за счет открытия статического порта на каждом узле кластера и перенаправления входящего трафика с этого порта на поды, соответствующие селектору сервиса.

Сервисы можно создать, отредактировать, удалить и просмотреть информацию о них.

Создание Services

Чтобы добавить новый сервис нажмите + Добавить Service. В открывшемся окне необходимо заполнить:

  • Имя сервиса;
  • Лейблы и аннотации;
  • Сведения о развертывании, в том числе:
    • тип сервиса. Доступны: LoadBalancer, ExternalName, ClusterIP, NodePort;
    • нужно ли игнорировать статус Pod (по умолчанию выбрано значение “нет”);
    • добавить порты, для этого нажмите + и заполните:
      • Имя порта, AppProtocol, NodePort, Port, TargetPort;
      • для Protocol доступены: TCP, UDP, SCTP
    • определить внешние IP-адреса;
    • добавить лейблы селектора подов.

После завершения создания сервиса нажмите кнопку Сохранить.

Чтобы удалить сервис, нажмите в строке элемента или перейдите на страницу просмотра сервиса, нажмите Удалить.

Просмотр и редактирование Service

Для просмотра информации о конфигурации, статусе, дате создания интересующего сервиса выберите его из списка и перейдите на страницу с информацией. На странице Сервис вы можете:

  • перейти к просмотру и редактированию манифеста на вкладке Манифест;
  • удалить сервис по кнопке Удалить;
  • изменить тип сервиса или настройку игнорирования статуса пода;
  • добавить внешние IP-адреса;
  • внести необходимые изменения в порты, лейблы селектора подов.

При необходимости добавьте лейблы и аннотации на вкладке Лейблы и аннотации.

После внесения изменения нажмите Сохранить.

Чтобы изменить Service с помощью YAML манифеста, перейдите на вкладку Манифест, обновите данные. После внесения изменений в манифест выполните проверку. Результат проверки будет доступен в правой части экрана. Раскройте блок результата проверки, чтобы увидеть полный манифест. Если валидация формата манифеста не пройдена, проверка манифеста не будет доступна.

Сохраните изменения, внесенные в манифест. Несохраненные данные не будут применены.

Создание Secret для сервиса

Чтобы задать новый сертификат для добавленного сервиса, в разделе “Хранилище” неймспейса создайте секрет и введите название этого секрета в Ingress. Для этого в неймспейсе, в который установлен сервис:

  1. Перейдите в Хранилище/Secrets.
  2. Создайте новый Secret + Добавить Secret.
  3. Задайте имя и возможность редактирования, выберите тип kubernetes.io/tls,
  4. Добавьте файл сертификата клиента и файл ключа клиента.
  5. Нажмите Сохранить.
  6. Перейдите в Сеть/Ingresses.
  7. Создайте новый Ingress, заполните поля. В SecretName выберите созданный секрет.
  8. В ServiceName введите название сервиса, для которого необходимо изменить сертификат.

Ingresses

Игресс (Ingress) является объектом, который управляет внешним доступом к сервисам в кластере. Ингресс предоставляет HTTP и HTTPS-маршруты извне кластера сервисам внутри кластера, может обеспечивать балансировку нагрузки, настройку SSL/TLS и виртуальный хостинг на основе имени.

Ингрессы можно создать, отредактировать, удалить и просмотреть информацию о них.

Создание Ingress

Чтобы добавить новый Ingress нажмите + Добавить Ingress. В открывшемся окне необходимо:

  • заполнить название ингресса;
  • Добавить лейблы и аннотации;
  • Заполнить спецификацию объекта, в том числе:
    • IngressClassName - укажите Nginx для использования системных Ingress-контроллеров или NAMESPACENAME для использования выделенных ингрессов неймспейса. Вместо NAMESPACENAME подставьте название неймспейса.;
    • Ingress Service Backend:
      • Name: укажите название сервиса, который будет использоваться в качестве бэкенда для Ingress;
      • Port name: укажите имя порта, который будет использоваться для входящих запросов.
      • Port number: укажите номер порта, который будет использоваться для входящих запросов.
  • Заполнить правила. Для этого нужно нажать + и задать:
    • Значение хоста (Host), под который подходит сертификат;
    • Добавить HTTPIngressPath. Нажмите на + и в окне справа:
      • заполните Path (путь, по которому будет доступен сервис),
      • выберите Path type. Для выбора доступны: Exact, Prefix, ImplementationSpecific
      • заполните поля Ingress Backend Service:
        • ServiceName: укажите название сервиса, для которого необходимо изменить сертификат.
        • Port name: укажите имя порта в сервисе, который будет использоваться для входящих запросов.
        • Port number: укажите номер порта в сервисе, который будет использоваться для входящих запросов.
  • Задать IngressTLS. Для этого нужно нажать + и выбрать:
    • Имя секрета (Secret name) из выпадающего списка. Вы можете выбрать созданный ранее секрет, содержащий сертификаты;
    • Один или несколько хостов (Hosts). Значения в hosts соответствуют значениям хостов, заданных в правилах.

После завершения создания Ингресса нажмите кнопку Сохранить.

Чтобы удалить ингресс, нажмите в строке элемента или перейдите на страницу просмотра ингресс, нажмите Удалить.

Просмотр и редактирование Ingress

Для просмотра информации о конфигурации, статусе, дате создания интересующего ингресса выберите его из списка и перейдите на страницу с информацией. На вкладке Ingress вы можете:

  • перейти к просмотру и редактированию манифеста на вкладке Манифест;
  • удалить ингресс по кнопке Удалить;
  • внести изменения в Ingress Service Backend
  • добавить и удалить Rules и IngressTLS. При необходимости добавьте лейблы и аннотации на вкладке Лейблы и аннотации.

После внесения изменения нажмите Сохранить.

Публикация сервиса с TLS

Вы можете задать значение сертификата в Ingress в консоли или графическом интерфейсе платформы.

Чтобы защитить доступ к приложению Ingress, вам необходимо указать Secret, содержащий требуемый закрытый ключ и сертификат TLS. Важно знать, что Ingress поддерживает только один порт TLS - 443, и предполагает, что TLS соединение будет завершено на точке входа (все данные, передаваемые к сервису и его подам, будут незашифрованными). Если в секции конфигурации TLS в Ingress указаны разные хосты, то они будут обрабатываться на этом же порту с помощью расширения SNI TLS. Важно, чтобы Secret для TLS содержал ключи с именами tls.crt и tls.key, где tls.crt содержит сертификат, а tls.key - закрытый ключ, которые будут использоваться для TLS соединения.

Например:

apiVersion: v1
kind: Secret
metadata:
  name: testsecret-tls
  namespace: default
data:
  tls.crt: base64 encoded cert
  tls.key: base64 encoded key
type: kubernetes.io/tls

Ссылка на этот Secret в Ingress указывает контроллеру Ingress защитить канал от клиента до балансировщика нагрузки с использованием TLS. Убедитесь, что в созданном вами Secret TLS содержится Common Name (CN) или полностью определенное доменное имя (FQDN) для https-example.foo.com.

Примечание: Протокол TLS не будет работать с правилом по умолчанию, так как требуется, чтобы сертификаты были выданы для всех возможных поддоменов. Поэтому хосты, указанные в разделе tls, должны явно соответствовать хосту в разделе rules.

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: tls-example-ingress
spec:
  tls:
  - hosts:
      - https-example.foo.com
    secretName: testsecret-tls
  rules:
  - host: https-example.foo.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: service1
            port:
              number: 80

Примечание: В платформе Штурвал в качестве Ingress-контроллера используется NGinx. Подробнее можно ознакомиться на официальном сайте NGinx Ingress Controller.

Пример

Публикуем сервис my-service, делаем его доступным по адресу my-service.corp.domain

Шаги:

  1. Перейдите в Хранилище/Secrets.
  2. Создайте новый Secret.
  3. Выберите тип kubernetes.io/tls.
  4. Добавьте файл сертификата клиента и файл ключа для публикуемого адреса.
  5. Нажмите Сохранить.
  6. Перейдите в Сеть/Ingresses.
  7. Создайте новый Ingress и заполните поля:
  • Имя Ingress: my-service-ingress

  • IngressClassName: оставьте пустым (если не требуется указывать класс Ingress)

  • Ingress Service Backend:

    • Name: my-service
    • Port name: http
    • Port number: 80
  • Правила:

    • Значение хоста (Host): my-service.corp.domain
    • HTTPIngressPath:
      • Path: /
      • Path type: Prefix