【registry】docker 私有仓库实现https 访问

简介: 【registry】docker 私有仓库实现https 访问

正文


上一篇,我们已经成功通过 registry 搭建了一个 docker 私有仓库,但仔细点我们会发现,在拉取和推送镜像时,需要附加 --insecure-registry 参数,很不方便,这次来优化一下这块。


一、生成证书


  1. 生成 CA 根证书

openssl genrsa -out ca.key 2048
openssl req -x509 -new -nodes -key ca.key -subj "/CN=<YOUR IP>" -days 36500 -out ca.crt


  1. 生成registry ca 证书
cat > domain_ssl.cnf <<EOF
[ req ]
req_extensions = v3_req
distinguished_name = req_distinguished_name
[ req_distinguished_name ]
[ v3_req ]
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names
[ alt_names ]
DNS.1 = <YOUR HOSTNAME>
IP.1 = <YOUR IP>
EOF


  • DNS.1 写成 registry 的访问域名
  • IP.1 写成 registry 所在的机器的IP


  1. 生成 key 和 crt

openssl genrsa -out domain.key 2048
openssl req -new -key domain.key -config etcd_ssl.cnf -subj "/CN=etcd-server" -out domain.csr
openssl x509 -req -in domain.csr -CA ca.crt -CAkey ca.key -CAcreateserial -days 36500 -extensions v3_req -extfile domain_ssl.cnf -out domain.crt
  1. domain.crtdomain.key 复制到 /etc/docker/registry/certs/ 目录


二、配置systemd环境变量

systemctl edit registryd

文件内容如下:

[Service]
Environment="REGISTRY_HTTP_TLS_CERTIFICATE=/etc/docker/registry/certs/domain.crt"
Environment="REGISTRY_HTTP_TLS_KEY=/etc/docker/registry/certs/domain.key"


重启并查看服务状态:

[root@qijing0 ~]# systemctl restart registryd && systemctl status registryd  
● registryd.service - private registry
   Loaded: loaded (/usr/lib/systemd/system/registryd.service; enabled; vendor preset: disabled)
  Drop-In: /etc/systemd/system/registryd.service.d
           └─override.conf
   Active: active (running) since Mon 2022-11-21 23:08:20 EST; 8ms ago
     Docs: https://github.com/distribution/distribution#readme
 Main PID: 15662 (registry)
    Tasks: 5
   Memory: 6.5M
   CGroup: /system.slice/registryd.service
           └─15662 /usr/bin/registry serve /etc/docker/registry/config.yml
Nov 21 23:08:20 qijing0 systemd[1]: Started private registry.


三、在客户端机器安装证书


复制 domain.crt/etc/containerd/certs.d/domain/ 目录下。

并重启 containerd


四、验证


推送镜像验证:

[root@k8s0 server]# nerdctl push domain/test-server:0.0.5
INFO[0000] pushing as a reduced-platform image (application/vnd.docker.distribution.manifest.v2+json, sha256:e0f152bb79f22dcbaaf4429cf8bc3cff75d831a5bee8042acf018560f5900586) 
manifest-sha256:e0f152bb79f22dcbaaf4429cf8bc3cff75d831a5bee8042acf018560f5900586: done           |++++++++++++++++++++++++++++++++++++++| 
config-sha256:cf3c9b089da1f8120c9ee912752dd14d56d7ef769d81d6a81423dea7324a3e5b:   done           |++++++++++++++++++++++++++++++++++++++| 
elapsed: 0.1 s                                                                    total:  6.4 Ki (63.3 KiB/s)

999.webp.jpg

  • 可以看到现在能正常推送镜像了

拉取镜像验证:

[root@k8s1 tmp]# nerdctl pull registry.domain.cn/test-server:0.0.5
registry.domain.cn/test-server:0.0.5:                                          resolved       |++++++++++++++++++++++++++++++++++++++| 
manifest-sha256:e0f152bb79f22dcbaaf4429cf8bc3cff75d831a5bee8042acf018560f5900586: done           |++++++++++++++++++++++++++++++++++++++| 
config-sha256:cf3c9b089da1f8120c9ee912752dd14d56d7ef769d81d6a81423dea7324a3e5b:   done           |++++++++++++++++++++++++++++++++++++++| 
elapsed: 0.1 s                                                                    total:   0.0 B (0.0 B/s)                                         
[root@k8s1 tmp]# date
Tue Nov 22 13:54:41 CST 2022

990.webp.jpg

  • 可以看到现在能正常拉取镜像了


【附加1】、安装 konradkleine/docker-registry-frontend:v2 用户界面


上一节安装的是joxit/docker-registry-ui,没升级成https之前还蛮好使用的,升级之后,就一直报 CORS 跨域错误,折腾了会,还是决定换一个用户界面程序,来支持 https:

docker run \
  -d \
  -e ENV_DOCKER_REGISTRY_HOST=registry.domain.cn \
  -e ENV_DOCKER_REGISTRY_PORT=443 \
  -e ENV_DOCKER_REGISTRY_USE_SSL=1 \
  -p 5001:80 \
  konradkleine/docker-registry-frontend:v2

安装完之后,也不是一帆风顺,刚开始也获取不到镜像列表,我从浏览器访问,按f12之后,发现解析不了域名,于是手动进入容器内部,在 /etc/hosts 中添加了域名:

[root@qijing0 ~]# docker exec -it 6d /bin/bash
root@6d48c37a52c5:/# cat >>/etc/hosts<<EOF
> 192.168.3.1 registry.domain.cn
> EOF

ok!,现在可以了,通过浏览器能顺利访问到镜像列表了,足够了。

99.webp.jpg

用户界面首页


9.webp.jpg

镜像列表

目录
相关文章
|
2月前
|
关系型数据库 MySQL Linux
Docker安装Mysql5.7,解决无法访问DockerHub问题
当 Docker Hub 无法访问时,可以通过配置国内镜像加速来解决应用安装失败和镜像拉取超时的问题。本文介绍了如何在 CentOS 上一键配置国内镜像加速,并成功拉取 MySQL 5.7 镜像。
574 2
Docker安装Mysql5.7,解决无法访问DockerHub问题
|
2月前
|
定位技术 文件存储 网络架构
Docker部署PhotoPrism、Immich图片管理应用,无需公网IP远程访问教程
除了Synology、QNAP、TerraMaster等品牌的NAS设备内置图库功能,市面上还有多种备受欢迎的第三方应用,如PhotoPrism、Immich、LibrePhotos、Piwigo、Photoview等。这些应用不仅提供强大的图片管理能力,还可通过Docker轻松部署。借助贝锐花生壳服务,即使没有公网IP也能实现远程访问,突破地理限制,提升数据可访问性和安全性,让用户随时随地管理私人图库。
195 1
|
2月前
|
Docker 容器
docker nginx-proxy 添加自定义https网站
docker nginx-proxy 添加自定义https网站
42 4
|
3月前
|
Linux Docker Windows
Docker配置https证书案例
本文介绍了如何为Docker的Harbor服务配置HTTPS证书,包括安装Docker和Harbor、修改配置文件以使用证书、生成自签名证书、配置证书以及验证配置的步骤。
211 2
Docker配置https证书案例
|
2月前
|
网络安全 Docker 容器
【Bug修复】秒杀服务器异常,轻松恢复网站访问--从防火墙到Docker服务的全面解析
【Bug修复】秒杀服务器异常,轻松恢复网站访问--从防火墙到Docker服务的全面解析
38 0
|
3月前
|
运维 数据安全/隐私保护 Docker
Docker自建仓库之Docker Registry部署实战
关于如何使用Docker Registry镜像搭建本地私有Docker仓库的实战教程,包括了下载镜像、创建授权目录和用户名密码、启动Registry容器、验证端口和容器、测试登录仓库、上传和下载镜像的详细步骤。
1087 5
|
4月前
|
运维 安全 网络安全
"革新远程访问体验:Docker化部署webssh2,一键启动Web SSH客户端,让远程管理如虎添翼!"
【8月更文挑战第2天】Docker作为软件开发与运维的关键工具,以其轻量级、可移植及强隔离特性简化了应用部署。结合webssh2这一开源Web SSH客户端,可通过浏览器安全便捷地访问SSH服务器,无需额外软件。首先确保已安装Docker,接着拉取webssh2镜像并运行容器,映射端口以便外部访问。配置好SSH服务器后,通过浏览器访问指定URL即可开始SSH会话。此方案不仅提升了用户体验,还加强了访问控制与系统安全。
386 7
|
4月前
|
安全 Linux 数据安全/隐私保护
详解如何登录Docker Registry
【8月更文挑战第24天】
371 0
|
4月前
|
Kubernetes 应用服务中间件 Docker
在K8S中,Pod网络访问与Docker容器端口映射有何不同?
在K8S中,Pod网络访问与Docker容器端口映射有何不同?
|
4月前
|
NoSQL 关系型数据库 MySQL
无法访问Docker 里的 mysql, redis
无法访问Docker 里的 mysql, redis
31 0
下一篇
DataWorks