zoukankan      html  css  js  c++  java
  • Docker Registry V2 with Nginx

    安装 nginx 

    修改/etc/yum.repos.d/nginx.repo

    [nginx]
    name=nginx repo
    baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
    gpgcheck=0
    enabled=1
    

    其中 releasever basearch 到 http://nginx.org/packages/centos/ 地址上去查

    yum install nginx

    配置ssl证书

    注意CN的地址要与你的registry地址一致,可以修改/etc/hosts来绑定一个地址

    修改 /etc/docker/daemon.json

    增加 "insecure-registries":["xxx(CN里写的地址):port"]

    正常启动registry 不需要任何ssl参数,权限交由nginx控制

    docker run -d -p 6000:5000 --restart=always --name registry registry:2.5.1


    配置nginx

    user  root root;
    worker_processes  1;
    
    error_log   /var/log/nginx/error.log debug;
    #pid         /var/log/nginx/nginx.pid;
    
    worker_rlimit_nofile 51200;
    
    events {
        use epoll;
        worker_connections  512;
        multi_accept on;
    }
    
    http {
        include       /etc/nginx/mime.types;
        default_type  application/octet-stream;
    
        log_format  main  '$http_host $remote_user [$time_local] $request '
                          '$status $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" $remote_addr $request_time $upstream_response_time';
    
        access_log  /var/log/nginx/access.log  main;
    
        sendfile       on;
        tcp_nopush     on;
        tcp_nodelay    on;
    
        keepalive_timeout  0;
        #keepalive_timeout  65;
    
        #gzip  on;
    
        upstream registry {
            server tf56:6000;
        }
    
        server {
            listen       8080;
            server_name  registry.lenovo.com;
    
            ssl          on;
            ssl_certificate /root/registry/certs/registry.lenovo.com.crt;
            ssl_certificate_key /root/registry/certs/registry.lenovo.com.key;
            ssl_client_certificate /root/registry/certs/registry.lenovo.com.crt;
    
            # 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;
    
            client_max_body_size 0;
    
            chunked_transfer_encoding on;
    
            location / {
              auth_basic "Registry realm";
              auth_basic_user_file /root/registry/nginx/nginx.htpasswd;
              add_header 'Docker-Distribution-Api-Version' 'registry/2.0' always;
    
              proxy_pass                          http://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  Authorization     ""; # see https://github.com/dotcloud/docker-registry/issues/170
              proxy_read_timeout                  900;
             # proxy_redirect off;
              proxy_set_header  X-Forwarded-Proto $scheme;
              proxy_set_header X-Forwarded-Protocol $scheme;
    
             # proxy_set_header  X-Forwarded-Proto "https";
             # proxy_set_header  X-Forwarded-Protocol "https";
            }
        }
    }
     
    

      

    其中

    /root/registry/nginx/nginx.htpasswd
    生成方法 htpasswd -cb nginx.htpasswd tester1 123456

    登陆验证

    docker login xxxx:port

    curl -i -k -v https://uname:password@xxx:port/v2/_ping

    问题解决:

    502 问题

    nginx后台日志

    connect() failed (111: Connection refused) while connecting to upstream

    而且upstream总是80端口

    修改proxy_pass,这里修改成了http://registry 是一个不存在的地址

    client sent plain HTTP request to HTTPS port while reading client request headers

    peer closed connection in SSL handshake (104: Connection reset by peer) while SSL handshaking,

    或者registry log : registry first record does not look like a TLS handshake

    关闭所有registry的ssl选项,所有SSL控制交给nginx处理

    registry报错 Invalid token

    需要在启动时设置REGISTRY_HTTP_SECRET,所有replica都使用相同的值即可(-e REGISTRY_HTTP_SECRET=mysk)

     registry报错 blob unknown

    后端数据要存放在一个数据源上,比如NFS,ceph

    
    
  • 相关阅读:
    Web 应用程序中的安全向量 – ASP.NET MVC 4 系列
    成员资格、授权 – ASP.NET MVC 4 系列
    数据注解和验证 – ASP.NET MVC 4 系列
    表单和 HTML 辅助方法– ASP.NET MVC 4 系列
    模型(Model)– ASP.NET MVC 4 系列
    Razor 视图引擎 – ASP.NET MVC 4 系列
    视图(View) – ASP.NET MVC 4 系列
    控制器(Controller) – ASP.NET MVC 4 系列
    简介 – ASP.NET MVC 4 系列
    一般处理程序处理图片(动态给图片加上水印、保存缩略图、验证码)
  • 原文地址:https://www.cnblogs.com/xuchenCN/p/6768902.html
Copyright © 2011-2022 走看看