Ответ
Secrets в Kubernetes используются для хранения конфиденциальных данных, таких как пароли, токены API или TLS-сертификаты. В production я никогда не храню их в виде plain-text в манифестах, закоммиченных в Git.
Безопасное создание и использование:
-
Создание Secret из файла или переменных окружения (предпочтительный способ):
# Пароль хранится в локальном файле, который добавлен в .gitignore echo -n 'mySuperSecretPassword123' > ./db_password.txt kubectl create secret generic app-db-credentials --from-file=password=./db_password.txt --from-literal=username=prod-user --namespace my-app -
Подключение Secret к Pod'у в качестве переменных окружения:
apiVersion: v1 kind: Pod metadata: name: my-app-pod spec: containers: - name: app image: my-app:latest env: - name: DB_USERNAME # Имя переменной в контейнере valueFrom: secretKeyRef: name: app-db-credentials # Имя Secret key: username # Ключ в Secret - name: DB_PASSWORD valueFrom: secretKeyRef: name: app-db-credentials key: password -
Монтирование Secret как файла (например, для TLS-сертификата):
spec: volumes: - name: tls-certs secret: secretName: nginx-tls-secret containers: - name: nginx image: nginx volumeMounts: - name: tls-certs mountPath: /etc/nginx/ssl readOnly: true
Критически важные практики для production:
- Шифрование в etcd: Обязательно настраиваю
EncryptionConfigurationдля Kubernetes, чтобы данные Secrets шифровались на уровне хранилища (etcd). Без этого они хранятся в base64, что легко обратимо. - Внешние системы (Secrets as a Service): Для высоких требований безопасности использую интеграцию с внешними хранилищами: HashiCorp Vault (через CSI Driver или Vault Agent Sidecar), AWS Secrets Manager (через External Secrets Operator) или Azure Key Vault.
- RBAC: Строго ограничиваю доступ к Secrets с помощью RoleBindings и ServiceAccounts. Приложения получают доступ только к своим Secrets.
- Ротация: Регулярно ротирую секреты (например, токены доступа) и обновляю их в Kubernetes, часто с помощью операторов, которые автоматически синхронизируют их из внешних систем.