【问题标题】:How to use Kubernetes Secret to pull a private docker image from docker hub?如何使用 Kubernetes Secret 从 docker hub 拉取私有 docker 镜像?
【发布时间】:2023-02-20 18:52:25
【问题描述】:

我正在尝试在 ubuntu 20.04 上使用 minikube 运行我的 kubernetes 应用程序,并应用一个秘密从 docker hub 中提取私有 docker 镜像,但它似乎无法正常工作。

拉取镜像“xxx/node-graphql:latest”失败:rpc 错误:代码 = Unknown desc = 来自守护程序的错误响应:xxx/node-graphql 的拉取访问被拒绝,存储库不存在或可能需要 'docker login': denied: 请求访问资源被拒绝

这是生成的秘密

kubectl create secret generic regcred \                     
    --from-file=.dockerconfigjson=<pathtofile>.docker/config.json \
    --type=kubernetes.io/dockerconfigjson

这是我创建的秘密 yaml 文件

apiVersion: v1
data:
  .dockerconfigjson: xxx9tRXpNakZCSTBBaFFRPT0iCgkJfQoJfQp9
kind: Secret
metadata:
  name: node-graphql-secret
  uid: xxx-2e18-44eb-9719-xxx
type: kubernetes.io/dockerconfigjson

有没有人尝试使用秘密将私有 docker 镜像拉入 Kubernetes?任何形式的帮助将不胜感激。谢谢你!

【问题讨论】:

    标签: kubernetes kubectl minikube dockerhub kubernetes-secrets


    【解决方案1】:

    我设法在以下步骤中添加了秘密配置。

    首先,您需要使用以下命令登录到 docker hub:

    docker login
    

    接下来,您创建一个运行的 k8s 秘密:

    kubectl create secret generic <your-secret-name>\n    --from-file=.dockerconfigjson=<pathtoyourdockerconfigfile>.docker/config.json \n    --type=kubernetes.io/dockerconfigjson
    

    然后获取yaml格式的secret

    kubectl get secret -o yaml
    

    它应该是这样的:

    apiVersion: v1
    items:
    - apiVersion: v1
      data:
        .dockerconfigjson: xxxewoJImF1dGhzIjogewoJCSJodHRwczovL2luZGV4LmRvY2tl
      kind: Secret
      metadata:
        creationTimestamp: "2022-10-27T23:06:01Z"
        name: <your-secret-name>
        namespace: default
        resourceVersion: "513"
        uid: xxxx-0f12-4beb-be41-xxx
      type: kubernetes.io/dockerconfigjson
    kind: List
    metadata:
      resourceVersion: ""
    

    我已经在秘密 yaml 文件中复制了秘密的内容:

    apiVersion: v1
    data:
      .dockerconfigjson: xxxewoJImF1dGhzIjogewoJCSJodHRwczovL2luZGV4LmRvY2tlci
    kind: Secret
    metadata:
      creationTimestamp: "2022-10-27T23:06:01Z"
      name: <your-secret-name>
      namespace: default
      resourceVersion: "513"
      uid: xxx-0f12-4beb-be41-xxx
    type: kubernetes.io/dockerconfigjson
    

    有用!这是使用Secret 为 K8s 拉取私有 docker 镜像的简单方法。

    作为旁注,要应用秘密,请运行kubectl apply -f secret.yml

    希望能帮助到你

    【讨论】:

      【解决方案2】:

      @dreambold 感谢您详细说明您找到的解决方案。由于我正在努力从 K3s 对 Docket Hub 进行身份验证,我尝试了您的方法并在 Deployment 中引用了 Secret,但它仍然报告我未通过身份验证。

      我看不出问题中的 Secret 清单与答案中生成的 Secret 清单之间的区别,除了 resourceVersioncreationTimestamp 等字段是在创建 Secret 时生成的。他们在我看来是一样的。

      【讨论】:

        猜你喜欢
        • 2017-04-24
        • 1970-01-01
        • 2021-06-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-17
        • 2021-07-28
        相关资源
        最近更新 更多