订阅我们的博客

私有镜像仓库可用于在受控的内部(可能更安全)基础架构中存储您应用的 Linux 容器镜像

Linux 容器技术能够让您对应用及其整个运行时环境(包括全部所需文件)一起进行打包或隔离,从而让您可以在不同环境(如开发、测试和生产等环境)之间轻松迁移容器化应用。

 

红帽被评为 2023 年 Gartner® 魔力象限™ 领导者

在 2023 年 Gartner 魔力象限容器管理评选中,红帽被评为最具执行能力和最具远见的品牌。

在本文中,我将展示如何创建一个简单的、具有更强大安全态势的 SSL/TLS 就绪型私有镜像仓库,用来存储一般容器,并展示如何将它与红帽 OpenShift 集成,以便能够执行 OCP 离线部署。它也可用于 OperatorHub 无法访问互联网的情况。

前提条件

我们需要满足以下前提条件:

  • FQDN:registry.rhbrlabs.com
  • 操作系统:红帽企业 Linux 8.6+
  • SELinux:强制
  • Firewalld:已启用
  • 镜像仓库:Podman
  • Apache 工具
  • :100Gb 挂载于 /data

此镜像仓库完全支持 OpenShift 的离线安装。

安装

为了最大限度提高系统安全性,除了 Linux 中已有的安全功能外,安装中还涉及使用加密技术。

创建所需的目录:

[root@registry ~]# mkdir -p /data/registry/{auth,certs,data}

证书

为容器镜像仓库生成证书。在本例中,我们将创建有效期为 10 年的证书:

[root@registry ~]# openssl req -newkey rsa:4096 -nodes -sha256 \
-keyout /data/registry/certs/registry.rhbrlabs.com.key -x509 -days 3650 \
-out /data/registry/certs/registry.rhbrlabs.com.crt \
-subj "/C=US/ST=NorthCarolina/L=Raleigh/O=Red Hat/OU=Engineering/CN=registry.rhbrlabs.com" \
-addext "subjectAltName = DNS:registry.rhbrlabs.com"

操作系统需要信任所生成的证书。

将生成的证书复制到锚点的受信任目录,然后运行 update-ca-trust

[root@registry ~]# cp /data/registry/certs/registry.rhbrlabs.com.crt /etc/pki/ca-trust/source/anchors/

[root@registry ~]# update-ca-trust

用户账户

为了控制对镜像仓库的访问,我们需要创建用户账户。在以下示例中,我们将为用户镜像仓库创建一个账户。

为镜像仓库生成身份验证文件:

[root@registry ~]# dnf -y install httpd-tools

[root@registry ~]# htpasswd -bBc /data/registry/auth/htpasswd registry redhat12345678

HTTP 机密

除了用户账户外,我们还需要一个机密来提高访问的可靠性。

生成随机机密:

[root@registry ~]# date | md5sum

10f207a4cbba51bf00755b5a50718966

Registry software

镜像仓库软件

有了必要的数据,就可以创建镜像仓库了。

使用镜像 docker.io/library/registry:2 创建容器镜像仓库:

[root@registry ~]# dnf -y install podman

[root@registry ~]# podman create --name ocp-registry --net host -p 5000:5000 \ -v /data/registry/data:/var/lib/registry:z -v /data/registry/auth:/auth:z \ -e "REGISTRY_AUTH=htpasswd" -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry" \ -e "REGISTRY_HTTP_SECRET=10f207a4cbba51bf00755b5a50718966" \ -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd -v /data/registry/certs:/certs:z \ -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/registry.rhbrlabs.com.crt \ -e REGISTRY_HTTP_TLS_KEY=/certs/registry.rhbrlabs.com.key docker.io/library/registry:2

上述命令将生成如下所示的消息:

Trying to pull docker.io/library/registry:2...
Getting image source signatures
Copying blob fd4a5435f342 done 
Copying blob 213ec9aee27d done 
Copying blob 4583459ba037 done 
Copying blob b136d5c19b1d done 
Copying blob 6f6a6c5733af done 
Copying config dcb3d42c17 done 
Writing manifest to image destination
Storing signatures
Port mappings have been discarded as one of the Host, Container, Pod, and None network modes are in use
22633f37262a4ab2d64fc8beb44bb80618b11802974fb2f45d31d98db3cf14e8

镜像仓库现已可供使用。但是,我们需要一种方法来控制服务的启动和停止。

启动控制

为您的镜像仓库创建一个 UNIT 文件,以在引导时自动启动容器:

[root@registry ~]# cat /etc/systemd/system/ocp-registry.service

[Unit] Description=OCP Registry [Service] Restart=always ExecStart=/usr/bin/podman start -a ocp-registry ExecStop=/usr/bin/podman stop -t 10 ocp-registry [Install] WantedBy=network-online.target

启动容器:

[root@registry ~]# systemctl daemon-reload

[root@registry ~]# systemctl enable --now ocp-registry.service
Private registry running

运行中的私有镜像仓库

防火墙

由于我们使用的是本地防火墙,因此需要授权镜像仓库服务端口。

允许 Firewalld 上的 TCP 5000 端口:

[root@registry ~]# firewall-cmd --permanent --add-port=5000/tcp

[root@registry ~]# firewall-cmd --reload

检查镜像仓库是否正常工作

现在,我们来检查新镜像仓库的访问情况。

确保身份验证和受信任的 SSL/TLS 正常工作:

[root@registry ~]# curl -u 'registry:redhat12345678' https://registry.rhbrlabs.com:5000/v2/_catalog

{"repositories":[]}

红帽 OpenShift 集成

如果您打算将此镜像仓库与 OCP 一起使用,请以 base64 格式创建一个包含身份验证信息的文件。

生成一个临时文件,其中包含用于 OpenShift 离线安装的身份验证信息:

[root@registry ~]# cat <<EOF > ~/registry-secret.json
"registry.rhbrlabs.com:5000": {
   "email": "registry@redhat.com",
   "auth": "$(echo -n 'registry:redhat12345678' | base64 -w0)"
}
EOF

结语

您新建的具有额外安全功能的私有镜像仓库现在应该已经能够启动和运行。使用私有镜像仓库服务是控制访问权限和满足更严格安全标准的好方法,因为公共镜像仓库服务更容易受到安全问题的影响。

在这篇文章中,我引导您从头开始创建安全增强型镜像仓库。尽管这个镜像仓库具有一定功能,但它缺乏高可用性、镜像、缓存和异地复制等高级功能,而一些更强大的解决方案中已具备这些功能。

红帽 Quay 包含了所有这些功能,而且具有容器漏洞扫描、对象存储支持和自动扩展等功能。

红帽 Quay 容器镜像仓库平台可为任何基础架构上的容器和云原生工件提供安全增强型存储、分发和监管。它可以作为独立组件提供,也可以在红帽 OpenShift 上运行。


关于作者

Andre Rocha is a Consultant at Red Hat focused on OpenStack, OpenShift, RHEL and other Red Hat products. He has been at Red Hat since 2019, previously working as DevOps and SysAdmin for private companies.

Read full bio

按频道浏览

automation icon

自动化

有关技术、团队和环境 IT 自动化的最新信息

AI icon

人工智能

平台更新使客户可以在任何地方运行人工智能工作负载

open hybrid cloud icon

开放混合云

了解我们如何利用混合云构建更灵活的未来

security icon

安全防护

有关我们如何跨环境和技术减少风险的最新信息

edge icon

边缘计算

简化边缘运维的平台更新

Infrastructure icon

基础架构

全球领先企业 Linux 平台的最新动态

application development icon

应用领域

我们针对最严峻的应用挑战的解决方案

Original series icon

原创节目

关于企业技术领域的创客和领导者们有趣的故事