Airlock Application Service проксирует HTTP/HTTPS-трафик к внутренним веб-приложениям: панелям мониторинга, CI/CD, wiki, Kubernetes Dashboard и другим сервисам, доступным только из частной сети.
Пользователи открывают приложение через веб-интерфейс Airlock или по адресу https://<имя-приложения>.<домен-прокси>.
Предварительные требования
- Работающий кластер Airlock (Auth + Proxy).
- DNS-запись
*.airlock.example.com, указывающая на Proxy Service (для поддоменов приложений). - TLS-сертификат для Proxy Service и wildcard для поддоменов приложений.
- Хост, Docker-контейнер или Kubernetes для приложения и Application Service.
- Доступ к
airctl.
Шаг 1. Join-токен
airsh login --user=admin --proxy=airlock.example.com
airctl tokens add \
--type=app \
--app-name=grafana \
--app-uri=http://localhost:3000 \
--format=text > /tmp/tokenШаг 2. Запуск приложения
Пример Grafana в Docker:
docker run --detach --name grafana --publish 3000:3000 grafana/grafanaВ grafana.ini укажите домен Proxy Service:
[server]
domain = airlock.example.comПример Grafana в Kubernetes:
helm repo add grafana https://grafana.github.io/helm-charts
helm install example-grafana grafana/grafana \
--create-namespace \
--namespace example-grafanaВнутренний URI в кластере: http://example-grafana.example-grafana.svc.cluster.local.
Шаг 3. Application Service
Linux / Docker
sudo airlock configure \
--output=file \
--proxy=airlock.example.com:443 \
--token=/tmp/token \
--roles=app \
--app-name=grafana \
--app-uri=http://localhost:3000
sudo systemctl enable --now airlockКонфигурационный файл
version: v3
airlock:
data_dir: /var/lib/airlock-app
auth_token: /tmp/token
proxy_server: airlock.example.com:443
app_service:
enabled: yes
apps:
- name: grafana
uri: http://localhost:3000
public_addr: grafana.airlock.example.com
labels:
env: prod
auth_service:
enabled: "no"
ssh_service:
enabled: "no"
proxy_service:
enabled: "no"sudo airlock start --config=/etc/airlock.yamlKubernetes
JOIN_TOKEN=$(cat /tmp/token)
helm install airlock-kube-agent airlock/airlock-kube-agent \
--create-namespace \
--namespace airlock-agent \
--set roles=app \
--set proxyAddr=airlock.example.com:443 \
--set authToken=${JOIN_TOKEN} \
--set "apps[0].name=grafana" \
--set "apps[0].uri=http://example-grafana.example-grafana.svc.cluster.local" \
--set "apps[0].labels.env=dev"Шаг 4. Пользователь и доступ
airctl users add --roles=access appuserСпособы доступа:
- Веб-UI Airlock → вкладка Applications → Launch.
- Прямой URL:
https://grafana.airlock.example.com.
Имя приложения
Имя приложения (--app-name) должно быть допустимым поддоменом: до 63 символов, только a-z, 0-9, -.
После регистрации приложение доступно по адресу <app-name>.<proxy-host>, например grafana.airlock.example.com. Можно переопределить через public_addr в конфигурации.
Дополнительные параметры
Приложение в подкаталоге
- name: k8s-dashboard
uri: "http://10.0.1.60:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/"
public_addr: k8s.airlock.example.comПерезапись redirect
Для приложений с внутренними редиректами:
- name: jenkins
uri: https://localhost:8001
public_addr: jenkins.airlock.example.com
rewrite:
redirect:
- localhost
- jenkins.internal.devSelf-signed сертификат приложения
- name: app
uri: https://localhost:8443
public_addr: app.airlock.example.com
insecure_skip_verify: trueНе рекомендуется для production.
Заголовки и JWT
Airlock может добавлять заголовки к запросам, в том числе JWT с информацией о пользователе:
- name: dashboard
uri: https://localhost:4321
public_addr: dashboard.airlock.example.com
rewrite:
headers:
- "Authorization: Bearer {{internal.jwt}}"Выход из приложения
Принудительный выход до истечения сессии:
https://grafana.airlock.example.com/airlock-logoutTCP-приложения
Для приложений без HTTP (plain TCP) используйте TCP App Access — укажите протокол TCP в конфигурации Application Service.
Политики доступа
Доступ к приложениям настраивается через RBAC (app_labels в ролях). См. Политики доступа.