1. OpenShift 内部 image registry

Openshift 自带内部 image registry,可通过 podman 实现 image 的 pull 和 push 操作。

对不同操作,需要给用户指定相应的 role:

// podman pull
oc policy add-role-to-user registry-viewer <user_name> // podman push
oc policy add-role-to-user registry-editor <user_name>

使用用户名 + token 的方式 login 内部 image registry:

$ podman login -u $(oc whoami) -p $(oc whoami -t) --tls-verify=false image-registry.openshift-image-registry.svc:5000
Login Succeeded!

通过 podman pull 拉取远端 registy image(这里直接拉取的内部 registry image):

$ podman pull image-registry.openshift-image-registry.svc:5000/default/xxx:0.4.1

podman images 查看是否拉取 image 到本地:

$ podman images | grep default/lcmaas-engine
image-registry.openshift-image-registry.svc:5000/default/xxx 0.4.1 f7b265fd6c39 3 weeks ago 64.9 MB

对本地的 image 打 tag 并且 push 到内部 image registry:

$ podman tag image-registry.openshift-image-registry.svc:5000/default/xxx:0.4.1 image-registry.openshift-image-registry.svc:5000/luban/xxx:0.4.1

$ podman push image-registry.openshift-image-registry.svc:5000/luban/xxx:0.4.1

注意 podman images 看不到内部 image registry 存储的 image,查看内部 image registry 存储的 image 可通过 curl registry url 的方式查看:

$ curl -s -k -H "Authorization: Bearer $(oc whoami -t)" https://image-registry.openshift-image-registry.svc:5000/v2/_catalog | jq

$ env | grep http
https_proxy=http://10.158.xxx.xxx:8080/
http_proxy=http://10.158.xxx.xxx:8080/
$ unset https_proxy
$ unset http_proxy $ curl -s -k -H "Authorization: Bearer $(oc whoami -t)" https://image-registry.openshift-image-registry.svc:5000/v2/_catalog | jq
{
"repositories": [
"luban/xxx1",
"luban/xxx2",
...

这里要注意 curl 访问的是本地内部image registry 不需要走代理,如果设置了代理的话需要取消代理。

2. OpenShift 内部 insecure image registry

上节介绍的 image registry 是内部 secure 的,当访问内部 insecure image registry 时会报错 x509: certificate signed by unknown authority

$ podman pull default-route-openshift-image-registry.apps.xxx.net/default/xxx-0.4.1:latest
Trying to pull default-route-openshift-image-registry.apps.xxx.net/default/xxx-0.4.1:latest...
Error: Error initializing source docker://default-route-openshift-image-registry.apps.xxx.net/default/xxx-0.4.1:latest:
error pinging docker registry default-route-openshift-image-registry.xxx.net:
Get "https://default-route-openshift-image-registry.apps.xxx.net/v2/": x509: certificate signed by unknown authority

解决方法可以从两个角度入手:

  1. 将 image registry 置为 secure。
  2. 忽视 insecure 的证书检查。

这里实践了第二种将 registry 配成 insecure 。

在 /etc/containers/registries.conf 文件下,添加如下 registry field:

[[registry]]
location = "default-route-openshift-image-registry.apps.xxx.net"
insecure = true

表示 location 定义的 registry 允许不安全的 HTTP 拉取。

详细解释可看 Podman添加私有镜像源配置 registries.conf

继续执行 podman pull insecure image registry:

$ podman pull default-route-openshift-image-registry.apps.xxx.net/default/xxx:0.4.1
Trying to pull default-route-openshift-image-registry.apps.xxx.net/default/xxx:0.4.1...
Getting image source signatures
Copying blob 298d29d50a74 [--------------------------------------] 0.0b / 0.0b
Copying config f7b265fd6c done
Writing manifest to image destination
Storing signatures
f7b265fd6c39b522c6c606eb49a124def7ff8bce8560ba83dfc83982eac00d53

拉取成功!

使用 kubernetes 部署 pod 并且指定 insecure image registry 看是否能拉取成功:

Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning Failed 5m48s (x6 over 7m5s) kubelet Error: ImagePullBackOff
Normal Pulling 5m35s (x4 over 7m6s) kubelet Pulling image "default-route-openshift-image-registry.apps.xxx.net/default/xxx:0.250.3554"
Warning Failed 5m35s (x4 over 7m6s) kubelet Failed to pull image "default-route-openshift-image-registry.apps.xxx.net/default/xxx:0.250.3554": rpc error: code = Unknown desc = pinging container registry default-route-openshift-image-registry.apps.xxx.net: Get "https://default-route-openshift-image-registry.apps.xxx.net/v2/": x509: certificate signed by unknown authority
Warning Failed 5m35s (x4 over 7m6s) kubelet Error: ErrImagePull
Normal BackOff 114s (x22 over 7m5s) kubelet Back-off pulling image "default-route-openshift-image-registry.apps.xxx.net/default/xxx:0.250.3554"

还是报 x509: certificate signed by unknown authority 错误。

猜测 containerd(OpenShift 安装的 containerd 是 oci-o) 在 pull image 时报错,解决方式应该是类似的,在 containerd 的配置文件中添加 insecure registry。这里就不继续实践了。

3. 参考文章

  1. Trouble with insecure_registries
  2. https://docs.docker.com/registry/insecure/
  3. Failed to pull image with "x509: certificate signed by unknown authority" error
  4. Accessing the registry
  5. 向OpenShift内部Image Registry推送Image

OpenShift image registry 访问镜像的更多相关文章

  1. Docker Registry 管理镜像

    一.使用Docker Registry管理镜像 a.登陆docker hub  https://www.docker.com/products/docker-hub b.创建仓库 c.推送镜像   打 ...

  2. 6.云原生之Docker容器Registry私有镜像仓库搭建实践

    转载自:https://www.bilibili.com/read/cv15219863/?from=readlist #1.下载registry仓库并设置数据存放的目录(并生成认证账号密码) doc ...

  3. openshift pod对外访问网络解析

    openshift封装了k8s,在网络上结合ovs实现了多租户隔离,对外提供服务时报文需要经过ovs的tun0接口.下面就如何通过tun0访问pod(172.30.0.0/16)进行解析(下图来自理解 ...

  4. registry --------->仓库 ----------------->镜像

    registry --------->仓库 ----------------->镜像 本地镜像都保存在宿主机下 : /var/lib/docker/containers 镜像从仓库下载下来 ...

  5. 搭建docker registry私有镜像仓库

    搭建docker registry私有镜像仓库 一.安装docker-distribution yum install -y docker-distribution 安装完成后,启动服务: syste ...

  6. docker(五) 使用Docker Registry搭建镜像私服

    1.创建私服 docker run -d --name registry -v /opt/data/registry:/var/lib/registry -p 5000:5000 registry - ...

  7. Docker部署Registry私有镜像库

    拉取镜像 docker pull registry:2.6.2   生成账号密码文件,这里采用htpasswd方式认证 docker run --rm --entrypoint htpasswd re ...

  8. docker私服registry管理镜像

    前言 首先试想这样一个场景:当在自己的机器上(docker中)构建了mysql镜像,eureka镜像等等微服务镜像,这些镜像有可能需要放到其他的机器上docker环境中去运行,实行分布式架构部署.但如 ...

  9. 使用 Azure Container Registry 储存镜像

    Azure Container Registry(容器注册表)是基于 Docker Registry 2.0规范的托管专用 Docker 注册表服务. 可以创建和维护 Azure 容器注册表来存储与管 ...

  10. Mirror--程序访问镜像数据库的超时机制

    程序在访问有镜像的数据库和无镜像的数据库时,采用的链接超时时间算法不一样,因此会导致在在有镜像的数据库上设置了15 S的超时时间,而实际的超时时间仅为3.6 S,从而导致有镜像的数据库更容易超时. 在 ...

随机推荐

  1. 数据仓库主流开发语言——SQL

    数仓开发语言概述  SQL语言介绍 数仓与SQL 结构化数据 二维表结构 SQL语法分类

  2. 【UniApp】-uni-app-网络请求

    前言 经过上个章节的介绍,大家可以了解到 uni-app-pinia存储数据的基本使用方法 那本章节来给大家介绍一下 uni-app-网络请求 的基本使用方法 步入正题 首先我们打开官方文档,我先带着 ...

  3. Linux磁盘专题-linux文件系统详解

    这可是我几年前的杰作笔记呀.....当初手写计算都会,现在忘光光.... 物理硬盘Block的概念和作用 硬盘底层一次IO就是读.写一次扇区,一个扇区默认是512Byte. 读写大量文件如果以扇区为单 ...

  4. Bert-vits2最终版Bert-vits2-2.3云端训练和推理(Colab免费GPU算力平台)

    对于深度学习初学者来说,JupyterNoteBook的脚本运行形式显然更加友好,依托Python语言的跨平台特性,JupyterNoteBook既可以在本地线下环境运行,也可以在线上服务器上运行.G ...

  5. 《HelloGitHub》第 93 期

    兴趣是最好的老师,HelloGitHub 让你对编程感兴趣! 简介 HelloGitHub 分享 GitHub 上有趣.入门级的开源项目. https://github.com/521xueweiha ...

  6. node.js 命令必须加 npx 才能执行

    问题描述 在 Windows 上搭建 Hexo 环境,已经从官网下载安装 node-v18.18.2-x64.msi,并且通过 npm 命令成功安装 hexo. PowerShell 中,直接执行 h ...

  7. 国内AI大模型 VS chatgpt (20)-- H265/H264有何不同,h265有什么优势?

    H265/H264有何不同,h265有什么优势? 文心一言: H.264和H.265是两种不同的视频编码标准,它们在压缩质量和带宽需求方面有所不同. H.264是一种高效的视频压缩标准,它的编码单位是 ...

  8. .NET技术分享日活动-202104

    2021年4月27日下午,个人组织举办了山东地区的山东.NET技术分享日活动.围绕互联网技术.大数据.机器学习.业务实践等方向进行创新技术的实践分享. 本次技术分享日活动面向了山东地区广大的.NET ...

  9. 数仓调优实践丨SQL改写消除相关子查询

    本文分享自华为云社区<[调优实践]SQL改写消除相关子查询>,作者: 门前一棵葡萄树 . 一.子查询 GaussDB(DWS)根据子查询在SQL语句中的位置把子查询分成了子查询.子链接两种 ...

  10. 【好书推荐】《Python黑魔法指南》-附高清PDF版

    摘要:<Python 黑魔法手册.pdf >作者(明哥)是一个从事云计算多年的 Python 重度用户,它把自已多年的 Python 编码经验整理成小册子,没有长篇大论,半天就能全能掌握, ...