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 bytespero 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?
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 aGVsbG8KKubernetes decodifica la codificación base64 cuando pasamos la clave secreta como variable de entorno o montada como volumen.
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 -Dy 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 .
Primero, obtenga el secreto del etcd consultando el servidor API usando kubectl.
kubectl get secret db-user-pass -o yamlEsto 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
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.
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 | ksdo usando https://github.com/elsesiy/kubectl-view-secret
kubectl view-secret secrets/db-user-passSi 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 secretoen ubuntu 18+
kubectl get secrets/db-user-pass --template={{.data.password}} | base64 -dKubernetes 1.11+
kubectl get secrets/db-user-pass --template='{{.data.password | base64decode }}'Si sus claves secretas contienen un guión ( - ) o un punto ( . ):
kubectl get secret db-user-pass -o=go-template='{{index .data "password"}}' | base64 -dExtendiendo 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: ...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; echoEste 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_NAMEEsto 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 }}'