Je peux exécuter cette commande pour créer un secret de registre Docker pour un cluster Kubernetes:
kubectl create secret docker-registry regsecret \
--docker-server=docker.example.com \
--docker-username=kube \
--docker-password=PW_STRING \
[email protected] \
--namespace mynamespace
Je voudrais créer le même secret à partir d'un fichier yaml. Est-ce que quelqu'un sait comment cela peut être défini dans un fichier yaml?
J'ai besoin de cela en tant que fichier yaml pour pouvoir être utilisé en tant que modèle Helm, ce qui permet une commande Helm install telle que celle-ci (simplifiée):
helm install ... --set docker.user=peter,docker.pw=foobar,docker.email=...
Vous pouvez écrire ce yaml par vous-même, mais il sera plus rapide de le créer en 2 étapes en utilisant kubectl
:
Générez un fichier 'yaml'. Vous pouvez utiliser la même commande mais en mode de fonctionnement à sec et en mode de sortie yaml
.
Voici un exemple de commande permettant de sauvegarder un secret dans un fichier 'docker-secret.yaml':
kubectl create secret docker-registry --dry-run=true $secret_name \
--docker-server=<DOCKER_REGISTRY_SERVER> \
--docker-username=<DOCKER_USER> \
--docker-password=<DOCKER_PASSWORD> \
--docker-email=<DOCKER_EMAIL> -o yaml > docker-secret.yaml
Vous pouvez appliquer le fichier comme n'importe quel 'yaml' de Kubernetes:
kubectl apply -f docker-secret.yaml
UPD, lorsqu'une question a été mise à jour.
Si vous utilisez Helm, voici un documentation officiel sur la création d'un ImagePullSecret.
À partir d'un doc:
Tout d'abord, supposons que les informations d'identification sont définies dans le fichier values.yaml de la manière suivante:
imageCredentials:
registry: quay.io
username: someone
password: sillyness
Nous définissons ensuite notre modèle d'assistance comme suit:
{{- define "imagePullSecret" }}
{{- printf "{\"auths\": {\"%s\": {\"auth\": \"%s\"}}}" .Values.imageCredentials.registry (printf "%s:%s" .Values.imageCredentials.username .Values.imageCredentials.password | b64enc) | b64enc }}
{{- end }}
Enfin, nous utilisons le modèle d'assistance dans un modèle plus grand pour créer le manifeste secret:
apiVersion: v1
kind: Secret
metadata:
name: myregistrykey
type: kubernetes.io/dockerconfigjson
data:
.dockerconfigjson: {{ template "imagePullSecret" . }}
apiVersion: v1
kind: Secret
metadata:
name: <NAME>
namespace: <NAMESPACE>
data:
.dockercfg: eyJldXJvcGEubGFSfsdfsdfSFSDFsdfsdfSFSDFSDfjM2x1SDFSDFSDFSDFSDFSDFSFSDFSDFSDFSDFG9mZmVyLm5pY2tsYXNzb25AbGVuc3dheWdyb3VwLmNvbSIsImF1dGgiOiJWRTlMUlU0Nk1EZDBNM0JxTXpWak0yeDFNakEwZEdkbGRHVndjVzQ1YUdZPSJ9fQ==
type: kubernetes.io/dockercfg
Cela fonctionne dans k8s 1.11.2. Je ne l'ai pas testé sur rien en dessous de 1.9. comme ils ont changé le type.
Vous pouvez kubectl appliquer la sortie d’une commande impérative sur une ligne:
kubectl create secret docker-registry --dry-run=true $secret_name \
--docker-server=<DOCKER_REGISTRY_SERVER> \
--docker-username=<DOCKER_USER> \
--docker-password=<DOCKER_PASSWORD> \
--docker-email=<DOCKER_EMAIL> -o yaml | kubectl apply -f -