He creado un secreto usando kubectl create secret generic production-tls --from-file=./tls.key --from-file=./tls.crt
.
Si quisiera actualizar los valores, ¿cómo puedo hacer esto?
He creado un secreto usando kubectl create secret generic production-tls --from-file=./tls.key --from-file=./tls.crt
.
Si quisiera actualizar los valores, ¿cómo puedo hacer esto?
Respuestas:
Esto debería funcionar:
kubectl create secret generic production-tls \
--from-file=./tls.key --from-file=./tls.crt --dry-run -o yaml |
kubectl apply -f -
--save-config
a kubectl create secret
para evitar una advertencia de CLI.
kubectl create secret tls my-domain-tls --namespace=default --key=./tls.key --cert=./tls.crt --dry-run -o yaml | kubectl apply -f -
los certificados estaban en texto sin formato.
Puede eliminar y recrear inmediatamente el secreto:
kubectl delete secret production-tls
kubectl create secret generic production-tls --from-file=./tls.key --from-file=./tls.crt
Pongo estos comandos en una secuencia de comandos, en la primera llamada recibes una advertencia sobre el secreto (aún no) existente, pero esto funciona.
apply
tiene mucho más sentido, ¡gracias!
--namespace=kube-system
Alternativamente, también puede usar jq
's =
or |=
operator para actualizar secretos sobre la marcha.
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 -
Aunque puede que no sea tan elegante o simple como el kubectl create secret generic --dry-run
enfoque, técnicamente, este enfoque realmente actualiza los valores en lugar de eliminarlos / recrearlos. También necesitará los comandos jq
y base64
(o openssl enc -base64
) disponibles,tr
es una utilidad de Linux comúnmente disponible para recortar las nuevas líneas finales.
Consulte aquí para obtener más detalles sobre el jq
operador de actualización |=
.
Como no pude responder a la respuesta de Devy anterior, lo que me gusta porque preservará la Propiedad donde eliminar y recrear tiene el potencial de perder cualquier información adicional en el registro. Estoy agregando esto para las personas más nuevas que quizás no entiendan de inmediato por qué sus variables no están siendo 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 -
Esto me llevó a intentar utilizar el método 'parche' de kubectl, que también parece funcionar.
kubectl \
patch \
secret \
production-tls \
-p "{\"data\":{\"tls.key\":\"${TLS_KEY}\",\"tls.crt\":\"${TLS_CRT}\"}}"
Gracias Devy por la respuesta que mejor cubrió mis necesidades.
Para casos más específicos, es posible que deba especificar su espacio de nombres para que el certificado deba renovarse y eliminar el anterior.
**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} ```
He usado este y funcionó a las mil maravillas:
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 obtener más información: https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/#create-a-secret-by-pro provide - credentials - on - the - command - line