Сервисы и ингрессы
На этой странице
В разделе Service Discovery на вкладке Сервисы можно создать, отредактировать, удалить сервис и просмотреть информацию о ранее созданных сервисах.
Чтобы добавить новый сервис нажмите + Добавить сервис. В открывшемся окне необходимо заполнить:
- Описание сервиса;
- Сведения о развертывании, в том числе:
- тип сервиса. Доступны: LoadBalancer, ExternalName, ClusterIP, NodePort;
- нужно ли игнорировать статус Pod (по умолчанию выбрано значение “нет”);
- прописать порты;
- определить внешние IP-адреса.
После завершения создания Сервиса нажмите кнопку Сохранить.
На вкладке Ingresses можно создать, отредактировать, удалить Ingress и просмотреть информацию о ранее созданных ингрессах.
Чтобы добавить новый Ingress нажмите + Добавить Ingress. В открывшемся окне необходимо заполнить:
- Название ингресса;
- Спецификацию объекта, в том числе
- IngressClassName;
- Ingress Service Backend;
- Заполнить правила. Для этого нужно задать:
- Значение хоста (Host);
- Добавить HTTPIngressPath;
- Задать IngressTLS. Для этого нужно задать:
- выбрать имя секрета (Secret name) из выпадающего списка;
- выбрать один или несколько хостов (Hosts). Значения в hosts соответствуют значениям хостов, заданных в правилах.
Чтобы удалить элемент, нажмите в строке элемента.
Чтобы задать новый сертификат для добавленного сервиса, создайте секрет и введите название этого секрета в Ingress. Для этого в неймспейсе, в который установлен системный сервис:
- перейдите в Хранилище/Secrets.
- Создайте новый Secret
- Выберите тип kubernetes.io/tls
- Добавьте файл сертификата клиента и файл ключа клиента.
- Нажмите Сохранить.
- Перейдите в Сеть/Ingresses.
- Создайте новый Ingress, заполните поля. В Secret name выберите созданный секрет.
- В ServiceName введите название сервиса, для которого необходимо изменить сертификат.
После завершения создания Ингресса нажмите кнопку Сохранить.
Публикация сервиса с TLS
Вы можете задать значение сертификата в Ingress в cli или графическом интерфейсе платформы.
Чтобы защитить доступ к приложению 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.
Чтобы задать новый сертификат для добавленного сервиса из графического интерфейса платформы:
- Перейдите в Хранилище/Secrets.
- Создайте новый Secret, выберите тип kubernetes.io/tls.
- Добавьте файл сертификата клиента и файл ключа для публикуемого адреса.
- Нажмите Сохранить.
- Перейдите в Сеть/Ingresses.
- Создайте новый 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: укажите значения хостов, соответствующих значениям указанным в поле “Значение хоста (Host)” в правилах.
Пример:
Публикуем сервис 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