Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

418
Vistas
Descifrando el secreto de Kubernetes

Heredé una configuración de Kubernetes/Docker y accidentalmente bloqueé el módulo al cambiar algo relacionado con la contraseña de la base de datos.

Estoy tratando de solucionar este problema.

No tengo mucha experiencia en Kubernetes o Docker, así que todavía estoy aprendiendo cómo hacer las cosas.

El valor está contenido dentro de la credencial db-user-pass, creo, que es un secreto de tipo opaco.

Lo estoy describiendo:

 kubectl describe secrets/db-user-pass Name: db-user-pass Namespace: default Labels: <none> Annotations: <none> Type: Opaque Data ==== password: 16 bytes username: 13 bytes

pero no tengo ni idea de cómo obtener datos de este secreto. El ejemplo en el sitio de Kubernetes parece asumir que tendré una cadena codificada en base64, pero parece que ni siquiera puedo entender eso. ¿Cómo obtengo el valor de esto?

over 4 years ago · Santiago Trujillo
14 Respuestas
Responde la pregunta

0

Este es el enlace que podrías estar buscando.

Los secretos de Kubernetes necesitan que los secretos se proporcionen en formato codificado en base64, que se puede crear utilizando el binario base64 en el caso de las distribuciones de Linux.

Ejemplo:

 echo "hello" | base64 aGVsbG8K

Kubernetes decodifica la codificación base64 cuando pasamos la clave secreta como variable de entorno o montada como volumen.

over 4 years ago · Santiago Trujillo Denunciar

0

Puede usar kubectl get secrets/db-user-pass -o yaml o -o json donde verá el nombre de username y password codificados en base64. Luego puede copiar el valor y decodificarlo con algo como echo <ENCODED_VALUE> | base64 -D (Mac OS X).

Una línea más compacta para esto:

 kubectl get secrets/db-user-pass --template={{.data.password}} | base64 -D

y lo mismo para el nombre de usuario:

 kubectl get secrets/db-user-pass --template={{.data.username}} | base64 -D

Nota: en GNU/Linux, el indicador base64 es -d , no -D .

over 4 years ago · Santiago Trujillo Denunciar

0

Primero, obtenga el secreto del etcd consultando el servidor API usando kubectl.

 kubectl get secret db-user-pass -o yaml

Esto le dará el secreto codificado en base64 en formato yaml.

Una vez que tenga el archivo yaml, decodifique usando

"base64 --decodificar"

El comando final se verá así: No olvide el indicador -n en el comando echo

echo -n "jdddjdkkdkdmdl" | base64 --decode

over 4 years ago · Santiago Trujillo Denunciar

0

Sugeriría usar este comando útil. Utiliza un poder de go-templates . Itera sobre todos los valores, los decodifica y los imprime junto con la clave. También maneja valores no establecidos.

 kubectl get secret name-of-secret -o go-template=' {{range $k,$v := .data}}{{printf "%s: " $k}}{{if not $v}}{{$v}}{{else}}{{$v | base64decode}}{{end}}{{"\n"}}{{end}}' ## In your case it would output # password: decoded_password # username: doceded_username

Si no le gustan las plantillas go, puede usar diferentes formatos de salida, por ejemplo, yaml o json , pero eso generará secretos codificados por base64.

over 4 years ago · Santiago Trujillo Denunciar

0

Para una decodificación más fácil, puede usar una herramienta como ksd que hará la decodificación base64 por usted

 kubectl get secrets/db-user-pass -o yaml | ksd

o usando https://github.com/elsesiy/kubectl-view-secret

 kubectl view-secret secrets/db-user-pass
over 4 years ago · Santiago Trujillo Denunciar

0

Si tiene jq (consulta json) esto funciona:

 kubectl get secret db-user-pass -o json | jq '.data | map_values(@base64d)'

NOTA:

  • db-user-pass es el nombre del secreto k8s
  • .data es la variable que contiene el valor secreto
over 4 years ago · Santiago Trujillo Denunciar

0

en ubuntu 18+

 kubectl get secrets/db-user-pass --template={{.data.password}} | base64 -d
over 4 years ago · Santiago Trujillo Denunciar

0

Kubernetes 1.11+

 kubectl get secrets/db-user-pass --template='{{.data.password | base64decode }}'
over 4 years ago · Santiago Trujillo Denunciar

0

Si sus claves secretas contienen un guión ( - ) o un punto ( . ):

 kubectl get secret db-user-pass -o=go-template='{{index .data "password"}}' | base64 -d
over 4 years ago · Santiago Trujillo Denunciar

0

Extendiendo la solución de @Břetislav Hájek (muchas gracias por eso). Si necesita obtenerlo mediante una etiqueta, deberá agregar un comando de range adicional para iterar sobre los elementos devueltos.

 $ LABEL_FILTER="app.kubernetes.io/name=mysql-chart" $ kubectl get secret -l "$LABEL_FILTER" -o go-template=' {{range $i := .items}}{{range $k,$v := $i.data}}{{printf "%s: " $k}}{{if not $v}}{{$v}}{{else}}{{$v | base64decode}}{{end}}{{"\n"}}{{end}}{{end}}' mysql_password: ... mysql_root_password: ... mysql_user: ...
over 4 years ago · Santiago Trujillo Denunciar

0

Con bash. Esto está ejecutando ubuntu 18.04 y Kubernetes 1.18.5

 kubectl -n metallb-system get secrets memberlist -o json | grep secretkey | grep -vf:s | awk -F '"' '{print$4}' |base64 --decode; echo
over 4 years ago · Santiago Trujillo Denunciar

0

Este trazador de líneas se usa para obtener un archivo kubeconfig codificado de un secreto y generar un archivo a partir de él para usarlo dinámicamente en un trabajo ci, por ejemplo:

 kubectl get secret YOUR_SECRET -o json | grep -oP '(?<=\"YOUR_SECRET_KEY\": \")[^\"]*' | base64 --decode > ./YOUR_KUBECONFIG_FILE_NAME
over 4 years ago · Santiago Trujillo Denunciar

0

Esta variación de jsonpath me funciona en OSX.

 kubectl get secrets/db-user-pass -o jsonpath="{.data.username}" | base64 -d

Para obtener secreto con punto en el nombre.

 kubectl get secrets/tls -o jsonpath="{.data['tls\.crt']}" | base64 -d
over 4 years ago · Santiago Trujillo Denunciar

0

Esto debería funcionar en todas las plataformas, con kubectl 1.11+

 kubectl get secrets/db-user-pass --template='{{.data.password | base64decode}}'

Y si quieres obtener todas las claves, valores

 kubectl get secrets/db-user-pass --template='{{ range $key, $value := .data }}{{ printf "%s: %s\n" $key ($value | base64decode) }}{{ end }}'
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda