Eu criei um segredo usando kubectl create secret generic production-tls --from-file=./tls.key --from-file=./tls.crt
.
Se eu gostaria de atualizar os valores - como posso fazer isso?
Eu criei um segredo usando kubectl create secret generic production-tls --from-file=./tls.key --from-file=./tls.crt
.
Se eu gostaria de atualizar os valores - como posso fazer isso?
Respostas:
Isso deve funcionar:
kubectl create secret generic production-tls \
--from-file=./tls.key --from-file=./tls.crt --dry-run -o yaml |
kubectl apply -f -
--save-config
ao kubectl create secret
para evitar um aviso de CLI.
kubectl create secret tls my-domain-tls --namespace=default --key=./tls.key --cert=./tls.crt --dry-run -o yaml | kubectl apply -f -
os certificados estavam em texto simples.
Você pode excluir e recriar imediatamente o segredo:
kubectl delete secret production-tls
kubectl create secret generic production-tls --from-file=./tls.key --from-file=./tls.crt
Coloquei esses comandos em um script, na primeira chamada você recebe um aviso sobre o segredo (ainda não) existente, mas funciona.
apply
faz muito mais sentido, obrigado!
--namespace=kube-system
Como alternativa, você também pode usar jq
o operador 's =
ou |=
para atualizar os segredos rapidamente.
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 -
Embora possa não ser tão elegante ou simples quanto a kubectl create secret generic --dry-run
abordagem, tecnicamente, esta abordagem está realmente atualizando os valores em vez de excluí-los / recriá-los. Você também precisará dos comandos jq
and base64
(ou openssl enc -base64
) disponíveis, tr
é um utilitário Linux comumente disponível para aparar novas linhas finais.
Veja aqui mais detalhes sobre a jq
atualização do operador |=
.
Como não fui capaz de responder à resposta de Devy acima, eu gosto porque preservará a Propriedade, onde excluir e recriar tem o potencial de perder qualquer informação extra no registro. Estou adicionando isso para as pessoas mais novas que podem não entender imediatamente o soro de que suas variáveis não estão sendo interpoladas.
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 -
Isso me levou a tentar usar o método 'patch' de kubectl, que também parece funcionar.
kubectl \
patch \
secret \
production-tls \
-p "{\"data\":{\"tls.key\":\"${TLS_KEY}\",\"tls.crt\":\"${TLS_CRT}\"}}"
Obrigado Devy pela resposta que melhor atendeu às minhas necessidades.
Para casos mais específicos, você pode precisar especificar seu namespace de que o certificado precisa ser renovado e excluir o antigo.
**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} ```
Eu usei este e funcionou como um encanto:
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/ (para DockerHub)
Para mais detalhes: https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/#create-a-secret-by-providing-credentials-on-the-command-line