Airlock обеспечивает единый защищённый доступ к Kubernetes-кластерам. В этом руководстве показано развёртывание Auth Service и Proxy Service в Kubernetes с помощью Helm.
Если Auth Service и Proxy Service уже работают на другой платформе, используйте существующий кластер Airlock и подключите Kubernetes по руководству по агенту Kubernetes.
Предварительные требования
- Зарегистрированное доменное имя (для TLS через Let’s Encrypt и проверки Proxy Service клиентами).
- Kubernetes-кластер с поддержкой балансировщика нагрузки и постоянных томов.
- Persistent Volume для хранения состояния Auth Service:
kubectl get pvЕсли томов нет, включите динамическое выделение томов или создайте PV вручную. Проверьте наличие StorageClass по умолчанию:
kubectl get storageclasses- Клиент
airshустановлен на рабочей станции. - Kubernetes >= 1.28, Helm >= 3.14:
helm version
kubectl versionШаг 1 из 2. Установка Airlock
Добавление Helm-репозитория
helm repo add airlock https://charts.airlock.deckhouse.ru
helm repo updateСоздание пространства имён
kubectl create namespace airlock-cluster
kubectl label namespace airlock-cluster 'pod-security.kubernetes.io/enforce=baseline'
kubectl config set-context --current --namespace=airlock-clusterФайл значений Helm
Задайте clusterName (например, airlock.example.com) и acmeEmail для Let’s Encrypt:
cat << EOF > airlock-cluster-values.yaml
clusterName: airlock.example.com
proxyListenerMode: multiplex
acme: true
acmeEmail: admin@example.com
EOFУстановка chart airlock-cluster
helm install airlock-cluster airlock/airlock-cluster \
--create-namespace \
--values airlock-cluster-values.yamlДождитесь запуска подов Auth Service и Proxy Service:
kubectl get podsОжидаемый вывод:
NAME READY STATUS RESTARTS AGE
airlock-cluster-auth-000000000-00000 1/1 Running 0 114s
airlock-cluster-proxy-0000000000-00000 1/1 Running 0 114sНастройка DNS
Получите адрес внешнего балансировщика:
kubectl get services/airlock-clusterСоздайте DNS-записи для airlock.example.com и *.airlock.example.com:
| Тип записи | Домен | Значение |
|---|---|---|
| A или CNAME | airlock.example.com | IP или домен балансировщика |
| A или CNAME | *.airlock.example.com | IP или домен балансировщика |
Проверьте доступность кластера:
curl https://airlock.example.com/webapi/pingШаг 2 из 2. Создание локального пользователя
Локальные пользователи — надёжный резерв, когда SSO недоступен. Создайте роль member с доступом к группе Kubernetes system:masters:
kind: role
version: v7
metadata:
name: member
spec:
allow:
kubernetes_labels:
'*': '*'
kubernetes_groups:
- system:masterskubectl exec -i deployment/airlock-cluster-auth -- airctl create -f - < member.yamlСоздайте пользователя и получите ссылку-приглашение:
kubectl exec -ti deployment/airlock-cluster-auth -- airctl users add myuser --roles=member,access,editorПерейдите по ссылке из вывода команды и активируйте учётную запись.
Войдите через airsh:
airsh login --proxy=airlock.example.com:443 --user=myuser
airsh kube lsДля безопасной работы с kubeconfig используйте отдельный файл:
KUBECONFIG=$HOME/airlock-kubeconfig.yaml airsh kube login airlock.example.com
KUBECONFIG=$HOME/airlock-kubeconfig.yaml kubectl get -n airlock-cluster podsУстранение неполадок
Если подключение не работает, проверьте статус подов:
kubectl get pods -n airlock-clusterПод Auth Service может оставаться в состоянии Pending, если не удаётся выделить PersistentVolume Claim. Используйте kubectl describe pod и kubectl logs для диагностики:
kubectl get events --sort-by='.metadata.creationTimestamp' -AСледующие шаги
- Настройте единый вход (SSO) для production-развёртываний.
- Подключите дополнительные Kubernetes-кластеры через агент Kubernetes.
- Ограничьте права доступа к Kubernetes с помощью RBAC Airlock вместо
system:masters.