Kubernetes имеет встроенный объект «secrets», который позволяет вам хранить конфиденциальную информацию вашего приложения.
Эта сущность позволяет вам отделить учетные данные вашей базы данных, например, от спецификации вашего пода.
Секреты Kubernetes хранятся в базе данных etcd кластера.
Хотя это обеспечивает доступ ко всему кластеру, база данных не зашифрована.
В этом занятии мы рассмотрим создание новых секретов для вашего приложения, а затем узнаем, как ваши поды могут получить эти секреты.
Затем мы посмотрим на повышение безопасности ваших секретов, гарантируя, что они зашифрованы!
Настройте провайдер шифрования
Сгенерируйте 32-байтовый случайный ключ, а base64 закодирует его.
head -c 32 /dev/urandom | base64
Ваш вывод будет выглядеть примерно так, как показано в следующем примере.
Запомните вывод, так как мы будем использовать его в конфигурационном файле.
WxaW1k22mu3M/WYMIWYVOkAOrOTJ17+Q5+McAIqK3bM=
Создайте новый файл с именем /etc/kubernetes/pki/secrets.yml
Добавьте следующее к его содержанию.
kind: EncryptionConfiguration apiVersion: apiserver.config.k8s.io/v1 resources: - resources: - secrets providers: - aescbc: keys: - name: key1 secret: MnBTeg6QwRCS2/ZGynIAKtU48n+zgQHLldDIZibIuW0= - identity: {}
Добавить конфигурацию провайдера шифрования к контроллеру API Kubernetes
Откройте файл конфигурации для сервера API Kubernetes.
vi /etc/kubernetes/manifests/kube-apiserver.yaml
Найдите следующий раздел
spec: containers: - command: - kube-apiserver - --authorization-mode=Node,RBAC [...]
И добавьте, добавьте следующую строку где-нибудь под – kube-apiserver.
- --encryption-provider-config=/etc/kubernetes/pki/secrets.yaml
Изменения, сохраненные в манифесте, будут автоматически загружены контроллером API.
Нет необходимости перезапускать сервисы.
Ротация ключей
Общее правило – регулярно менять ключи, чтобы обеспечить защиту своих секретов.
Мы делаем это, добавляя второй, недавно сгенерированный ключ в наш файл конфигурации провайдера шифрования, завершая процесс удалением исходного ключа.
head -c 32 /dev/urandom | base64
Откройте файл поставщика шифрования.
sudo vi /etc/kubernetes/pki/sercrets.yaml
Добавьте второй ключ к вашему провайдеру.
kind: EncryptionConfiguration apiVersion: apiserver.config.k8s.io/v1 resources: - resources: - secrets providers: - aescbc: keys: - name: key1 secret: MnBTeg6QwRCS2/ZGynIAKtU48n+zgQHLldDIZibIuW0= - name: key2 secret: MRP2QNqGum6UowzL/aqmOG+luwn+/kQdxVuJxDjvlJI= - identity: {}
Сохраните изменения и перезапустите контроллер API.
kind: EncryptionConfiguration apiVersion: apiserver.config.k8s.io/v1 resources: - resources: - secrets providers: - aescbc: keys: - name: key1 secret: MRP2QNqGum6UowzL/aqmOG+luwn+/kQdxVuJxDjvlJI= - identity: {}