从 yaml 文件创建 kubernetes docker-registry secret?
Create kubernetes docker-registry secret from yaml file?
我可以运行此命令为 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=...
您可以自己编写该 yaml,但使用 kubectl
分两步创建它会更快:
- 生成一个 'yaml' 文件。您可以使用相同的命令,但在 dry-run 模式和输出模式
yaml
.
下面是一个命令示例,它会将 kubectl
版本 < 1.18 的秘密保存到 'docker-secret.yaml' 文件中(通过 kubectl version --short|grep Client
检查版本):
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
对于 kubectl
版本 >= 1.18:
kubectl create secret docker-registry --dry-run=client $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
.
的官方 documentation
来自文档:
- 首先,假设凭证在
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" . }}
apiVersion: v1
kind: Secret
metadata:
name: <NAME>
namespace: <NAMESPACE>
data:
.dockercfg: eyJldXJvcGEubGFSfsdfsdfSFSDFsdfsdfSFSDFSDfjM2x1SDFSDFSDFSDFSDFSDFSFSDFSDFSDFSDFG9mZmVyLm5pY2tsYXNzb25AbGVuc3dheWdyb3VwLmNvbSIsImF1dGgiOiJWRTlMUlU0Nk1EZDBNM0JxTXpWak0yeDFNakEwZEdkbGRHVndjVzQ1YUdZPSJ9fQ==
type: kubernetes.io/dockercfg
这适用于 k8s 1.11.2。我还没有在 1.9 以下的任何东西上测试过它。因为他们改变了类型。
您可以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 -
如果有人也只是想将 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
我可以运行此命令为 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=...
您可以自己编写该 yaml,但使用 kubectl
分两步创建它会更快:
- 生成一个 'yaml' 文件。您可以使用相同的命令,但在 dry-run 模式和输出模式
yaml
.
下面是一个命令示例,它会将 kubectl
版本 < 1.18 的秘密保存到 'docker-secret.yaml' 文件中(通过 kubectl version --short|grep Client
检查版本):
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
对于 kubectl
版本 >= 1.18:
kubectl create secret docker-registry --dry-run=client $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" . }}
apiVersion: v1
kind: Secret
metadata:
name: <NAME>
namespace: <NAMESPACE>
data:
.dockercfg: eyJldXJvcGEubGFSfsdfsdfSFSDFsdfsdfSFSDFSDfjM2x1SDFSDFSDFSDFSDFSDFSFSDFSDFSDFSDFG9mZmVyLm5pY2tsYXNzb25AbGVuc3dheWdyb3VwLmNvbSIsImF1dGgiOiJWRTlMUlU0Nk1EZDBNM0JxTXpWak0yeDFNakEwZEdkbGRHVndjVzQ1YUdZPSJ9fQ==
type: kubernetes.io/dockercfg
这适用于 k8s 1.11.2。我还没有在 1.9 以下的任何东西上测试过它。因为他们改变了类型。
您可以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 -
如果有人也只是想将 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