Ответ 1
Самый прямой (и интерактивный) способ должен состоять в выполнении kubectl edit secret <my secret>
. Запустите kubectl get secrets
, если вы хотите увидеть список секретов, которыми управляет Kubernetes.
Как я могу изменить значения в Kubernetes secret
, используя kubectl
?
Я создал секрет с помощью kubernetes create secret generic
, но, похоже, нет способа изменить секрет. Например, чтобы добавить новое секретное значение или изменить в нем секретное значение.
Я предполагаю, что могу перейти на "низкий уровень", написать файл yaml и выполнить kubectl edit
, но я надеюсь, что есть более простой способ.
(Я использую kubernetes 1.2.x
)
Самый прямой (и интерактивный) способ должен состоять в выполнении kubectl edit secret <my secret>
. Запустите kubectl get secrets
, если вы хотите увидеть список секретов, которыми управляет Kubernetes.
Оказавшись в необходимости изменить секрет, я приземлился здесь.
Вот наиболее удобный способ, который я нашел для редактирования (однострочного) секрета.
Это развивает 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
Если вы предпочитаете неинтерактивное обновление, это один из способов сделать это:
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.