K8S部署应用时从harbor拉取镜像失败

问题描述

K8S部署服务拉取镜像失败:ImagePullBackOff
K8S拉取镜像提示:Failed to pull image “IP:PORT/zcy-project/nginx:1.16.1”: rpc error: code = Unknown desc = Error response from daemon: unauthorized: unauthorized to access repository: zcy-project/nginx, action: pull: unauthorized to access repository:
使用命令部署服务:

kubectl run nginx-deployment-6 --image=192.168.10.136:8080/zcy-project/nginx:1.16.2 --port=80 --replicas=2
kubectl get pod
kubectl describe pod nginx-deployment-6

查看部署结果:
在这里插入图片描述
这里的状态STATUS:ImagePullBackOff
在这里插入图片描述
可以看到错误提示:

Failed to pull image “IP:PORT/zcy-project/nginx:1.16.1”: rpc error: code = Unknown desc = Error response from daemon: unauthorized: unauthorized to access repository: zcy-project/nginx, action: pull: unauthorized to access repository:

问题排查:

  1. 用docker login测试过账户、密码、Registry、镜像均无误
docker login 192.168.10.136:8080
  1. 每个Node都用docker直接拉取:
docker pull 192.168.10.136:8080/zcy-project/nginx:1.16.1
  1. 使用imagePullSecrets
    创建一个secrete资源对象。以下示例中 registry-harbor 为secret资源对象的名称。除了邮箱可以随便填,其它三个需要使用实际的harbor地址和账号。
kubectl create secret docker-registry registry-harbor \
    --docker-server=192.168.10.136 \
    --docker-username=admin \
    --docker-password='123.com' \
    --docker-email=foo@bar.com
  1. 在pod的yaml定义文件中使用 imagePullSecrets 引用secret
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment-6
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
      env: uat
  template:
    metadata:
      labels:
      	app: nginx
        env: uat
    spec:
      containers:
      - name: nginx
        image: 192.168.10.136:8080/zcy-project/nginx:1.16.2
        ports:
        - containerPort: 80
      imagePullSecrets:
      - name: registry-harbor
  1. 创建pod测试能否正常拉取
    kubectl create -f xxx.yaml
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
KubernetesK8s)是一个开源的容器编排系统,用于自动化容器部署、扩展和管理。Harbor是一个可信赖的企业级容器镜像仓库,它允许用户管理和存储Docker镜像Kubernetes可以使用HTTP方式来拉取Harbor上的镜像。在K8s集群中配置Kubernetes的Pod,可以通过定义容器镜像名称来指定从Harbor拉取镜像。 首先,需要在K8s集群中配置一个Secret对象,用于存储Harbor镜像仓库的凭证信息,包括用户名和密码。然后,在定义Pod的候,可以通过添加imagePullSecrets字段,将Secret对象引用到Pod中。 当Kubernetes调度并创建Pod,它会根据Pod中的镜像名称和引用的Secret对象,使用HTTP方式向Harbor发送拉取镜像的请求。Harbor会验证Pod中的凭证信息,并向Kubernetes返回镜像的相关信息。 通过HTTP方式拉取镜像的好处是,可以通过配置HttpHeader来进行更灵活的镜像拉取操作,例如允许拉取指定版本的镜像或者拉取特定标签的镜像。此外,使用HTTP方式还可以与Harbor的访问控制策略进行集成,以确保只有授权的用户能够拉取镜像。 总之,Kubernetes可以使用HTTP方式从Harbor拉取镜像。通过配置Secret对象进行凭证信息的引用,Kubernetes可以根据Pod中定义的镜像名称和引用的Secret对象,通过HTTP方式与Harbor进行通信并获取所需的镜像。这样的集成使得KubernetesHarbor更加紧密地结合在一起,提供了更安全、可靠的容器镜像管理和部署方案。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值