• 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

    
    
  • 相关阅读:
    hdu 1042 N!
    hdu 1002 A + B Problem II
    c++大数模板
    hdu 1004 Let the Balloon Rise
    hdu 4027 Can you answer these queries?
    poj 2823 Sliding Window
    hdu 3074 Multiply game
    hdu 1394 Minimum Inversion Number
    hdu 5199 Gunner
    九度oj 1521 二叉树的镜像
  • 原文地址:https://www.cnblogs.com/xuchenCN/p/6768902.html
Copyright © 2020-2023  润新知