Kubernetes Secret не хранится в закодированном формате в переменных среды

Я новичок в Kubernetes. Я создал секретный файл и сослался на него в yaml-файле развертывания.

app-secret.yaml

apiVersion: v1
kind: Secret
metadata:
  name: app-secret
data:
  username: YWRtaW4=
  password: YWRtaW4=

deploy.yaml

env:
          - name: DEPLOY_ENV
            value: ${env}
          - name: NAMESPACE_NAME
            valueFrom:
                fieldRef:
                  fieldPath : metadata.namespace
          - name: APP_USERNAME
            valueFrom:
                secretKeyRef:
                  name: app-secret
                  key: username
          - name: APP_PASSWORD
            valueFrom:
                secretKeyRef:
                  name: app-secret
                  key: password

При использовании команды kubectl get secret pod-54rfxd -n dev-ns -o json имя пользователя и пароль печатаются только в закодированном формате. Когда я запрашиваю список переменных среды с помощью команды kubectl exec pod-54rfxd -n dev-ns -- printenv, он давал результат ниже.

APP_USERNAME=admin
APP_PASSWORD=admin

Почему это не было в закодированном формате в переменных окружения. Не могли бы вы сообщить мне причину и можно ли получить ее в закодированном формате?


person Varun    schedule 19.04.2021    source источник


Ответы (1)


При создании секрета секреты сохраняются в кодированном формате base64. При добавлении или внедрении секрета в модуль или развертывании Kubernetes по умолчанию декодирует секрет с помощью base64, поэтому вы получаете простой текст из ОС в качестве переменных среды.

есть другой вариант зашифровать в состоянии покоя, а не кодировать.

https://cloud.google.com/kubernetes-engine/docs/how-to/encrypting-secrets

https://docs.oracle.com/en-us/iaas/Content/ContEng/Tasks/contengencryptingdata.htm

возможно ли это в закодированном формате?

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

kubectl exec pod-54rfxd -n dev-ns - printenv

эту команду можете запустить только вы, возможно, когда у вас есть разрешение администратора кластера, иначе никто не сможет получить доступ внутри модуля.

person Harsh Manvar    schedule 19.04.2021
comment
Большое спасибо за ваш ответ. Я прочту приведенные выше варианты, попробую и дам вам знать. - person Varun; 19.04.2021
comment
что вы можете сделать, так это сохранить закодированный файл .env в секрете и смонтировать этот файл в путь развертывания, чтобы файл .env был доступен для приложения, в то время как содержимое внутри него будет закодировано. Не могли бы вы поделиться какими-либо образцами, если у вас есть? - person Varun; 19.04.2021
comment
вы можете проверить этот ответ, он тот же, что я описывал. в env, а для VAR1 и VAR2 вы можете сохранить закодированные значения base64 и добавить их внутри модуля. stackoverflow.com/a/64872936/5525824 немного другое будет там, вам придется хранить файл .env внутри секрета вместо этого создания секрета --from-file. - person Harsh Manvar; 19.04.2021
comment
alibaba-cloud.medium.com/ здесь это пример использования configmap, вы также можете использовать его и сохранить закодированные данные в файл .txt. - person Harsh Manvar; 19.04.2021
comment
Спасибо, Харш Манвар. Постараюсь сообщить вам. - person Varun; 19.04.2021
comment
Harsh Manvar - По ссылке, которой вы поделились, я получил еще одну ссылку - alibabacloud.com/blog/ Это помогло мне разрешить мой сценарий. Наконец, я выбрал стратегию монтирования тома, как указано в этой ссылке. Большое спасибо за ваши объяснения и предложения. - person Varun; 22.04.2021