Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kubernetes K8S如何使用imagePullSecrets列表处理POD定义中的多个远程docker注册表_Kubernetes_Docker Registry_Kubernetes Secrets - Fatal编程技术网

Kubernetes K8S如何使用imagePullSecrets列表处理POD定义中的多个远程docker注册表

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:

我想访问多个远程注册表以提取映像。 在K8中,他们说:

(如果需要访问多个注册表,可以创建一个密码。) 对于每个注册表。Kubelet将把任何imagePullSecrets合并到 单个virtual.docker/config.json)

所以POD的定义应该是这样的:

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)你能给我提供一份文件,让我可以阅读更多关于这方面的信息吗?谢谢。我已经更新了我的答案来回答你的问题。我正在寻找关于这个的文档,但还没有找到。