首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >K8S如何使用imagePullSecrets列表处理POD定义中的多个远程停靠寄存器

K8S如何使用imagePullSecrets列表处理POD定义中的多个远程停靠寄存器
EN

Stack Overflow用户
提问于 2020-01-13 10:36:46
回答 2查看 1.4K关注 0票数 3

我想访问多个远程注册表来获取图像。在k8s 文档中,他们说:

(如果需要访问多个注册表,则可以为每个注册表创建一个秘密。Kubelet会将任何imagePullSecrets合并成一个虚拟的. .docker/config.json)

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

代码语言:javascript
复制
apiVersion: v1
kind: Pod
spec:
  containers:
    - name: ...
  imagePullSecrets:
    - name: secret1
    - name: secret2
    - ....
    - name: secretN

现在我不知道K8S将如何为每一张图片挑选正确的秘密?所有的秘密每一次都会被逐个验证吗?K8S将如何处理失败的重试?如果有一定数量的未经授权的重试会导致k8sor坞注册中心出现某种锁定状态?

//谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-01-13 13:22:11

除非找到正确的答案,否则库伯内特斯不会尝试所有的秘密。当您创建秘密时,您正在引用它是一个码头注册中心:

代码语言:javascript
复制
$ 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

正如你所看到的,类型is kubernetes.io/dockerconfigjson正在告诉Kubernetes以不同的方式对待这个问题。

因此,当您在yaml上将容器的地址引用为magic.example.com/magic-image时,Kubernetes将有足够的信息连接这些点并使用正确的秘密来提取您的图像。

代码语言:javascript
复制
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-server值的停靠者注册表机密。库伯内特斯会处理得天衣无缝的。

票数 3
EN

Stack Overflow用户

发布于 2020-06-19 01:35:41

可以使用以下脚本在一个秘密中添加两个身份验证

代码语言:javascript
复制
#!/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
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59714903

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档