Kubernetes: изменить секрет, используя kubectl?

Как я могу изменить значения в Kubernetes secret, используя kubectl?

Я создал секрет с помощью kubernetes create secret generic, но, похоже, нет способа изменить секрет. Например, чтобы добавить новое секретное значение или изменить в нем секретное значение.

Я предполагаю, что могу перейти на "низкий уровень", написать файл yaml и выполнить kubectl edit, но я надеюсь, что есть более простой способ.

(Я использую kubernetes 1.2.x)

Ответ 1

Самый прямой (и интерактивный) способ должен состоять в выполнении kubectl edit secret <my secret>. Запустите kubectl get secrets, если вы хотите увидеть список секретов, которыми управляет Kubernetes.

Ответ 2

Оказавшись в необходимости изменить секрет, я приземлился здесь.

Вот наиболее удобный способ, который я нашел для редактирования (однострочного) секрета.

Это развивает kubectl edit secret <my secret> Тимо Рейманна выше.

kubectl edit secret <my secret> будет (в моем случае) вызывать vi.

Теперь я перемещаю курсор в пробел после двоеточия секрета, который я хочу редактировать.

Затем я нажимаю r и [enter], которые помещают закодированное в base64 значение в собственную строку.

Теперь я ввожу :. ! base64 -D, который будет декодировать текущую строку.

После внесения изменений в значение я ввожу :. ! base64, который будет кодировать измененное значение.

При нажатии k [shift]J воссоединяется секретное имя и его новое значение.

:wq напишет новый секретный файл и выйдет из vi.

PS Если секрет имеет многострочное значение, включите номера строк (:set nu) и, после изменения декодированного значения, используйте A,B ! base64, где A и B - номера строк первой и последней строки значение.

PPS Я только что узнал, как трудно base64 получать текст для кодирования с добавленной новой строкой :( Если это не проблема для ваших значений - отлично. В противном случае мое текущее решение - отфильтровать это с помощью: .!perl -pe chomp | base64

Ответ 3

Если вы предпочитаете неинтерактивное обновление, это один из способов сделать это:

kubectl get secret mysecret -o json | jq '.data["foo"]="YmFy"' | kubectl apply -f -

Обратите внимание, что YmFy является строкой bar в кодировке base64. Если вы хотите передать значение в качестве аргумента, jq позволяет вам сделать это:

kubectl get secret mysecret -o json | jq --arg foo "$(echo bar | base64)" '.data["foo"]=$foo' | kubectl apply -f -

Мне удобнее использовать jq, но yq также должен делать эту работу, если вы предпочитаете формат yaml.