Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

416
Views
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 answers
Answer question

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 Report

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 Report

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 Report

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 Report

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 Report

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 Report

0

en ubuntu 18+

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

0

Kubernetes 1.11+

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

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 Report

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 Report

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 Report

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!