wake-up-neo.com

Kubernetes docker-registry geheim aus yaml-datei erstellen?

Ich kann diesen Befehl ausführen, um ein Docker-Registrierungsgeheimnis für einen Kubernetes-Cluster zu erstellen:

kubectl create secret docker-registry regsecret \
--docker-server=docker.example.com \
--docker-username=kube \
--docker-password=PW_STRING \
[email protected] \
--namespace mynamespace 

Ich möchte dasselbe Geheimnis aus einer Yaml-Datei erstellen. Weiß jemand, wie dies in einer Yaml-Datei eingestellt werden kann?

Ich brauche dies als Yaml-Datei, damit es als Helm-Vorlage verwendet werden kann, was einen Helm-Installationsbefehl wie diesen (vereinfachten) Befehl ermöglicht:

helm install ... --set docker.user=peter,docker.pw=foobar,docker.email=...
6
Rotareti

Sie können dieses yaml selbst schreiben, aber es ist schneller, es in 2 Schritten zu erstellen, indem Sie kubectl verwenden:

  1. Erzeugen Sie eine 'yaml'-Datei. Sie können den gleichen Befehl verwenden, aber im Trockenlaufmodus und im Ausgabemodus yaml.

    Hier ein Beispiel für einen Befehl, der ein Geheimnis in einer 'docker-secret.yaml'-Datei speichert:

    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. Sie können die Datei wie jedes andere Kubernetes 'yaml' anwenden:

    kubectl apply -f docker-secret.yaml

UPD, da eine Frage aktualisiert wurde.

Wenn Sie Helm verwenden, finden Sie hier eine offizielle Dokumentation zum Erstellen eines ImagePullSecret.

Aus einem Dokument:

  1. Nehmen Sie zunächst an, dass die Berechtigungsnachweise wie folgt in der Datei values.yaml definiert sind:

    imageCredentials:
      registry: quay.io
      username: someone
      password: sillyness
    
  2. Wir definieren dann unsere Hilfsvorlage wie folgt:

    {{- define "imagePullSecret" }}
    {{- printf "{\"auths\": {\"%s\": {\"auth\": \"%s\"}}}" .Values.imageCredentials.registry (printf "%s:%s" .Values.imageCredentials.username .Values.imageCredentials.password | b64enc) | b64enc }}
    {{- end }}
    
  3. Schließlich verwenden wir die Hilfsvorlage in einer größeren Vorlage, um das geheime Manifest zu erstellen:

    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

Dies funktioniert in k8s 1.11.2. Ich habe es nicht bei etwas unter 1.9 getestet. als sie den Typ änderten.

2
Coffe

Sie können kubectl die Ausgabe eines imperativen Befehls in einer Zeile anwenden:

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