从yaml文件创建kubernetes docker-registry secret?

时间:2018-04-03 11:44:28

标签: docker kubernetes

我可以运行此命令为kubernetes集群创建docker注册表密码:

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

5 个答案:

答案 0 :(得分:21)

您可以自己编写yaml,但使用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. 您可以像任何其他Kubernetes&#39; yaml&#39;一样申请该文件:

    kubectl apply -f docker-secret.yaml

  3. UPD ,问题已更新。

    如果您使用的是Helm,这里有一个关于如何创建ImagePullSecret的官方documentation

    来自doc:

    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" . }}
      

答案 1 :(得分:2)

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

这在k8s 1.11.2中有效。我尚未在1.9以下的任何版本上对其进行测试。他们改变了类型。

答案 2 :(得分:0)

您可以在一行中 kubectl apply 命令命令的输出:

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 -

答案 3 :(得分:0)

如果有人也只想将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"}}}

答案 4 :(得分:0)

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