Vault with k8s v2: различия между версиями

Материал из noname.com.ua
Перейти к навигацииПерейти к поиску
Строка 28: Строка 28:
 
===Namespace===
 
===Namespace===
 
* Создать пространство (имен если не создано)
 
* Создать пространство (имен если не создано)
  +
* Имя пространства имен выбрано произвольно
 
* '''kubectl apply -f kilda-namespace.yaml'''
 
* '''kubectl apply -f kilda-namespace.yaml'''
* Содержимое '''kilda-namespace.yaml'''
+
* Содержимое '''kilda-namespace.yaml''':
 
<PRE>
 
<PRE>
 
---
 
---
Строка 37: Строка 38:
 
name: kilda
 
name: kilda
 
</PRE>
 
</PRE>
===Сервисный аккаунт===
 
   
 
===Сервисный аккаунт===
Это аккаунт с которым Vault подключается к API k8s для валидации JWT<BR>
 
Этот аккаунт отличается от того который используется для запуска POD
 
   
 
* Это аккаунт с которым Vault подключается к API k8s для валидации JWT
 
* Этот аккаунт отличается от того который используется для запуска POD
  +
* Создается в правильном пространстве имен (в частном случае может использоваться '''default''')
  +
* Имя аккаунта выбрано произвольно
  +
* '''kubectl apply -f kilda-vault-token-review-service-account.yaml'''
  +
* Содержимое файла '''kilda-vault-token-review-service-account.yaml''':
 
<PRE>
 
<PRE>
 
---
 
---
Строка 47: Строка 52:
 
kind: ServiceAccount
 
kind: ServiceAccount
 
metadata:
 
metadata:
name: vault-token-review-service-account
+
name: kilda-vault-token-review-service-account
 
namespace: kilda
 
namespace: kilda
 
</PRE>
 
</PRE>

Версия 12:18, 9 февраля 2022

Авторизация K8S POD в Vault

Постановка задачи

  • Получать "секреты" из Vault при этом не передавая в POD пароли, токены или другую секретную информацию

Предварительны условия

  • Установлен и настроен Vault

(базовая настройка - https://noname.com.ua/mediawiki/index.php/Vault_Basic_Setup)

  • кластер Kubernetes установлен и настроен
  • kubectl настроен для работы с кластером

Принципы работы

  1. Создается один или несколько Service Account
  2. POD запускается в определенном Service Account
  3. POD может воспользоваться токеном этого Service Account
  4. В качестве входных данных POD получает НЕ СЕКРЕТНУЮ информацию
    1. Адрес Vault в переменной окружения VAULT_ADDR
    2. Имя роли в переменной окружения VAULT_K8S_ROLE
  5. POD авторизуется в VAULT под ролью переданной в переменной VAULT_K8S_ROLE используя для этого JWT принадлежащий Service Account
  6. Vault настроен на проверку прав токена PODs в API K8S (Сам процесс VAULT использует ДРУГОЙ сервисный аккаунт, отличный от того под которым запускается POD для проверки токена PODa)
  7. После успешной авторизации POD может читать "секреты" из VAULT согласно политик которые привязаны к роле (политики и роли тут - это объекты в Vault)


Настройка Vault

Настройка со стороны k8s

Namespace

  • Создать пространство (имен если не создано)
  • Имя пространства имен выбрано произвольно
  • kubectl apply -f kilda-namespace.yaml
  • Содержимое kilda-namespace.yaml:
---
apiVersion: v1
kind: Namespace
metadata:
  name: kilda

Сервисный аккаунт

  • Это аккаунт с которым Vault подключается к API k8s для валидации JWT
  • Этот аккаунт отличается от того который используется для запуска POD
  • Создается в правильном пространстве имен (в частном случае может использоваться default)
  • Имя аккаунта выбрано произвольно
  • kubectl apply -f kilda-vault-token-review-service-account.yaml
  • Содержимое файла kilda-vault-token-review-service-account.yaml:
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: kilda-vault-token-review-service-account
  namespace: kilda