Kubernetes K8S如何使用imagePullSecrets列表处理POD定义中的多个远程docker注册表
我想访问多个远程注册表以提取映像。 在K8中,他们说: (如果需要访问多个注册表,可以创建一个密码。) 对于每个注册表。Kubelet将把任何imagePullSecrets合并到 单个virtual.docker/config.json) 所以POD的定义应该是这样的:Kubernetes K8S如何使用imagePullSecrets列表处理POD定义中的多个远程docker注册表,kubernetes,docker-registry,kubernetes-secrets,Kubernetes,Docker Registry,Kubernetes Secrets,我想访问多个远程注册表以提取映像。 在K8中,他们说: (如果需要访问多个注册表,可以创建一个密码。) 对于每个注册表。Kubelet将把任何imagePullSecrets合并到 单个virtual.docker/config.json) 所以POD的定义应该是这样的: apiVersion: v1 kind: Pod spec: containers: - name: ... imagePullSecrets: - name: secret1 - name:
apiVersion: v1
kind: Pod
spec:
containers:
- name: ...
imagePullSecrets:
- name: secret1
- name: secret2
- ....
- name: secretN
现在我不确定K8S将如何为每个图像选择正确的秘密?每次都会逐一核实所有机密吗?K8S将如何处理失败的重试?如果特定数量的未经授权重试会导致k8sor docker注册表中出现某种锁定状态
/谢谢在找到正确答案之前,库伯内特斯不会尝试所有的秘密。创建机密时,您引用的是docker注册表:
$ kubectl create secret docker-registry user1-secret --docker-server=https://index.docker.io/v1/ --docker-username=user1 --docker-password=PASSWORD456 --docker-email=user1@email.com
$ kubectl create secret docker-registry user2-secret --docker-server=https://index.docker.io/v1/ --docker-username=user2 --docker-password=PASSWORD123 --docker-email=user2@email.com
$ kubectl get secrets user1-secret -o yaml
apiVersion: v1
data:
.dockerconfigjson: eyJhdXRocyI6eyJkb2NrZXIuZXhhbXBsZS5jb20iOnsidXNlcm5hbWUiOiJrdWJlIiwicGFzc3dvcmQiOiJQV19TVFJJTkciLCJlbWFpbCI6Im15QGVtYWlsLmNvbSIsImF1dGgiOiJhM1ZpWlRwUVYxOVRWRkpKVGtjPSJ9fX0=
kind: Secret
metadata:
creationTimestamp: "2020-01-13T13:15:52Z"
name: user1-secret
namespace: default
resourceVersion: "1515301"
selfLink: /api/v1/namespaces/default/secrets/user1-secret
uid: d2f3bb0c-3606-11ea-a202-42010a8000ad
type: kubernetes.io/dockerconfigjson
如您所见,类型为kubernetes。io/dockerconfigjson
告诉kubernetes以不同的方式处理此问题
因此,当您在yaml上引用容器地址为magic.example.com/magic image
时,Kubernetes将有足够的信息连接这些点,并使用正确的秘密提取您的图像
apiVersion: v1
kind: Pod
metadata:
name: busyboxes
namespace: default
spec:
imagePullSecrets:
- name: user1-secret
- name: user2-secret
containers:
- name: jenkins
image: user1/jenkins
imagePullPolicy: Always
- name: busybox
image: user2/busybox
imagePullPolicy: Always
因此,正如本例所描述的,可能有两个或多个docker注册表机密具有相同的
--docker server
值。库伯内特斯将设法无缝地处理它 您可以使用以下脚本在一个秘密中添加两个身份验证
#!/bin/bash
u1="user_1_here"
p1="password_1_here"
auth1=$(echo -n "$u1:$p1" | base64 -w0)
u2="user_2_here"
p2="password_2_here"
auth2=$(echo -n "$u2:$p2" | base64 -w0)
cat <<EOF > docker_config.json
{
"auths": {
"repo1_name_here": {
"auth": "$auth1"
},
"repo2_name_here": {
"auth": "$auth2"
}
}
}
EOF
base64 -w0 docker_config.json > docker_config_b64.json
cat <<EOF | kubectl apply -f -
apiVersion: v1
type: kubernetes.io/dockerconfigjson
kind: Secret
data:
.dockerconfigjson: $(cat docker_config_b64.json)
metadata:
name: specify_secret_name_here
namespace: specify_namespace_here
EOF
#/bin/bash
u1=“用户\u 1\u此处”
p1=“此处输入密码\u 1\u”
auth1=$(echo-n“$u1:$p1”| base64-w0)
u2=“此处的用户\u 2\u”
p2=“此处输入密码\u 2\u”
auth2=$(echo-n“$u2:$p2”| base64-w0)
cat docker_config_b64.json
猫谢谢@mWatney,这很清楚,我有两个问题要问你的答案(I)我可以有两个或更多具有相同docker服务器值的docker注册表机密吗?那么K8S将如何治疗他们呢?(ii)你能给我提供一份文件,让我可以阅读更多关于这方面的信息吗?谢谢。我已经更新了我的答案来回答你的问题。我正在寻找关于这个的文档,但还没有找到。