草庐IT

docker registry v2 nginx 安全访问控制

vbbb625 2023-03-28 原文
环境准备:

docker 版本:1.9.1

registry版本:2.2.1


本文之前也有发过一篇自建仓库nginx认证,但是对新出的registry v2版本不适用,特重更一篇。

一、创建相关目录及文件

(1)目录结构

auth
│   ├── domain.crt
│   ├── domain.key
│   ├── nginx.conf
│   └── nginx.htpasswd
├── data

mkdir -p auth mkdir -p data openssl req -newkey rsa:4096 -nodes -sha256 -keyout auth/domain.key -x509 -days 365 -out auth/domain.crt例如:

Country Name (2 letter code) [AU]:China string is too long, it needs to be less than  2 bytes long Country Name (2 letter code) [AU]:CH State or Province Name (full name) [Some-State]:BeiJing Locality Name (eg, city) []:BeiJing       Organization Name (eg, company) [Internet Widgits Pty Ltd]:BeiJing Organizational Unit Name (eg, section) []:BeiJing   Common Name (e.g. server FQDN or YOUR name) []:registry.test.com Email Address []:BeiJing@beijing.com(2)生成对应nginx配置文件

cat <<EOF > auth/nginx.conf upstream docker-registry {       server registry:5000; } server {   listen 443 ssl;   server_name default_server;   # SSL   ssl on;   ssl_certificate /etc/nginx/conf.d/domain.crt;   ssl_certificate_key /etc/nginx/conf.d/domain.key;   # Recommendations from https://raymii.org/s/tutorials/Strong_SSL_Security_On_nginx.html   ssl_protocols TLSv1.1 TLSv1.2;   ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';   ssl_prefer_server_ciphers on;   ssl_session_cache shared:SSL:10m;   # disable any limits to avoid HTTP 413 for large p_w_picpath uploads   client_max_body_size 0;   # required to avoid HTTP 411: see Issue #1486 (https://github.com/docker/docker/issues/1486)   chunked_transfer_encoding on;   location /v2/ {     # Do not allow connections from docker 1.5 and earlier     # docker pre-1.6.0 did not properly set the user agent on ping, catch "Go *" user agents         if (\$http_user_agent ~ "^(docker\/1\.(3|4|5(?!\.[0-9]-dev))|Go ).*\$" )      {               return 404;     }     # To add basic authentication to v2 use auth_basic setting.     auth_basic "Registry realm";     auth_basic_user_file /etc/nginx/conf.d/nginx.htpasswd;     set $test "";         if ($remote_user ~* "^admin?" ) {              set $test "${test}admin";         }         if ($request_method ~* "^(DELETE|PUT)$" ) {              set $test "${test}write";         }         if ($test = "write") {              return 401;         }              ## If $docker_distribution_api_version is empty, the header will not be added.     ## See the map directive above where this variable is defined.     add_header 'Docker-Distribution-Api-Version' 'registry/2.0' always;     proxy_pass                          http://docker-registry;     proxy_set_header  Host              \$http_host;   # required for docker client's sake     proxy_set_header  X-Real-IP         \$remote_addr; # pass on real client's IP     proxy_set_header  X-Forwarded-For   \$proxy_add_x_forwarded_for;     proxy_set_header  X-Forwarded-Proto \$scheme;     proxy_read_timeout                  900;   } } EOF(3)创建登录用户文件

   创建2个用户:

   admin 权限:管理员 可以pull push 等

   readonly 权限: 只有pull 权限

htpasswd -b auth/nginx.htpasswd admin admin htpasswd -b auth/nginx.htpasswd readonly readonly(4)使用docker-compose启动

cat <<EOF > docker-compose.yml nginx:   p_w_picpath: "nginx:latest"   ports:     - 443:443   restart: always   links:     - registry:registry   volumes:     - `pwd`/auth/:/etc/nginx/conf.d registry:   p_w_picpath: registry:2.2.1   ports:     - 127.0.0.1:5000:5000   restart: always   volumes:     - `pwd`/data:/var/lib/registry EOF启动命令:

docker-compose up -d (5)验证 curl -i -k -v https://admin:admin@registry.test.com/v2/ 登录: docker login registry.test.com 查看上传的镜像信息: curl -i -k -v https://admin:admin@registry.test.com/v2/_catalog客户端docker配置

  2种方式

一.修改/etc/default/docker: DOCKER_OPTS="--dns 223.5.5.5 --dns 223.6.6.6 --insecure-registry registry.test.com" 并重启: service docker restart 或者 二. cat domain.crt | sudo tee -a /etc/ssl/certs/ca-certificates.crt 并重启: service docker restart附赠 ansible模块: 自动安装nginx+registry私有仓库创建

地址: https://github.com/vTNT/ansible-docker-registry-v2.git

有关docker registry v2 nginx 安全访问控制的更多相关文章

  1. ruby - 为什么我可以在 Ruby 中使用 Object#send 访问私有(private)/ protected 方法? - 2

    类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc

  2. ruby-on-rails - 在混合/模块中覆盖模型的属性访问器 - 2

    我有一个包含模块的模型。我想在模块中覆盖模型的访问器方法。例如:classBlah这显然行不通。有什么想法可以实现吗? 最佳答案 您的代码看起来是正确的。我们正在毫无困难地使用这个确切的模式。如果我没记错的话,Rails使用#method_missing作为属性setter,因此您的模块将优先,阻止ActiveRecord的setter。如果您正在使用ActiveSupport::Concern(参见thisblogpost),那么您的实例方法需要进入一个特殊的模块:classBlah

  3. ruby-on-rails - 如何优雅地重启 thin + nginx? - 2

    我的瘦服务器配置了nginx,我的ROR应用程序正在它们上运行。在我发布代码更新时运行thinrestart会给我的应用程序带来一些停机时间。我试图弄清楚如何优雅地重启正在运行的Thin实例,但找不到好的解决方案。有没有人能做到这一点? 最佳答案 #Restartjustthethinserverdescribedbythatconfigsudothin-C/etc/thin/mysite.ymlrestartNginx将继续运行并代理请求。如果您将Nginx设置为使用多个上游服务器,例如server{listen80;server

  4. ruby - 续集在添加关联时访问many_to_many连接表 - 2

    我正在使用Sequel构建一个愿望list系统。我有一个wishlists和itemstable和一个items_wishlists连接表(该名称是续集选择的名称)。items_wishlists表还有一个用于facebookid的额外列(因此我可以存储opengraph操作),这是一个NOTNULL列。我还有Wishlist和Item具有续集many_to_many关联的模型已建立。Wishlist类也有:selectmany_to_many关联的选项设置为select:[:items.*,:items_wishlists__facebook_action_id].有没有一种方法可以

  5. ruby - 如何使用 Ruby aws/s3 Gem 生成安全 URL 以从 s3 下载文件 - 2

    我正在编写一个小脚本来定位aws存储桶中的特定文件,并创建一个临时验证的url以发送给同事。(理想情况下,这将创建类似于在控制台上右键单击存储桶中的文件并复制链接地址的结果)。我研究过回形针,它似乎不符合这个标准,但我可能只是不知道它的全部功能。我尝试了以下方法:defauthenticated_url(file_name,bucket)AWS::S3::S3Object.url_for(file_name,bucket,:secure=>true,:expires=>20*60)end产生这种类型的结果:...-1.amazonaws.com/file_path/file.zip.A

  6. Ruby Readline 在向上箭头上使控制台崩溃 - 2

    当我在Rails控制台中按向上或向左箭头时,出现此错误:irb(main):001:0>/Users/me/.rvm/gems/ruby-2.0.0-p247/gems/rb-readline-0.4.2/lib/rbreadline.rb:4269:in`blockin_rl_dispatch_subseq':invalidbytesequenceinUTF-8(ArgumentError)我使用rvm来管理我的ruby​​安装。我正在使用=>ruby-2.0.0-p247[x86_64]我使用bundle来管理我的gem,并且我有rb-readline(0.4.2)(人们推荐的最少

  7. ruby-on-rails - 带 Spring 锁的 Rails 4 控制台 - 2

    我正在使用Ruby2.1.1和Rails4.1.0.rc1。当执行railsc时,它被锁定了。使用Ctrl-C停止,我得到以下错误日志:~/.rvm/gems/ruby-2.1.1/gems/spring-1.1.2/lib/spring/client/run.rb:47:in`gets':Interruptfrom~/.rvm/gems/ruby-2.1.1/gems/spring-1.1.2/lib/spring/client/run.rb:47:in`verify_server_version'from~/.rvm/gems/ruby-2.1.1/gems/spring-1.1.

  8. ruby-on-rails - openshift 上的 rails 控制台 - 2

    我将我的Rails应用程序部署到OpenShift,它运行良好,但我无法在生产服务器上运行“Rails控制台”。它给了我这个错误。我该如何解决这个问题?我尝试更新ruby​​gems,但它也给出了权限被拒绝的错误,我也无法做到。railsc错误:Warning:You'reusingRubygems1.8.24withSpring.UpgradetoatleastRubygems2.1.0andrun`gempristine--all`forbetterstartupperformance./opt/rh/ruby193/root/usr/share/rubygems/rubygems

  9. ruby - 如何安全地删除文件? - 2

    在Ruby中是否有Gem或安全删除文件的方法?我想避免系统上可能不存在的外部程序。“安全删除”指的是覆盖文件内容。 最佳答案 如果您使用的是*nix,一个很好的方法是使用exec/open3/open4调用shred:`shred-fxuz#{filename}`http://www.gnu.org/s/coreutils/manual/html_node/shred-invocation.html检查这个类似的帖子:Writingafileshredderinpythonorruby?

  10. C51单片机——实现用独立按键控制LED亮灭(调用函数篇) - 2

    说在前面这部分我本来是合为一篇来写的,因为目的是一样的,都是通过独立按键来控制LED闪灭本质上是起到开关的作用,即调用函数和中断函数。但是写一篇太累了,我还是决定分为两篇写,这篇是调用函数篇。在本篇中你主要看到这些东西!!!1.调用函数的方法(主要讲语法和格式)2.独立按键如何控制LED亮灭3.程序中的一些细节(软件消抖等)1.调用函数的方法思路还是比较清晰地,就是通过按下按键来控制LED闪灭,即每按下一次,LED取反一次。重要的是,把按键与LED联系在一起。我打算用K1来作为开关,看了一下开发板原理图,K1连接的是单片机的P31口,当按下K1时,P31是与GND相连的,也就是说,当我按下去时

随机推荐