В этом руководстве описано использование клиентской утилиты Airlock — airsh.
Вы узнаете, как:
- Войти в кластер и получить сертификат пользователя.
- Подключаться к серверам по SSH.
- Работать с кластерами Kubernetes через
kubectl. - Подключаться к базам данных.
- Копировать файлы, просматривать узлы и записи сессий.
Полный список команд доступен также через airsh help в терминале.
Быстрый старт
# Вход в кластер Airlock. Сертификат сохраняется в ~/.airsh/airlock.example.com
airsh login --proxy=airlock.example.com
# SSH-подключение к узлу
airsh ssh user@node
# airsh ssh принимает те же аргументы, что и OpenSSH:
airsh ssh -o ForwardAgent=yes user@node
# Можно создать символическую ссылку:
ln -s /path/to/airsh /path/to/ssh
ssh user@host
# Удаление сертификатов с локальной машины:
airsh logoutAirlock полностью совместим с существующими SSH-процессами: достаточно выполнять airsh login перед работой.
Установка airsh
Установите бинарный файл airsh той же мажорной версии, что и сервер Airlock в вашем кластере.
Чтобы узнать версию сервера:
- В веб-интерфейсе выберите имя пользователя в правом верхнем углу → Help & Support. Версия кластера указана в разделе CLUSTER INFORMATION.
- Через API:
curl https://airlock.example.com/webapi/find | jq '.server_version'Идентификация пользователей
Идентичность пользователя в Airlock существует в рамках кластера. На узлах кластера могут быть разные пользователи ОС. Администратор Airlock назначает разрешённые логины каждой учётной записи.
При подключении к удалённому узлу нужно указать логин Airlock (флаг --user) и логин ОС в формате login@host:
# Аутентификация в кластере «work» как joe, вход на узел как root:
airsh ssh --proxy=work.example.com --user=joe root@nodeВход в кластер
Для получения сертификата выполните:
# Полная форма:
airsh login --proxy=proxy_host:<https_proxy_port>
# Порты по умолчанию:
airsh login --proxy=work.example.com
# Нестандартный HTTPS-порт:
airsh login --proxy=work.example.com:5000| Порт | Описание |
|---|---|
| https_proxy_port | HTTPS-порт прокси (по умолчанию 443 или 3080) |
Команда login сохраняет сертификат в ~/.airsh и в ssh-agent, если он запущен. По умолчанию сертификаты действуют 12 часов.
Выполняйте airsh login перед другими командами — тогда флаг --proxy можно не указывать: airsh ssh user@host будет работать.
Кластер может поддерживать несколько источников идентификации. Для выбора коннектора используйте флаг --auth:
# Локальный пользователь admin:
airsh --proxy=proxy.example.com --auth=local --user=admin login
# SSO через GitHub (коннектор «github»):
airsh --proxy=proxy.example.com --auth=github loginПри внешней аутентификации airsh открывает браузер. Чтобы подавить это поведение:
airsh login --proxy=work.example.com --browser=noneСсылка для входа будет выведена в терминал — скопируйте её в браузер.
Просмотр сертификата
airsh status
# > Profile URL: https://proxy.example.com:3080
# Logged in as: johndoe
# Cluster: proxy.example.com
# Roles: access, auditor, editor
# Logins: root, admin, guest
# Kubernetes: enabled
# Valid until: 2017-04-25 15:02:30 -0700 PDT [valid for 1h0m0s]
# Extensions: permit-agent-forwarding, permit-port-forwarding, permit-ptyИнтеграция с SSH-agent
Если запущен ssh-agent, airsh login сохраняет сертификат в агенте. Проверка:
ssh-add -LЧтобы отключить интеграцию с агентом, передайте --no-use-local-ssh-agent или установите AIRLOCK_USE_LOCAL_SSH_AGENT=false.
Файлы идентичности
# Сохранить сертификат в файл joe.pem:
airsh login --proxy=proxy.example.com --out=joe
# Использовать файл для входа:
airsh ssh --proxy=proxy.example.com -i joe joe@dbДля совместимости с OpenSSH добавьте --format=openssh — будут созданы файлы joe и joe-cert.pub.
SSH-доступ
Просмотр узлов
airsh ls
# Node Name Address Labels
# --------- ------- ------
# turing ⟵ Tunnel os=linux
# graviton 10.1.0.7:3022 os=osx
# Фильтр по меткам:
airsh ls os=osxИнтерактивная оболочка
airsh ssh user@node
airsh ssh -p 6122 user@node ls
airsh ssh -o ForwardAgent=yes user@nodeairsh ssh поддерживает флаги OpenSSH: -p, -l, -L, -A и другие.
Проброс портов
airsh ssh -L 5000:web.remote:80 nodeФлаг --local выполняет локальную команду через туннель:
airsh ssh -L 5000:example.com:80 --local node curl http://localhost:5000Jump host
airsh ssh -J proxy.example.com telenodeПоддерживается только один jump host; при -J user@proxy используется проброс портов вместо прокси Airlock.
Разрешение имён узлов
- По IP-адресу или DNS.
- По имени узла (
nodenameв конфигурации агента). - По меткам:
airsh ssh os=osx(если узел один).
Копирование файлов
airsh scp example.txt root@node:/path/to/dest
scp -P 61122 -r files root@node:/path/to/destAirlock поддерживает протоколы SCP и SFTP.
Совместное использование сессий
На удалённом сервере выполните:
airlock status
# Session ID : 7645d523-60cb-436d-b732-99c5df14b7c4
# Session URL: https://work:3080/web/sessions/7645d523-...Другой пользователь может присоединиться:
airsh join <session_ID>Для присоединения к сессиям нужны специальные разрешения, настраиваемые администратором.
Доступ к Kubernetes
Список доступных кластеров:
airsh kube ls
# Kube Cluster Name Labels Selected
# ----------------- --------------------------- --------
# mycluster env=devВход в кластер:
airsh kube login mycluster
# Logged into kubernetes cluster "mycluster". Try 'kubectl version' to test the connection.После airsh kube login обновляется kubeconfig. Далее используйте kubectl:
kubectl get podsФлаги airsh kube login:
| Флаг | Описание |
|---|---|
--all | Сгенерировать kubeconfig для всех доступных кластеров |
--as | Kubernetes-пользователь для impersonation |
--as-groups | Kubernetes-группа для impersonation |
--cluster | Имя кластера Airlock (для листовых кластеров) |
-n, --kube-namespace | Namespace по умолчанию |
Доступ к базам данных
Список доступных баз данных:
airsh db ls
# Name Description Allowed Users Labels Connect
# mysql-server1 ... [alice] env=dev airsh db connect mysql-server1Прямое подключение через airsh
Для MySQL/MariaDB нужен клиент mysql:
airsh db connect --db-user=alice --db-name=airlock_example mysql-server1Локальный туннель
Для графических клиентов или других СУБД создайте локальный туннель:
airsh proxy db mysql-db --db-user=alice --tunnel
# Started authenticated tunnel for the MySQL database "mysql-db" on 127.0.0.1:49415.
# Подключение:
mysql --port 49415 --host localhost --protocol TCPС TLS-маршрутизацией:
airsh proxy db --port 10700 mysql-db
# Started DB proxy on 127.0.0.1:10700Записи сессий
airsh recordings ls
airsh play <session-id>Конфигурация airsh
Файлы конфигурации:
/etc/airsh.yaml— глобальная конфигурация (переопределяется черезAIRLOCK_GLOBAL_AIRSH_CONFIG).~/.airsh/config/config.yaml— пользовательская конфигурация.
Пользовательская конфигурация имеет приоритет над глобальной.
Псевдонимы (aliases)
aliases:
"l": "airsh login --auth=local"
"status": "airsh status --format=json"Дополнительные HTTP-заголовки
add_headers:
- proxy: "*.example.com"
headers:
foo: barДоверенные кластеры
airsh --proxy=work clusters
# Cluster Name Status
# staging online
# production offline
airsh --proxy=work ls --cluster=production
airsh --proxy=work ssh --cluster=production db-1