Сеть
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. Для этого в неймспейсе, в который установлен сервис:
- перейти в "Хранилище → Secrets";
- создать новый Secret, нажав
+ Добавить Secret; - задать имя и возможность редактирования, выбрать тип "kubernetes.io/tls";
- добавить файл сертификата клиента и файл ключа клиента;
- нажать
Сохранить; - перейти в "Сеть → Ingresses";
- создать новый Ingress, заполнить поля, в SecretName выбрать созданный секрет;
- в 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 нужно проделать следующие шаги:
- перейти в "Хранилище → Secrets";
- создать новый Secret;
- выбрать тип kubernetes.io/tls;
- добавить файл сертификата клиента и файл ключа для публикуемого адреса;
- нажать
Сохранить; - перейти в "Сеть → Ingresses";
- создать новый 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.