[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-kubernetes-chto-takoe-configmap-i-secret":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":15,"progress":16,"seo":17},1317,"chto-takoe-configmap-i-secret",26,"kubernetes","Kubernetes","☸️","Что такое ConfigMap и Secret?","ConfigMap и Secret — объекты Kubernetes для хранения конфигурационных данных отдельно от образа контейнера. ConfigMap — для обычных настроек, Secret — для конфиденциальных данных.\n\n### ConfigMap\n\nConfigMap хранит конфигурационные данные в виде пар «ключ-значение».\n\n```yaml\napiVersion: v1\nkind: ConfigMap\nmetadata:\n  name: app-config\ndata:\n  APPLICATION_PORT: \"8080\"\n  DATABASE_HOST: \"postgres-service\"\n  DATABASE_PORT: \"5432\"\n  LOG_LEVEL: \"INFO\"\n  application.yml: |\n    spring:\n      datasource:\n        url: jdbc:postgresql:\u002F\u002Fpostgres-service:5432\u002Fmydb\n      jpa:\n        hibernate:\n          ddl-auto: validate\n```\n\n### Secret\n\nSecret — аналог ConfigMap, но предназначен для хранения конфиденциальных данных (пароли, токены, ключи). Значения хранятся в формате base64.\n\n```yaml\napiVersion: v1\nkind: Secret\nmetadata:\n  name: app-secret\ntype: Opaque\ndata:\n  DATABASE_USERNAME: cG9zdGdyZXM=        # postgres (base64)\n  DATABASE_PASSWORD: c2VjcmV0MTIz        # secret123 (base64)\n  JWT_SECRET: bXktand0LXNlY3JldA==       # my-jwt-secret (base64)\n```\n\nСоздание Secret через kubectl:\n```bash\nkubectl create secret generic app-secret \\\n  --from-literal=DATABASE_USERNAME=postgres \\\n  --from-literal=DATABASE_PASSWORD=secret123\n```\n\n### Способы передачи в контейнер\n\n| Способ | Описание | Когда использовать |\n|---|---|---|\n| Переменные окружения (env \u002F envFrom) | Каждый ключ становится env-переменной | Простые значения, пароли |\n| Монтирование как Volume | Ключи становятся файлами в указанной директории | Конфигурационные файлы (application.yml) |\n\n\u003Cdetails>\n\u003Csummary>Примеры передачи в контейнер\u003C\u002Fsummary>\n\nЧерез переменные окружения:\n```yaml\nspec:\n  containers:\n    - name: app\n      image: my-registry\u002Fmy-java-app:1.0.0\n      env:\n        - name: DB_HOST\n          valueFrom:\n            configMapKeyRef:\n              name: app-config\n              key: DATABASE_HOST\n        - name: DB_PASSWORD\n          valueFrom:\n            secretKeyRef:\n              name: app-secret\n              key: DATABASE_PASSWORD\n      envFrom:\n        - configMapRef:\n            name: app-config\n        - secretRef:\n            name: app-secret\n```\n\nЧерез монтирование как Volume:\n```yaml\nspec:\n  containers:\n    - name: app\n      image: my-registry\u002Fmy-java-app:1.0.0\n      volumeMounts:\n        - name: config-volume\n          mountPath: \u002Fapp\u002Fconfig\n          readOnly: true\n  volumes:\n    - name: config-volume\n      configMap:\n        name: app-config\n```\n\n\u003C\u002Fdetails>\n\nSecret в Kubernetes по умолчанию хранятся только в base64, а не зашифрованы. Для настоящего шифрования нужно включить encryption at rest или использовать внешние решения (HashiCorp Vault, Sealed Secrets).\n\n> **На собеседовании:** ключевое — объяснить разницу ConfigMap vs Secret и два способа передачи (env и volume). Частая ошибка — думать, что Secret зашифрован. Base64 — это кодирование, а не шифрование.","","junior",[7],[],null,{"title":18,"description":19,"ogTitle":18,"ogDescription":20,"keywords":21,"schemaAnswer":22,"featuredSnippetReady":23},"Что такое ConfigMap и Secret? — Gymterview","ConfigMap и Secret — объекты Kubernetes для хранения конфигурационных данных отдельно от образа контейнера. ConfigMap — для обычных настроек, Secret — для конфи","ConfigMap и Secret — объекты Kubernetes для хранения конфигурационных данных отдельно от образа контейнера. ConfigMap — ",[7,13],"ConfigMap и Secret — объекты Kubernetes для хранения конфигурационных данных отдельно от образа контейнера. ConfigMap — для обычных настроек, Secret — для конфиденциальных данных.",true]