Добавить приложение в ML-платформу
В ML-платформе вы можете добавлять дополнительные приложения с помощью kubectl, helm, kustomize.
Можно открывать приложение по URL вида https://myapp-yourdomain.mlops.selcloud.ru
или добавить приложение на стартовую страницу ML-платформы.
Для приложений, которые будут доступны в интернете, нужно настроить авторизацию.
Добавить новое приложение в ML-платформу
Чтобы добавить новое приложение в ML-платформу, нужно создать объект вида Ingress. Ingress Controller создавать не нужно — в ML-платформе в кластерах Managed Kubernetes предустановлен контроллер Traefik.
Получать TLS-сертификаты непосредственно в ML-платформе не нужно, так как сертификат установлен на обратном прокси-сервере (reverse proxy).
-
Подключитесь к кластеру Managed Kubernetes, который был создан при подключении ML-платформы.
-
Создайте yaml-файл с манифестом для объекта Ingress.
Пример манифеста:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: myapp
namespace: <ml_platform_namespace>
annotations:
traefik.ingress.kubernetes.io/router.tls: "true"
spec:
tls:
- hosts:
- "myapp-<ml_platform_domain>"
secretName: myapp-<ml_platform_domain>-cert
rules:
- host: "myapp-<ml_platform_domain>"
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: myapp
port:
number: 80Укажите:
<ml_platform_namespace>
— пространство имен (Namespace) ML-платформы;<ml_platform_domain>
— URL видаyourdomain.mlops.selcloud.ru
, который был выдан после подключения ML-платформы.
-
Создайте Ingress:
kubectl apply -f <ingress.yaml>
Укажите
<ingress.yaml>
— имя yaml-файла с м анифестом для Ingress. -
Откройте приложение по адресу:
https://myapp-<ml_platform_domain>
Укажите
<ml_platform_domain>
— URL видаyourdomain.mlops.selcloud.ru
, который был выдан после подключения ML-платформы. -
Опционально: добавьте приложение на стартовую страницу.
Добавить приложение на стартовую страницу ML-платформы
Стартовая страница ML-платформы работает с помощью инструмента Forecastle. На странице можно посмотреть все приложения, которые по умолчанию запущены в кластере Managed Kubernetes.
Если вы добавили новое приложение в ML-платформу, его так же можно разместить на стартовой странице.
-
Подключитесь к кластеру Managed Kubernetes, который был создан при подключении ML-платформы.
-
Откройте yaml-файл с манифестом для Ingress приложения и добавьте в него аннотации:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: myapp
namespace: <ml_platform_namespace>
annotations:
traefik.ingress.kubernetes.io/router.tls: "true"
forecastle.stakater.com/expose: "true"
forecastle.stakater.com/appName: MyApp # Название приложения, которое будет показано на стартовой странице
forecastle.stakater.com/group: MyAppsGroup # Группа на стартовой странице, в которую добавится приложение
forecastle.stakater.com/icon: <app_icon_url>Укажите:
<ml_platform_namespace>
— пространство имен (Namespace) ML-платформы;<app_icon_url>
— опционально: URL изображения для иконки приложения.
-
Примените изменения для Ingress:
kubectl apply -f <ingress.yaml>
Укажите
<ingress.yaml>
— имя yaml-файла с манифестом для Ingress. -
Откройте стартовую страницу ML-платформы и проверьте, что приложение добавилось:
https://myapp-<ml_platform_domain>
Укажите
<ml_platform_domain>
— URL видаyourdomain.mlops.selcloud.ru
, который был выдан после подключения ML-платформы.
Настроить авторизацию для приложения
Если вы добавили приложение в ML-платформу, обязательно настройте авторизацию.
Настройка авторизации зависит от протоколов, которые поддерживает приложение:
- если приложение поддерживает авторизацию при помощи протоколов OIDC/OAuth2/SAML, создайте клиента Keycloak;
- если приложение не поддерживает протоколы OIDC/OAuth2/SAML или у приложения нет механизмов авторизации, используйте gogatekeeper — это sidecar для Keycloak.
Авторизация при помощи OIDC
Авторизация при помощи gogatekeeper
Создайте клиента Keycloak и настройте для приложения авторизацию через Keycloak ML-платформы. Когда пользователь авторизуется в приложении, клиенту Keycloak отправится запрос. Если он его провалидирует, пользователь сможет зайти в приложение. Подробнее об использовании Keycloak в ML-платформе в инструкции Управление пользователями в Keycloak.
-
Подключитесь к кластеру Managed Kubernetes, который был создан при подключении ML-платформы.
-
Создайте клиента Keycloak через панель управления Keycloak по адресу
https://keycloak-<ml_platform_domain>/admin/cmlp/console/
или создайте yaml-файл с манифестом для объекта KeycloakClient.Пример манифеста:
apiVersion: keycloak.org/v1alpha1
kind: KeycloakClient
metadata:
name: myapp-client
namespace: <ml_platform_namespace>
spec:
client:
# Settings
enabled: true
clientId: "<appclient_name>"
name: ""
description: ''
secret: "<password>"
protocol: "openid-connect"
redirectUris:
- "https://<appclient_name>-.<ml_platform_namespace>/*" # URI, с которого будет происходить редирект в Keycloak
rootUrl: "${authBaseUrl}"
baseUrl: "/"
publicClient: false
bearerOnly: false
serviceAccountsEnabled: false
consentRequired: false
directAccessGrantsEnabled: true
implicitFlowEnabled: false
frontchannelLogout: false
standardFlowEnabled: true
surrogateAuthRequired: false
useTemplateConfig: true
useTemplateMappers: true
# Scopes
useTemplateScope: true
fullScopeAllowed: false
defaultClientScopes:
- "profile"
- "email"
# Roles
protocolMappers:
- config:
access.token.claim: "true"
id.token.claim: "false"
included.custom.audience: <appclient_name>
consentRequired: false
name: Audience-forecastle-cmlp
protocol: openid-connect
protocolMapper: oidc-audience-mapper
realmSelector:
matchLabels:
app.kubernetes.io/name: keycloak-realm-cmlp
app.kubernetes.io/instance: keycloak-operatorУкажите:
<ml_platform_namespace>
— пространство имен (Namespace) ML-платформы;<appclient_name>
— уникальное имя клиента Keycloak;<password>
— пароль для клиента Keycloak. Потребуется для настройки приложения.
-
Создайте клиента Keycloak:
kubectl apply -f <keycloakclient.yaml>
Укажите
<keycloakclient.yaml>
— имя yaml-файла с манифестом для создания клиента Keycloak. -
Проверьте, что клиент создан. Откройте приложение Security Admin Console и перейдите в раздел Configure → Clients.
-
Настройте приложение на авторизацию через созданного клиента Keycloak:
- используйте python-библиотеку python-keycloak;
- или используйте Grafana и измените конфигурационный файл по примеру из документации Grafana.
Gogatekeeper работает как прокси между контейнером с приложением и сервисом, запрашивает JWT (JSON Web Token) и проверяет его, чтобы выдать доступ к приложению.
В качестве Injector в ML-платформе установлен gogatekeeper-operator.
-
Подключитесь к кластеру Managed Kubernetes, который был создан при подключении ML-платформы.
-
Создайте yaml-файл с манифестом для объекта Gogatekeeper в любом пространстве имен.
Пример манифеста:
apiVersion: gatekeeper.theendbeta.me/v1alpha1
kind: Gogatekeeper
metadata:
name: gatekeeper-for-myapp
namespace: mynamespace
spec:
defaultconfig: |-
upstream-url: http://127.0.0.1:80 # Порт, на котором слушает контейнер myapp
listen: :3000 # Порт gogatekeeper, на который нужно будет переключить трафик
listen-admin: :4000
enable-refresh-tokens: true
secure-cookie: false
oidcurl: https://keycloak-<ml_platform_domain>/auth/realms/CMLP # Ссылка на реалмУкажите
<ml_platform_domain>
— URL видаyourdomain.mlops.selcloud.ru
, который был выдан после подключения ML-платформы. -
Создайте Gogatekeeper:
kubectl apply -f <gogatekeeper.yaml>
Укажите
<gogatekeeper.yaml>
— имя yaml-файла с манифестом для создания Gogatekeeper. -
Откройте yaml-файл с манифестом для пода (Pod) и добавьте в него аннотации:
apiVersion: v1
kind: Pod
metadata:
annotations:
gatekeeper.gogatekeeper: gatekeeper-for-myapp
gatekeeper.gogatekeeper/client-id: myapp # ID из KeycloakClient
gatekeeper.gogatekeeper/client-secret: <password>
gatekeeper.gogatekeeper/encryption-key: <another_password>
gatekeeper.gogatekeeper/redirection-url: https://myapp-<ml_platform_domain>
gatekeeper.gogatekeeper/upstream-url: http://127.0.0.1:80Укажите:
<password>
— пароль для клиента Keycloak. Потребуется для настройки приложения;<another_password>
— другой произвольный пароль;<ml_platform_domain>
— URL видаyourdomain.mlops.selcloud.ru
, который был выдан после подключения ML-платформы.
-
Примените изменения в манифесте:
kubectl apply -f <pod.yaml>