Установка Task-прокси
Описание
Task-прокси предоставляет доступ к веб-сервисам, развёрнутым в операциях YTsaurus. Подробнее можно почитать в разделе Task-прокси.
Предварительные требования
На данном этапе у вас должны быть:
- Helm 3.x;
- запущенный кластер YTsaurus и внутренний адрес HTTP прокси;
- специальный пользователь-робот
robot-task-proxyс выписанным для него токеном (см. раздел Управление токенами):yt create user --attr "{name=robot-task-proxy}" yt issue-token robot-task-proxy > robot-task-proxy-token
Настройка
Выдача прав
Назначьте минимально необходимые права (ACL) для пользователя-робота (команды предполагают, что пользователь — это robot-task-proxy):
yt set //sys/operations/@acl/end '{subjects=[robot-task-proxy];permissions=[read];action=allow}'
yt set //sys/accounts/sys/@acl/end '{action=allow; subjects=[robot-task-proxy]; permissions=[use]}'
yt create map_node //sys/task_proxies
yt set //sys/task_proxies/@acl/end '{action=allow; subjects=[robot-task-proxy]; permissions=[read; write; create; remove;]}'
Создание Kubernetes Secret с токенами
Создайте секрет с токенами для доступа Task-прокси к YTsaurus.
kubectl create secret generic task-proxy-token \
--from-file robot-task-proxy-token \
-n ${NAMESPACE}
Подготовка values.yaml
Пример конфигурации Task-прокси:
baseDomain: my-cluster.ytsaurus.example.net
replicas: 2
proxy:
resources:
requests:
cpu: "1"
memory: 1Gi
server:
resources:
requests:
cpu: "1"
memory: 1Gi
nodeSelector:
yt-group: tp
Пояснения к параметрам:
- Основные параметры:
dirPath– путь к директории Task-прокси в Кипарисе. По умолчанию путь к таблице с данными сервисов будет//sys/task_proxies/services.baseDomain– домены сервисов используют данный как базовый, добавляя хэш сервиса, например,645236d8.my-cluster.ytsaurus.example.netдля примера конфигурации выше.tokenSecretRef– имя k8s секрета с токеном для доступа к Task-прокси, по умолчанию имя –task-proxy-token.discoveryPeriodSeconds– периодичность запуска обнаружения сервисов (task discovery) в секундах.
- Параметры безопасности:
authauth.enabled– включить контроль доступа к операцииauth.cookieName– имя куки аутентификации, по умолчаниюYTCypressCookie
tlstls.enabled– включить TLS для Task-проксиtls.certSecretRef– имя k8s секрета с TLS сертификатом
- Параметры развертывания:
- Task-прокси состоит из двух приложений, расположенных в одном поде:
- Envoy, осуществляющий проксирование запросов к джобам и контроль доступа.
- Сервер, обнаруживающий веб-сервисы и снабжающий Envoy таблицей маршрутизации через xDS протокол.
replicas– число реплик (подов) Task-проксиproxyproxy.resources– ресурсы для Envoyproxy.imageproxy.image.repository– репозиторий образа Envoyproxy.image.tag– тег образа Envoy
serverserver.resources– ресурсы для сервера Task-проксиserver.imageserver.image.repository– репозиторий образа сервера Task-проксиserver.image.tag– тег образа сервера Task-прокси
nodeSelector– селектор k8s нод, укажите в нём свои меткиaffinity– вы можете установить pods anti-affinity, чтобы предотвратить аллокацию подов на одних и тех же k8s нодах.
- Task-прокси состоит из двух приложений, расположенных в одном поде:
Дефолтные значения параметров указаны в values.yaml.
Установка Helm-чарта
helm install task-proxy oci://ghcr.io/ytsaurus/task-proxy-chart \
--version ${VERSION} \
-f values.yaml \
-n ${NAMESPACE}
Настройка ingress контроллера
Ниже приведен пример настройки вашего ingress контроллера для Task-прокси, а именно объектов gateway и routes.
Добавьте маршруты (routes) для HTTP и gRPC протоколов:
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: task-proxy-http-https-route
namespace: {{.Namespace}}
spec:
hostnames:
- "{{.TaskProxyPublicFQDN}}"
parentRefs:
- name: gateway
sectionName: yt-task-proxy-http-https-listener
rules:
- matches:
- path:
type: PathPrefix
value: /
backendRefs:
- kind: Service
name: task-proxy
port: 80
---
apiVersion: gateway.networking.k8s.io/v1
kind: GRPCRoute
metadata:
name: task-proxy-grpc-https-route
namespace: {{.Namespace}}
spec:
hostnames:
- "{{.TaskProxyPublicFQDN}}"
parentRefs:
- name: gateway
sectionName: yt-task-proxy-grpc-https-listener
rules:
- backendRefs:
- kind: Service
name: task-proxy
port: 80
Добавьте соответствующие маршрутам listener-ы в секцию spec.listeners объекта gateway:
...
apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
name: gateway
...
spec:
listeners:
...
- name: yt-task-proxy-http-https-listener
protocol: HTTPS
port: 443
hostname: "{{.TaskProxyPublicFQDN}}"
tls:
certificateRefs:
- ...
- name: yt-task-proxy-grpc-https-listener
protocol: HTTPS
port: 9090
hostname: "{{.TaskProxyPublicFQDN}}"
tls:
certificateRefs:
- ...
Поддержка TLS
Если вам нужно, чтобы Task-прокси работала с использованием TLS, добавьте следующие параметры для Helm-чарта:
tls:
enabled: true
secretName: yt-domain-cert
Ниже приведен пример создания секрета yt-domain-cert с использованием файлов приватного ключа и цепочки сертификатов:
kubectl create secret tls yt-domain-cert -n yt --cert=cert.pem --key=key.pem