Je veux créer un secret pour mon cluster kubernetes. J'ai donc composé suivant dummy-secret.yaml
fichier:
apiVersion: v1
kind: Secret
metadata:
name: dummy-secret
type: Opaque
data:
API_KEY: bWVnYV9zZWNyZXRfa2V5
API_SECRET: cmVhbGx5X3NlY3JldF92YWx1ZTE=
Quand je lance kubectl create -f dummy-secret.yaml
Je reçois le message suivant:
Error from server (BadRequest): error when creating "dummy-secret.yaml": Secret in version "v1" cannot be handled as a Secret: v1.Secret: Data: decode base64: illegal base64 data at input byte 8, error found in #10 byte of ...|Q89_Hj1Aq","API_SECR|..., bigger context ...|sion":"v1","data":{"API_KEY":"af76fsdK_cQ89_Hj1Aq","API_SECRET":"bsdfmkwegwegwe"},"kind":"Secret","m|...
Je ne sais pas pourquoi cela se produit.
Si j'ai bien compris, je dois encoder toutes les valeurs sous la clé data
dans le fichier yaml. J'ai donc fait l'encodage base64, mais kubernetes ne gère toujours pas le fichier secret yaml comme je m'y attendais.
MISE À JOUR:
J'ai utilisé cette commande pour encoder les valeurs de data
sur mon mac:
echo -n 'mega_secret_key' | openssl base64
J'ai obtenu les valeurs décodées "mega_secret_key" et "really_secret_value1" de vos données encodées. Semble qu'ils ne sont pas codés correctement. Alors, encodez vos données de la bonne manière:
$ echo "mega_secret_key" | base64
bWVnYV9zZWNyZXRfa2V5Cg==
$ echo "really_secret_value1" | base64
cmVhbGx5X3NlY3JldF92YWx1ZTEK
Vérifiez ensuite s'ils sont correctement encodés:
$ echo "bWVnYV9zZWNyZXRfa2V5Cg==" | base64 -d
mega_secret_key
$ echo "cmVhbGx5X3NlY3JldF92YWx1ZTEK" | base64 -d
really_secret_value1
Ils vont donc bien. Maintenant, utilisez-les dans votre dummy-secret.yaml
:
apiVersion: v1
kind: Secret
metadata:
name: dummy-secret
type: Opaque
data:
API_KEY: bWVnYV9zZWNyZXRfa2V5Cg==
API_SECRET: cmVhbGx5X3NlY3JldF92YWx1ZTEK
Et courir $ kubectl create -f dummy-secret.yaml
.
On dirait que votre message d'erreur se produit avec un autre dummy-secret.yaml
.
apiVersion: v1
kind: Secret
metadata:
name: dummy-secret
type: Opaque
data:
API_KEY: af76fsdK_cQ89_Hj1Aq
API_SECRET: bsdfmkwegwegwe
Ensuite:
$ kubectl create -f s.yaml
Error from server (BadRequest): error when creating "dummy-secret.yaml": Secret in version "v1" cannot be handled as a Secret: v1.Secret.Data: decode base64: illegal base64 data at input byte 8, error found in #10 byte of ...|Q89_Hj1Aq","API_SECR|..., bigger context ...|sion":"v1","data":{"API_KEY":"af76fsdK_cQ89_Hj1Aq","API_SECRET":"bsdfmkwegwegwe"},"kind":"Secret","m|...
Si j'utilise votre original, cela fonctionne très bien:
apiVersion: v1
kind: Secret
metadata:
name: dummy-secret
type: Opaque
data:
API_KEY: bWVnYV9zZWNyZXRfa2V5
API_SECRET: cmVhbGx5X3NlY3JldF92YWx1ZTE=
Ensuite:
$ kubectl create -f dummy-secret.yaml
secret/dummy-secret created
J'utilise la version suivante:
$ kubectl version
Client Version: version.Info{Major:"1", Minor:"12", GitVersion:"v1.12.2", GitCommit:"17c77c7898218073f14c8d573582e8d2313dc740", GitTreeState:"clean", BuildDate:"2018-10-30T21:39:38Z", GoVersion:"go1.11.1", Compiler:"gc", Platform:"darwin/AMD64"}
Server Version: version.Info{Major:"1", Minor:"12", GitVersion:"v1.12.1", GitCommit:"4ed3216f3ec431b140b1d899130a69fc671678f4", GitTreeState:"clean", BuildDate:"2018-10-05T16:36:14Z", GoVersion:"go1.10.4", Compiler:"gc", Platform:"linux/AMD64"}
Cela peut également se produire lorsque vous essayez de supprimer les nouveaux caractères de ligne de manière incorrecte (la bonne façon consiste à supprimer le suffixe "Cg ==").
J'ai utilisé base64 de cli bien qu'il existe des solutions pour éviter le NL, comme
https://superuser.com/questions/1225134/why-does-the-base64-of-a-string-contain-n/1225334
ils ne fonctionnent pas sous MacOS, j'ai trouvé plus simple d'utiliser python comme ceci
import base64
data = "abc123!?$*&()'-=@~"
# Standard Base64 Encoding
encodedBytes = base64.b64encode(data.encode("utf-8"))
encodedStr = str(encodedBytes, "utf-8")
Ou toujours en utilisant une solution basée uniquement sur bash:
echo 'secret_to_encode' | tr -d \\n | base64