Сеть

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

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

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

Рисунок 337 ‒ Просмотр Service

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

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

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

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

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

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

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

Ingresses

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

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

Создание Ingress

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

  • заполнить название Ingress;
  • добавить лейблы и аннотации;
  • заполнить спецификацию объекта, в том числе:
  • IngressClassName ‒ выбрать необходимое имя IngressClass из выпадающего списка;
  • 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 и нажать Удалить.

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

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

Рисунок 338 ‒ Вкладка "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-соединения.

Пример Secret:

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".

Пример Ingress:

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 number80;
  • Правила:
    • Значение хоста (Host) ‒ my-service.corp.domain;
    • HTTPIngressPath:
      • Path ‒ /;
      • Path type ‒ Prefix.