Как обезопасить etcd в Kubernetes

«Как обезопасить etcd в Kubernetes» — вопрос из категории Kubernetes, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Etcd хранит состояние всего кластера Kubernetes, поэтому его безопасность критически важна. В production-среде я настраиваю многоуровневую защиту:

1. Шифрование трафика (TLS): Все коммуникации с etcd должны использовать TLS. В конфигурации etcd (часто в /etc/kubernetes/manifests/etcd.yaml) указываю:

   - --client-cert-auth=true
   - --cert-file=/etc/kubernetes/pki/etcd/server.crt
   - --key-file=/etc/kubernetes/pki/etcd/server.key
   - --trusted-ca-file=/etc/kubernetes/pki/etcd/ca.crt
   - --peer-client-cert-auth=true
   - --peer-cert-file=/etc/kubernetes/pki/etcd/peer.crt
   - --peer-key-file=/etc/kubernetes/pki/etcd/peer.key
   - --peer-trusted-ca-file=/etc/kubernetes/pki/etcd/ca.crt

2. Сетевая изоляция:

  • Размещаю etcd-поды/ноды в отдельной, изолированной подсети.
  • Настраиваю сетевые политики (Network Policies) или security groups в облаке, чтобы разрешать входящий трафик только с control-plane нод Kubernetes на порты 2379 (клиентский) и 2380 (пиринговый).

3. Регулярное резервное копирование: Автоматизирую создание снапшотов с помощью etcdctl и храню их в защищенном объектном хранилище (например, S3 с шифрованием).

   ETCDCTL_API=3 etcdctl --endpoints=https://127.0.0.1:2379 
   --cacert=/etc/kubernetes/pki/etcd/ca.crt 
   --cert=/etc/kubernetes/pki/etcd/server.crt 
   --key=/etc/kubernetes/pki/etcd/server.key 
   snapshot save /backup/etcd-snapshot-$(date +%Y%m%d).db

4. RBAC и аутентификация: Использую встроенную в etcd RBAC-систему для тонкого управления доступом, если к кластеру etcd имеют доступ приложения помимо Kubernetes API-сервера.

5. Мониторинг и аудит: Настраиваю сбор метрик etcd (например, через Prometheus) и алерты на высокую задержку запросов, рост размера базы или частые перевыборы лидера. Включаю аудит логов (--log-level=debug для отладки).

6. Выделенные ресурсы и обновления: Запускаю etcd на выделенных нодах с гарантированными ресурсами (CPU, RAM, низколатентный SSD). Регулярно планирую обновления etcd в рамках жизненного цикла кластера, следуя официальной документации Kubernetes.