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=...
Sie können dieses yaml selbst schreiben, aber es ist schneller, es in 2 Schritten zu erstellen, indem Sie kubectl
verwenden:
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
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:
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
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 }}
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" . }}
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.
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 -