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;
    }

这个破问题还搞了三天

相关推荐
Java陈序员6 小时前
轻量强大!一款现代化的 Kubernetes 集群管理与监控工具!
云原生·容器·kubernetes
爱吃橘子橙子柚子1 天前
3CPU性能排查总结(超详细)【Linux性能优化】
运维·cpu
Sheffield2 天前
Docker的跨主机服务与其对应的优缺点
linux·网络协议·docker
Sheffield2 天前
Alpine是什么,为什么是Docker首选?
linux·docker·容器
马艳泽2 天前
win10下运行Start Broker and Proxy报错解决
docker
用户962377954483 天前
VulnHub DC-3 靶机渗透测试笔记
安全
舒一笑3 天前
程序员效率神器:一文掌握 tmux(服务器开发必备工具)
运维·后端·程序员
NineData3 天前
数据库管理工具NineData,一年进化成为数万+开发者的首选数据库工具?
运维·数据结构·数据库
用户13573999256603 天前
Windows 从 0 搭建 WSL2 原生 AI 开发环境:Codex + Docker + VSCode
docker
vi_h3 天前
在 macOS 上通过 Docker 安装并运行 Ollama(详细可执行教程)
macos·docker·ollama