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 или CNAMEairlock.example.comIP или домен балансировщика
A или CNAME*.airlock.example.comIP или домен балансировщика

Проверьте доступность кластера:

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:masters
kubectl 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.