Я створив секрет, використовуючи kubectl create secret generic production-tls --from-file=./tls.key --from-file=./tls.crt
.
Якщо я хочу оновити значення - як я можу це зробити?
Я створив секрет, використовуючи kubectl create secret generic production-tls --from-file=./tls.key --from-file=./tls.crt
.
Якщо я хочу оновити значення - як я можу це зробити?
Відповіді:
Це має працювати:
kubectl create secret generic production-tls \
--from-file=./tls.key --from-file=./tls.crt --dry-run -o yaml |
kubectl apply -f -
--save-config
в kubectl create secret
для того , щоб уникнути попередження CLI.
kubectl create secret tls my-domain-tls --namespace=default --key=./tls.key --cert=./tls.crt --dry-run -o yaml | kubectl apply -f -
сертифікати були в простому тексті.
Ви можете видалити та негайно відтворити секрет:
kubectl delete secret production-tls
kubectl create secret generic production-tls --from-file=./tls.key --from-file=./tls.crt
Я вкладаю ці команди в сценарій, і під час першого дзвінка ви отримуєте попередження про (ще не) існуючий секрет, але це працює.
apply
має набагато більше сенсу, дякую!
--namespace=kube-system
Крім того, ви також можете використовувати jq
' =
або ' |=
оператор для оновлення секретів на льоту.
TLS_KEY=$(base64 < "./tls.key" | tr -d '\n')
TLS_CRT=$(base64 < "./tls.crt" | tr -d '\n')
kubectl get secrets production-tls -o json \
| jq '.data["tls.key"] |= "$TLS_KEY"' \
| jq '.data["tls.crt"] |= "$TLS_CRT"' \
| kubectl apply -f -
Хоча це може бути не настільки елегантно чи просто, як kubectl create secret generic --dry-run
підхід, технічно цей підхід справді оновлює значення, а не видаляє / відтворює їх. Вам також знадобляться jq
та base64
(або openssl enc -base64
) доступні команди tr
- це загальнодоступна утиліта Linux для обрізки кінцевих нових рядків.
Детальніше про оператор оновлення див. Тут .jq
|=
Оскільки я не зміг відповісти на відповідь Деві вище, що мені подобається, оскільки це збереже право власності, де видалення та відтворення може втратити зайву інформацію в записі. Я додаю це для нових людей, які можуть не відразу зрозуміти, коли їх змінні не інтерполюються.
TLS_KEY=$(base64 < "./tls.key" | tr -d '\n')
TLS_CRT=$(base64 < "./tls.crt" | tr -d '\n')
kubectl get secrets production-tls -o json \
| jq ".data[\"tls.key\"] |= \"$TLS_KEY\"" \
| jq ".data[\"tls.crt\"] |= \"$TLS_CRT\"" \
| kubectl apply -f -
Це призвело до того, що я намагаюся використати метод "патча" кубектл, який також, здається, працює.
kubectl \
patch \
secret \
production-tls \
-p "{\"data\":{\"tls.key\":\"${TLS_KEY}\",\"tls.crt\":\"${TLS_CRT}\"}}"
Дякую Деві за відповідь, яка найкраще відповідала моїм потребам.
Для більш конкретних випадків вам може знадобитися вказати у вашому просторі імен, що cert потрібно оновити та видалити старий.
**For deletion of the cert **
kubectl delete secret -n `namespace`
**For creation of new cert to specific namespace **
kubectl create secret {your-cert-name} --key /etc/certs/{name}.com.key --cert /etc/certs/{name}.com.crt -n {namespace} ```
Я використав цей, і він спрацював як шарм:
kubectl create secret docker-registry regcred --docker-server=<your-registry-server> --docker-username=<your-name> --docker-password=<your-pword> --docker-email=<your-email>
docker-server = https://index.docker.io/v1/ (для DockerHub)