Harbor2.x配置Nginx(SLB)反向代理和报错处理

2020年7月1日17:00:39 发表评论 10,810 ℃

harbor的部署比较简单,基本就是一个命令,这里不做介绍,官网也比较详细。

harbor2.x默认情况下,配置好hostname,部署好以后就可以通过hostname的域名或者IP访问。

但是有时候,服务器前端还有一层代理服务器,比如nginx或slb等,这个时候按照默认的harbor配置,代理以后就无法正常访问。

只需要修改harbor.yml,把https相关的注释,(如果没有注释,http会自动重定向到https,导致多次重定向)然后添加:

external_url: https://docker.amd5.cn # (或者external_url: http://docker.amd5.cn),如果这里是https,nginx代理就需要配置ssl。  

修改配置以后不能安装notary,即不能使用--with-notary参数。然后执行:

#prepare  - -with-clair - -with-chartmuseum

#docker-compose up -d

启动以后,配置好nginx或者slb代理就可以正常访问了。

Harbor2.x配置Nginx(SLB)反向代理和报错处理

如果docker push报错:unauthorized: unauthorized to access repository(unauthorized: authentication required) 或者日志里面报错:unknown blob,编辑 common/config/nginx/nginx.conf , 注释掉所有的 proxy_set_header X-Forwarded-Proto $scheme; 重启即可。(执行prepare后需要再次修改

如果docker push报错:received unexpected HTTP status: 502 Bad Gateway (这种情况我是用了阿里云SLB出现的,nginx反向代理的时候,未出现此问题),主要原因是:

docker login的时候,回话只进行了一次,并且都走了https协议,所以没有出现问题。

而docker push操作,分为2步:

验证: 和login类似,多了步去查你的权限。

push: 这里恰恰出了问题,因为它走了http的协议,相关规则的文件:(https://github.com/docker/distribution/blob/master/registry/api/v2/urls.go)

而重新走了http的内容,会被认为是401的,所以会出了上边的报错。

证书需要购买或者自己生成,下面是nginx配置:

upstream harbor {
    server 192.168.1.222:80 weight=1;
}
server {
    listen      80;
    listen 443 ssl;
    server_name docker.amd5.cn;
    ssl_certificate   /etc/nginx/vhost/ssl/www.amd5.cn.pem; 
    ssl_certificate_key  /etc/nginx/vhost/ssl/www.amd5.cn.key; 
    ssl_session_timeout 5m; 
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2; 
    ssl_prefer_server_ciphers on;
    location / {
        proxy_pass http://harbor;
        proxy_redirect off;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        client_max_body_size 20m;    
        client_body_buffer_size 128k; 
        proxy_connect_timeout 90;   
        proxy_read_timeout 90;      
        proxy_buffer_size 4k;       
        proxy_buffers 6 32k;        
        proxy_busy_buffers_size 64k; 
        proxy_temp_file_write_size 64k; 
    }
}

证书生成,可以参考http://www.amd5.cn/atang_3162.html 证书生成部分。

其他docker镜像仓库部署:

搭建具有认证、TLS的docker registry私有仓库 http://www.amd5.cn/atang_3828.html

使用Nexus3.x搭建Docker私有仓库 http://www.amd5.cn/atang_4286.html

【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: