web-dev-qa-db-fra.com

Créer le secret de la base de registre de Kubernetes à partir du fichier Yaml?

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=...
6
Rotareti

Vous pouvez écrire ce yaml par vous-même, mais il sera plus rapide de le créer en 2 étapes en utilisant kubectl:

  1. 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
    
  2. 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:

  1. 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
    
  2. 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 }}
    
  3. 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" . }}
    
17
Anton Kostenko
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.

2
Coffe

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 -
0
Sébastien Dan