Получить секреты Kubernetes, установленные как тома - PullRequest
1 голос
/ 07 марта 2019

Привет, я играюсь с секретами Кубернетеса.Мой файл развертывания:

---
apiVersion: v1
kind: Secret
metadata:
  name: my-secrets
  labels:
    app: my-app
data:
  username: dXNlcm5hbWU=
  password: cGFzc3dvcmQ=

Я могу создавать секреты и монтирую их в своих развертываниях, как показано ниже:

---
apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  selector:
    app: my-service
  ports:
  - protocol: TCP
    port: 80
    targetPort: 8080
  type: NodePort

---

apiVersion: apps/v1
kind: Deployment
metadata:
  name: spring-service
  labels:
    app: spring-service
spec:
  replicas: 1
  selector:
    matchLabels:
      app: spring-service
  template:
    metadata:
      labels:
        app: spring-service
    spec:
      containers:
      - name: spring-service
        image: my-image:tag
        imagePullPolicy: Always
        ports:
        - containerPort: 8080
        volumeMounts:
        - name: my-secret-vol
          mountPath: "/app/secrets/my-secret"
          readOnly: true            
      volumes:
      - name: my-secret-vol
        secret:
          secretName: my-secrets

Мой вопрос: как я могу получить доступ к usernameи password Я создал секретно в приложении весенней загрузки?

Я попытался загрузить с ${my-secrets.username} и ${username}, но он не может найти значения.

Я также пыталсядобавление секретов в качестве переменных среды, как показано ниже в deploy.yml:

env:
- name: username
  valueFrom:
    secretKeyRef:
      name: my-secrets
      key: username
- name: password
  valueFrom:
    secretKeyRef:
      name: my-secrets
      key: password

В этом случае значения загружаются из секретов, и когда я изменяю значения секретов в сводной панели мини-куба, это не отражает изменения.

Пожалуйста, помогите мне понять, как это работает.

Я использую minikube и docker в качестве контейнеров

Ответы [ 2 ]

2 голосов
/ 08 марта 2019

Для первого подхода вы найдете значения:

- /app/secrets/my-secret/username
- /app/secrets/my-secret/password 

, а для второго подхода вы не можете изменить значение env vars во время выполнения, вам необходимо перезапустить или повторно развернуть модуль

1 голос
/ 11 марта 2019

Вы не вводите секрет в properties.yml.Вместо этого вы используете содержимое секрета как properties.yml.Процесс выглядит следующим образом:

  • Создание properties.yml с конфиденциальными данными (например, пароль)
  • Base64 кодирует этот файл (например, base64 properties.yml).
  • Возьмите закодированное в base64 значение и поместите его в секрет под ключом properties.yaml.

В результате вы должны получить секрет в следующем формате:

apiVersion: v1
kind: Secret
metadata:
  name: my-secrets
  labels:
    app: my-app
data:
  properties.yml: dXNlcm5hbWU=

Теперь, когда вы смонтируете этот секрет на своем модуле, Kubernetes расшифрует секрет и поместит значение в соответствующий путь, и вы можете просто смонтировать его.

Шаблон должен иметь 2 файла конфигурации - один с нечувствительными конфигурациями, которые хранятся вместе с кодом, а второй (который включает в себя конфиденциальные конфигурации) как секрет.Я не знаю, возможно ли загрузить несколько конфигурационных файлов с помощью Spring Boot.

И еще один последний комментарий - этот процесс громоздок и подвержен ошибкам.Каждое изменение в файле конфигурации требует расшифровки оригинального секрета и повторения этого ручного процесса.Кроме того, очень трудно понять, что изменилось - все, что вы видите, - весь контент изменился.По этой причине мы строим Kamus .Это позволяет вам шифровать только конфиденциальное значение вместо всего файла.Дайте мне знать, если это может быть актуально для вас:)

...