【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

镜像列表

目录
相关文章
|
6月前
|
Ubuntu Linux Shell
(已解决)Linux环境—bash: wget: command not found; Docker pull报错Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled
(已成功解决)Linux环境报错—bash: wget: command not found;常见Linux发行版本,Linux中yum、rpm、apt-get、wget的区别;Docker pull报错Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled
2466 68
(已解决)Linux环境—bash: wget: command not found; Docker pull报错Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled
|
3月前
|
安全 网络协议 网络安全
只有IP地址没有域名,如何实现HTTPS访问?
在仅有IP地址而无域名的情况下,实现HTTPS访问并非不可能。主要挑战包括证书颁发机构(CA)对IP地址的支持有限及浏览器兼容性问题。解决方案有:1) 搭建私有CA为内部IP地址颁发证书;2) 使用支持IP地址的公共CA服务。选择合适的方案需根据需求权衡。具体步骤包括选择证书类型、生成CSR文件、提交并完成验证、安装SSL证书和配置强制HTTPS访问。确保IP地址稳定,并定期维护安全性。 **申请优惠**:访问JoySSL官网并填写注册码“230907”可优惠申请IP地址证书。
472 5
|
5月前
|
安全 数据安全/隐私保护 Docker
docker私有仓库harbor安装
通过以上步骤,您可以成功在企业内部安装和配置Harbor私有仓库,方便地管理和分发Docker镜像。Harbor不仅提供了基础的镜像管理功能,还增强了安全性、身份管理和审计功能,使其成为企业级容器镜像管理的理想选择。
316 22
|
5月前
|
关系型数据库 MySQL Docker
docker pull mysql:8.0.26提示Error response from daemon: Get “https://registry-1.docker.io/v2/“: EOF错误
docker pull mysql:8.0.26提示Error response from daemon: Get “https://registry-1.docker.io/v2/“: EOF错误
|
7月前
|
Java 应用服务中间件 Linux
【Docker容器化技术】docker安装与部署、常用命令、容器数据卷、应用部署实战、Dockerfile、服务编排docker-compose、私有仓库
本文主要讲解了Docker的安装与部署、常用命令、容器数据卷、应用部署实战、Dockerfile、服务编排docker-compose、私有仓库以及Docker容器虚拟化与传统虚拟机比较。
9297 14
【Docker容器化技术】docker安装与部署、常用命令、容器数据卷、应用部署实战、Dockerfile、服务编排docker-compose、私有仓库
|
6月前
|
应用服务中间件 Linux 网络安全
nginx安装部署ssl证书,同时支持http与https方式访问
为了使HTTP服务支持HTTPS访问,需生成并安装SSL证书,并确保Nginx支持SSL模块。首先,在`/usr/local/nginx`目录下生成RSA密钥、证书申请文件及自签名证书。接着,确认Nginx已安装SSL模块,若未安装则重新编译Nginx加入该模块。最后,编辑`nginx.conf`配置文件,启用并配置HTTPS服务器部分,指定证书路径和监听端口(如20000),保存后重启Nginx完成部署。
2373 8
|
7月前
|
安全 网络协议 应用服务中间件
内网ip申请SSL证书实现https访问
内网IP地址虽不能直接申请公网SSL证书,但可通过IP SSL证书保障数据安全。流程包括:确定固定内网IP,选择支持内网IP的CA,注册申请证书,生成CSR,验证IP所有权,下载部署证书至Web服务器,测试HTTPS访问,确保配置正确及证书有效。此方法适用于内网环境,提升数据传输安全性。
内网ip申请SSL证书实现https访问
|
7月前
|
安全 网络安全 数据安全/隐私保护
政务内网实现https访问教程
政务内网实现HTTPS访问需经过多个步骤:了解HTTPS原理,选择并申请适合的SSL证书,配置SSL证书至服务器,设置端口映射与访问控制,测试验证HTTPS访问功能,注意证书安全性和兼容性,定期备份与恢复。这些措施确保了数据传输的安全性,提升了政务服务的效率与安全性。
|
7月前
|
Web App开发 算法 应用服务中间件
nginx开启局域网https访问
【10月更文挑战第22天】为了调试WebRTC功能,需要在局域网内搭建HTTPS协议。具体步骤包括:在已部署Nginx和安装OpenSSL的环境中生成私钥、证书签名请求和自签名证书;将生成的文件放置到Nginx的证书目录并修改Nginx配置文件,最后重启Nginx服务。注意,自签名证书不受第三方机构认可,如需正式使用,需向CA申请签名。
307 2
|
7月前
|
安全 网络安全 数据安全/隐私保护
内网IP地址实现HTTPS加密访问教程
在内网环境中,为确保数据传输的安全性,绑定SSL证书搭建HTTPS服务器至关重要。本文介绍了内网IP地址的前期准备、申请SSL证书的步骤以及客户端配置方法。具体包括选择合适的CA、注册账号、提交申请、下载证书,并在客户端导入根证书,确保通信数据的安全加密。推荐使用JoySSL提供的技术解决方案,确保内网设备通信安全。
内网IP地址实现HTTPS加密访问教程