Секрет не декодируется должным образом с использованием секретов Kubernetes

Я использую Kubernetes для развертывания панели инструментов Grafana, и я пытаюсь использовать Kubernetes Secrets для сохранения пароля администратора grafana .. Вот мой файл yaml для секрета

    apiVersion: v1
    kind: Secret
    metadata:
      name: $APP_INSTANCE_NAME-grafana
      labels:
        app.kubernetes.io/name: $APP_INSTANCE_NAME
        app.kubernetes.io/component: grafana
    type: Opaque
    data:
      # By default, admin-user is set to `admin`
      admin-user: YWRtaW4=
      admin-password: "$GRAFANA_GENERATED_PASSWORD"

значение для GRAFANA_GENERATED_PASSWORD закодировано в base64 и экспортируется как

export GRAFANA_GENERATED_PASSWORD="$(echo -n $PASSWORD | base64)"

где ПАРОЛЬ - это переменная, которую я экспортировал на свой компьютер, например export PASSWORD=qwerty123

Я пытаюсь передать значение GRAFANA_GENERATED_PASSWORD в файл yaml для секрета, например

envsubst '$GRAFANA_GENERATED_PASSWORD'  > "grafana_secret.yaml"

Файл yaml после передачи значения в кодировке base64 выглядит так:

apiVersion: v1
kind: Secret
metadata:
  name: kafka-monitor-grafana
  labels:
    app.kubernetes.io/name: kafka-monitor
    app.kubernetes.io/component: grafana
type: Opaque
data:
  # By default, admin-user is set to `admin`
  admin-user: YWRtaW4=
  admin-password: "cXdlcnR5MTIz"

После развертывания всех моих объектов я не смог войти в свою панель управления, используя пароль qwerty123, который закодирован правильно ..

Но когда я пытаюсь закодировать свой пароль, например, export GRAFANA_GENERATED_PASSWORD="$(echo -n 'qwerty123' | base64) "

Он работает правильно, и я могу войти в свою панель управления, используя пароль qwerty123 .. Похоже, проблема возникает, когда я кодирую свой пароль с помощью переменной ... Но я закодировал свой пароль с помощью переменной


person Pratheesh    schedule 03.05.2020    source источник
comment
Результат строки base64 для обоих методов одинаков?   -  person Mr.KoopaKiller    schedule 04.05.2020
comment
@KoopaKiller да, и я попытался расшифровать результат base64 обоими методами ... его декодирование до моего исходного пароля ...   -  person Pratheesh    schedule 04.05.2020
comment
Я протестировал ваши команды здесь, и оба способа сгенерировать пароль работают нормально ... единственная проблема, которую я обнаружил, - это команда envsubst, она просто работает, если я передаю исходный файл в командной строке, например: envsubst '$GRAFANA_GENERATED_PASSWORD' <original_code.yaml > "modified_code.yaml" в способ, который вы опубликовали в своем примере, не сработал для меня. Вы используете автоматизацию для этого? Попробуйте проверить, правильно ли генерируется файл   -  person Mr.KoopaKiller    schedule 04.05.2020
comment
@KoopaKiller, извините, я объединяю какой-то файл в один главный файл, например ..awk 'FNR == 1 {print ---} {print}' manifest / * | envsubst '$ APP_INSTANCE_NAME $ NAMESPACE $ GRAFANA_GENERATED_PASSWORD' ›$ {APP_INSTANCE_NAME} _manifest.yaml.   -  person Pratheesh    schedule 04.05.2020
comment
Просто для пояснения: такое поведение возникает при попытке изменить пароль и повторно применить секрет или для нового развертывания? Я предполагаю, что вы подписаны на это руководство по настройке вашей среды. Я тестировал оба способа, и оно у меня работает.   -  person Mr.KoopaKiller    schedule 05.05.2020
comment
Кроме того, вы можете передать тот же код base64 в admin-user в вашем yaml и проверить журнал подов графаны, есть специальная строка, в которой упоминается имя пользователя-администратора, который будет создан. Возможно, некоторые нежелательные символы скрыты в строке кодирования (\ n).   -  person Mr.KoopaKiller    schedule 06.05.2020
comment
Привет, @KoopaKiller, я использую тот же документ, который вы упомянули. Я сталкиваюсь с этой проблемой, когда пытаюсь изменить пароль и повторно применить секрет или для нового развертывания ..   -  person Pratheesh    schedule 06.05.2020
comment
Привет, @KoopaKiller, я обнаружил проблему .. ПВХ для графаны был сохранен даже после удаления стручков. Мы можем решить эту проблему, принудительно удалив пвх после удаления всех стручков и повторно применив новый секрет   -  person Pratheesh    schedule 07.05.2020
comment
Меня интересовал ПВХ, и я получил такой же результат, как и вы. Но после удаления PVC и volmeMounts из сгенерированного шаблона, к моему удивлению, я не смог войти в панель управления Grafana, используя старый и старый пароль. Даже после воссоздания модуля grafana и подтверждения того, что модуль получил правильные секреты, мне все равно не удалось войти в панель управления Grafana. Чтобы это сработало, мне нужно было удалить весь стек и воссоздать все заново, и я не могу понять, почему, поскольку база данных больше не находится в томе. Но это другой вопрос. Рад, что теперь ты решаешь. Как насчет публикации ответа, чтобы помочь другим?   -  person Mr.KoopaKiller    schedule 07.05.2020
comment
Привет @KoopaKiller, я думаю, что если вы удалите pv и и pvc, вам нужно воссоздать стек или воссоздать pv и pvc для панели управления Grafana. Я не уверен, что это правильный подход   -  person Pratheesh    schedule 08.05.2020
comment
Привет, Пратиш, вот в чем дело ... Я не использую PV, PVC и другие тома в развертывании ... Я не знаю почему, но после изменения и обновления секрета я не могу войти в систему панель управления grafana даже со старым паролем. Но это другой вопрос, не связанный с вашим вопросом =)   -  person Mr.KoopaKiller    schedule 08.05.2020


Ответы (1)


Как упоминалось в комментарии @Pratheesh, после первого развертывания графаны постоянный том не был удален / воссоздан, а файл grafana.db, содержащий пароль панели управления Grafana, по-прежнему сохраняет старый пароль.

Чтобы решить эту проблему, необходимо удалить PersistentVolume (pv) перед применением секрета с новым паролем.

person Community    schedule 08.05.2020