Создать секретный ключ Docker-реестра kubernetes из файла yaml?
Я могу выполнить эту команду, чтобы создать секретный ключ реестра для кластера kubernetes:
kubectl create secret docker-registry regsecret \
--docker-server=docker.example.com \
--docker-username=kube \
--docker-password=PW_STRING \
--docker-email=my@email.com \
--namespace mynamespace
Я хотел бы создать тот же секрет из файла yaml. Кто-нибудь знает, как это можно установить в файле yaml?
Мне нужно это как файл yaml, чтобы его можно было использовать в качестве шаблона Helm, который допускает команду установки Helm, такую как эта (упрощенная):
helm install ... --set docker.user=peter,docker.pw=foobar,docker.email=...
2 ответа
Вы можете написать этот yaml самостоятельно, но будет быстрее создать его за 2 шага, используя kubectl
:
Создайте файл 'yaml'. Вы можете использовать ту же команду, но в режиме пробного запуска и в режиме вывода
yaml
,Вот пример команды, которая сохранит секрет в файл '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
Вы можете применить файл, как и любой другой Kubernetes 'yaml:
kubectl apply -f docker-secret.yaml
UPD, так как вопрос был обновлен.
Если вы используете Helm, вот официальная документация о том, как создать ImagePullSecret.
Из документа:
Сначала предположим, что учетные данные определены в файле values.yaml следующим образом:
imageCredentials: registry: quay.io username: someone password: sillyness
Затем мы определяем наш вспомогательный шаблон следующим образом:
{{- define "imagePullSecret" }} {{- printf "{\"auths\": {\"%s\": {\"auth\": \"%s\"}}}" .Values.imageCredentials.registry (printf "%s:%s" .Values.imageCredentials.username .Values.imageCredentials.password | b64enc) | b64enc }} {{- end }}
Наконец, мы используем вспомогательный шаблон в большем шаблоне для создания манифеста Secret:
apiVersion: v1 kind: Secret metadata: name: myregistrykey type: kubernetes.io/dockerconfigjson data: .dockerconfigjson: {{ template "imagePullSecret" . }}
Вы можете kubectl применить вывод императивной команды в одну строку:
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 -
В случае, если кто-то также просто хочет получить отображение команды kubectl на файл yaml:
kubectl create secret docker-registry --dry-run=true dockerhostsecretname \
--docker-server=localhost \
--docker-username=root \
--docker-password=toor \
--docker-email=root@toor.nl -o yaml
дает мне
apiVersion: v1
data:
.dockerconfigjson: eyJhdXRocyI6eyJsb2NhbGhvc3QiOnsidXNlcm5hbWUiOiJyb290IiwicGFzc3dvcmQiOiJ0b29yIiwiZW1haWwiOiJyb290QHRvb3IubmwiLCJhdXRoIjoiY205dmREcDBiMjl5In19fQ==
kind: Secret
metadata:
creationTimestamp: null
name: dockerhostsecretname
type: kubernetes.io/dockerconfigjson
Строка base64 для пароля:
eyJhdXRocyI6eyJsb2NhbGhvc3QiOnsidXNlcm5hbWUiOiJyb290IiwicGFzc3dvcmQiOiJ0b29yIiwiZW1haWwiOiJyb290QHRvb3IubmwiLCJhdXRoIjoiY205dmREcDBiMjl5In19fQ
декодируется как:
{"auths":{"localhost":{"username":"root","password":"toor","email":"root@toor.nl","auth":"cm9vdDp0b29y"}}}
cat <<EOF | kubectl apply -f -
---
apiVersion: v1
kind: Secret
metadata:
name: regcred
data:
.dockerconfigjson: $(echo "{\"auths\": {\"https://index.docker.io/v1/\": {\"auth\": \"$(echo "janedoe:xxxxxxxxxxx" | base64)\"}}}" | base64)
type: kubernetes.io/dockerconfigjson
EOF
apiVersion: v1
kind: Secret
metadata:
name: <NAME>
namespace: <NAMESPACE>
data:
.dockercfg: eyJldXJvcGEubGFSfsdfsdfSFSDFsdfsdfSFSDFSDfjM2x1SDFSDFSDFSDFSDFSDFSFSDFSDFSDFSDFG9mZmVyLm5pY2tsYXNzb25AbGVuc3dheWdyb3VwLmNvbSIsImF1dGgiOiJWRTlMUlU0Nk1EZDBNM0JxTXpWak0yeDFNakEwZEdkbGRHVndjVzQ1YUdZPSJ9fQ==
type: kubernetes.io/dockercfg
Это работает в k8s 1.11.2. Я не проверял это ни на чем ниже 1,9. как они изменили тип.