Создать kubernetes docker-registry secret из файла yaml?

Я могу запустить эту команду, чтобы создать секрет реестра docker для кластера kubernetes:

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

Я хотел бы создать тот же секрет из файла yaml. Кто-нибудь знает, как это можно установить в файле yaml?

Мне нужно это как файл yaml, чтобы его можно было использовать в качестве шаблона Helm, который позволяет использовать команду установки Helm, такую как (упрощенная):

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

Ответ 1

Вы можете написать этот yaml самостоятельно, но быстрее его создать за 2 шага, используя kubectl:

  1. Создайте файл "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
    
  2. Вы можете применить файл как любой другой yubl Kubernetes:

    kubectl apply -f docker-secret.yaml

UPD, поскольку вопрос был обновлен.

Если вы используете Helm, вот официальная документация о том, как создать ImagePullSecret.

Из документа:

  1. Во-первых, предположим, что учетные данные определены в файле values.yaml следующим образом:

    imageCredentials:
      registry: quay.io
      username: someone
      password: sillyness
    
  2. Затем мы определяем наш вспомогательный шаблон следующим образом:

    {{- define "imagePullSecret" }}
    {{- printf "{\"auths\": {\"%s\": {\"auth\": \"%s\"}}}" .Values.imageCredentials.registry (printf "%s:%s" .Values.imageCredentials.username .Values.imageCredentials.password | b64enc) | b64enc }}
    {{- end }}
    
  3. Наконец, мы используем вспомогательный шаблон в более крупном шаблоне для создания секретного манифеста:

    apiVersion: v1
    kind: Secret
    metadata:
      name: myregistrykey
    type: kubernetes.io/dockerconfigjson
    data:
      .dockerconfigjson: {{ template "imagePullSecret" . }}
    

Ответ 2

apiVersion: v1
kind: Secret
metadata:
  name: <NAME>
  namespace: <NAMESPACE>
data:
  .dockercfg: eyJldXJvcGEubGFSfsdfsdfSFSDFsdfsdfSFSDFSDfjM2x1SDFSDFSDFSDFSDFSDFSFSDFSDFSDFSDFG9mZmVyLm5pY2tsYXNzb25AbGVuc3dheWdyb3VwLmNvbSIsImF1dGgiOiJWRTlMUlU0Nk1EZDBNM0JxTXpWak0yeDFNakEwZEdkbGRHVndjVzQ1YUdZPSJ9fQ==
type: kubernetes.io/dockercfg

Это работает в k8s 1.11.2. Я не проверял это ни на чем ниже 1,9. как они изменили тип.

Ответ 3

Вы можете 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 -

Ответ 4

В случае, если кто-то также просто хочет получить отображение команды kubectl на файл yaml:

kubectl create secret docker-registry --dry-run=true dockerhostsecretname \
  --docker-server=localhost \
  --docker-username=root \
  --docker-password=toor \
  [email protected] -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":"[email protected]","auth":"cm9vdDp0b29y"}}}