从私有存储库中 Kubernetes 上的图像拉取问题

Vla*_*kic 1 bash kubernetes docker-registry

我创建了注册表积分,当我像这样申请 pod 时:

apiVersion: v1
kind: Pod
metadata:
  name: private-reg
spec:
  containers:
  - name: private-reg-container
    image: registry.io.io/simple-node
  imagePullSecrets:
  - name: regcred
Run Code Online (Sandbox Code Playgroud)

它工作成功拉图像

但如果我尝试这样做:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: node123
  namespace: node123
spec:
  replicas: 5
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 2
      maxUnavailable: 0
  selector:
    matchLabels:
      name: node123
  template:
      metadata:
          labels:
              name: node123
      spec:
          containers:
              - name: node123
                image: registry.io.io/simple-node
                ports:
                - containerPort: 3000
          imagePullSecrets:
             - name: regcred
Run Code Online (Sandbox Code Playgroud)

在 pod 上会得到错误:ImagePullBackOff

当我描述它时

无法拉取镜像“registry.io.io/simple-node”:rpc 错误:代码 = 未知描述 = 来自守护进程的错误响应:获取 https://registry.io.io/v2/simple-node/manifests/latest:没有基本的身份验证凭据

有谁知道如何解决这个问题?

Abd*_*UMI 6

我们总是从私有注册表中运行镜像。这个清单可能会帮助你:

  1. 将您的参数放在终端的 env 变量中,以获得单一的事实来源:

    export DOCKER_HOST=registry.io.io
    export DOCKER_USER=<your-user>
    export DOCKER_PASS=<your-pass>
    
    Run Code Online (Sandbox Code Playgroud)
  2. 确保您可以进行身份​​验证并且图像确实存在

    echo $DOCKER_PASS | docker login -u$DOCKER_USER --password-stdin $DOCKER_HOST
    docker pull ${DOCKER_HOST}/simple-node
    
    Run Code Online (Sandbox Code Playgroud)
  3. 确保您在 pod/deployment 的相同命名空间中创建了 Dockerconfig secret;

    namespace=mynamespace # default
    kubectl -n ${namespace} create secret docker-registry regcred \
      --docker-server=${DOCKER_HOST} \
      --docker-username=${DOCKER_USER} \
      --docker-password=${DOCKER_PASS} \
      --docker-email=anything@will.work.com
    
    Run Code Online (Sandbox Code Playgroud)
  4. 使用 secret 修补 Pod 使用的服务帐户

    namespace=mynamespace
    kubectl -n ${namespace} patch serviceaccount default \
      -p '{"imagePullSecrets": [{"name": "regcred"}]}'
    # if the pod use another service account, 
    #     replace "default" by the relevant service account
    
    Run Code Online (Sandbox Code Playgroud)

    或者

    imagePullSecrets在 pod 中添加:

    imagePullSecrets:
     - name: regcred
    containers:
     - ....
    
    Run Code Online (Sandbox Code Playgroud)