docker registry 仓库加密

docker registry 仓库加密

1、背景

​ 公司一直用的镜像仓库是docker registry,但是有个安全问题,就是仓库从web ui的浏览到镜像的拉取都是可以直接使用的,还是放到了公网上,只需要知道你的域名那就是畅通无阻了,可以怎么方便怎么来但是这也太方便了,项目是docker跑的微服务,镜像一拉代码直接拿到手 ,前两天还看到个黑客推了个镜像上去,不能在耽误了,赶紧收拾一下。

2、问题解决

​ 在网上看了一些帖子是在仓库容器运行时加一些参数,刚测试的时候是可以的,后面重启了两次容器之后就突然不行了,这里就把配置贴一下,有需求可以搞一下,用的docker-compose

bash 复制代码
version: '3.1'
services:
  registry:
    image: registry:2
    restart: always
    container_name: registry-srv
    ports:
      - 5000:5000
    volumes:
      - /new_mount/docker/registry:/var/lib/registry
      - /home/app/registry/auth:/auth
    environment:
      REGISTRY_AUTH_HTPASSWD_PATH: /auth/htpasswd
      REGISTRY_AUTH: htpasswd
      REGISTRY_AUTH_HTPASSWD_REALM: "Registry Realm"
    networks:
      - docker_default
  registry-ui:
    image: joxit/docker-registry-ui:static
    restart: always
    container_name: registry-ui
    ports:
      - 18080:80
    environment:
      - REGISTRY_URL=http://registry-srv:5000
      - DELETE_IMAGES=true
    networks:
      - docker_default
networks:
  docker_default:
    external: true

​ registry-ui镜像默认是跑的80,改了一下映射端口,前端使用nginx代理的也是跑的容器,请求头主机配置注释掉了,一打开就报错无法验证sha,这个可以试试怎么回事,我感觉是因为换过仓库的事,htpasswd文件生成可以去网上找一下很多,下面是前端代理的配置。

nash 复制代码
server {
    listen       80;
    listen       8054;
    server_name  registry.xxx.com;
    return 301 https://$server_name$request_uri;
}
server {
    server_name  registry.xxx.com;
    include /etc/nginx/conf.d/include/ssl/oa-ssl;
    location / {
        proxy_pass http://172.26.28.122:18080/;
        add_header Access-Control-Allow-Origin *;
        #proxy_set_header Host $host;
        proxy_set_header X-Real-Ip $remote_addr;
        proxy_set_header X-Forwarded-For $remote_addr;
    }
    location /v2/ {
        proxy_pass http://172.26.28.122:5000;
        add_header Access-Control-Allow-Origin *;
        #proxy_set_header Host $host;
        proxy_set_header X-Real-Ip $remote_addr;
        proxy_set_header X-Forwarded-For $remote_addr;
    }

}

​ 按我的理解来说上面的配置是可以实现仓库加密的,但还是无法验证通过,我觉的是nginx代理的问题,加上容器是走了两层代理,可能是无法携带验证信息了,有空在研究。

​ 天无绝人之路,找到个其他的方法,直接在前端代理添加验证配置,如果是在'/'匹配规则添加的话他只能验证web ui的访问,对镜像的推拉控制是没有用的,必须要把配置放到/v2/这个匹配规则里面,控制后端接口的访问规则才行,具体原理还不知道怎么回事,先实现了再说。这里放了之后compose文件的加密就不用加。

bash 复制代码
    environment:
      REGISTRY_AUTH_HTPASSWD_PATH: /auth/htpasswd
      REGISTRY_AUTH: htpasswd
      REGISTRY_AUTH_HTPASSWD_REALM: "Registry Realm"
      #上面这几行删掉就行
bash 复制代码
    location /v2/ {
        stub_status;
        auth_basic "Auth access Blog Input your Passwd!";
        auth_basic_user_file /etc/nginx/conf.d/htpasswd/docker.conf/htpasswd;
        proxy_pass http://172.26.28.122:5000;
        add_header Access-Control-Allow-Origin *;
        #proxy_set_header Host $host;
        proxy_set_header X-Real-Ip $remote_addr;
        proxy_set_header X-Forwarded-For $remote_addr;
    }

这个破问题还搞了三天

相关推荐
TIF星空32 分钟前
【从0开始在CentOS 9中安装redis】
linux·运维·服务器·经验分享·redis·笔记·centos
元素之窗34 分钟前
CentOS 系统设置与维护教程
linux·运维·centos
ZLY_200436 分钟前
828华为云征文|docker部署kafka及ui搭建
docker·kafka·华为云
EterNity_TiMe_1 小时前
【Linux进程】Linux Shell编程实战:构建简易脚本示例与技巧详解
linux·运维·服务器·学习·centos·bash
三朝看客2 小时前
BClinux docker安装kong和konga
docker·容器·kong
网络研究院2 小时前
微软九月补丁星期二发现了 79 个漏洞
windows·安全·微软·系统·漏洞·版本·更新
Yawesh_best4 小时前
Linux系统使用Docker安装DockerUI并实现远程管理本地容器无需公网IP
linux·tcp/ip·docker
吃面不喝汤664 小时前
如何为子域名配置 Nginx 反向代理到 Flask 应用
运维·nginx·flask
Autter_A34 小时前
Docker容器技术1——docker基本操作
docker·容器·eureka
苍墨穹天5 小时前
windows系统docker装milvus向量数据库
docker·容器·milvus