就harbor本身部署来说是非常简单的,之前写过详细步骤,这里不再重复。

这里主要是总结一下部署当中遇到的问题,以及如何开启ldap验证。

harbor默认是通过http通信的,当然也支持https,但是需要配置,不太方便。docker默认是通过https通信的。所以在默认情况下,docker跟harbor是不能直接通信的,常用的办法有几种:

  • 在docker客户端修改docker启动参数,添加--insecure-registry=harbor.oupeng.com
  • 在harbor服务端开启https
  • 使用nginx或haproxy代理,在代理上开启https

如果是为了简单方便,而且客户端也可以重启docker,那么直接使用第一种就好。

如果docker客户端服务器上已经跑了各种容器,不能轻易重启docker服务,那么就该使用下面两种了。

如果你有现成的https证书,又有现成的代理服务器,那么直接使用代理就好了,既不用修改客户端,也不用修改服务端。

这是我的nginx代理配置:

# vim /usr/local/nginx/conf/vhosts/harbor.oupeng.com.conf

upstream harbor-oupeng-com {
server 122.14.206.203 weight=10 max_fails=3 fail_timeout=10;
} server {
listen 80;
server_name harbor.oupeng.com; location / {
rewrite ^(.*)$ https://$host$1 permanent;
} access_log /usr/local/nginx/logs/harbor.oupeng.com.access.log json;
error_log /usr/local/nginx/logs/harbor.oupeng.com.error.log; } server {
listen 443 ssl;
server_name harbor.oupeng.com; ssl on;
ssl_certificate /usr/local/nginx/conf/keys/oupeng.com.pem;
ssl_certificate_key /usr/local/nginx/conf/keys/oupeng.com.key;
ssl_session_timeout 10m;
ssl_protocols SSLv3 TLSv1;
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
ssl_prefer_server_ciphers on; access_log /usr/local/nginx/logs/harbor.oupeng.com.ssl.access.log json;
error_log /usr/local/nginx/logs/harbor.oupeng.com.ssl.error.log error; location / {
proxy_pass http://harbor-oupeng-com;
proxy_next_upstream error http_502 http_503 http_504 timeout;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Real-Port $remote_port;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 0;
client_body_buffer_size 128k;
proxy_connect_timeout 600;
proxy_send_timeout 600;
proxy_read_timeout 600;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
break;
}
}

使用代理之后出现了两个问题:

1、push镜像中途中断报EOF错误。

解决办法:在registry的配置文件里添加一个参数relativeurls: true

# vim /docker/harbor/common/config/registry/config.yml
...
http:
addr: :5000
relativeurls: true
secret: placeholder
debug:
addr: localhost:5001
... # docker-compose down
# docker-compose up -d

2、push镜像中途中断报413 Request Entity Too Largeconnection reset by peer错误。

每次push到一个固定的大小中断,很明显是有哪里设置了限制,由于加代理之前使用正常,所以问题应该在代理的设置上。

解决办法:修改nginx的参数client_max_body_size 0;,这个参数用来限制上传文件大小,设置为0表示不限制。可以查看上面的配置。

以上完成就可以使用admin账户正常pull/push镜像了。


配置LDAP验证

这里也踩到两个坑,按照官方guide修改配置文件auth_mode = ldap_auth,然后添加ldap相关搜索信息,重启harbor。

本以为就可以用ldap账户登录了,尝试登录了一下,发现不行。查看日志,提示验证方式依然为db_auth,也就是本地数据库验证。

后来发现,要使ldap生效,要确认两个文件的设置正确:

# cat /docker/harbor/common/config/adminserver/env
...
AUTH_MODE=ldap_auth
... # cat /docker/harbor/data/config/config.json
...
"auth_mode": "ldap_auth",
...

然而修改配置文件只改变了第一个文件,因此配置没生效。手动修改第二个文件,然后再次重启harbor。

这下好了吧?然而,并没有。

把源码clone下来随意浏览了一下,无意中看到了一张图:

难道要在UI上配置?试试。

竟然好了...配置文件敢情是假动作。


然后,又出现了另外一个问题。在UI上可以正常登陆,但是在终端上无法docker login xxx,就提示来看,是https通信问题。

经过一番排查,最后发现是token验证问题。解决办法,修改token服务的URL协议为https即可。

# vim /docker/harbor/common/config/registry/config.yml
...
auth:
token:
issuer: harbor-token-issuer
realm: https://harbor.oupeng.com/service/token
rootcertbundle: /etc/registry/root.crt
service: harbor-registry
... # docker-compose down
# docker-compose up -d

最新文章

  1. filterHTML
  2. <<Windows via C/C++>>学习笔记 —— 线程优先级【转】
  3. SQL Server 2012 AlwaysOn 亲身实历记
  4. sqlite3 根据实体自动生成建表语句
  5. jquery多次上传同一张图片
  6. 启动管理软件服务器时,提示midas.dll错误
  7. windows创建虚拟界面
  8. C#学习日志 day 2 plus ------ hyper-V 开启方法
  9. Angulajs 表单的ng-model绑定
  10. 特性(Attributes)
  11. PHP链接Redis
  12. angular嵌入注入服务实例
  13. python基础3 字符串常用方法
  14. echo 与 printf的区别与联系
  15. sqflite插件简单使用 key======================
  16. vuejs2+webpack2+vuxui2多页面架手脚,支持二级目录
  17. linux查看日志
  18. LeetCode(99):恢复二叉搜索树
  19. socket 中午吃的啥 socket 并发服务器 fork
  20. UNIX环境高级编程 第8章 进程控制

热门文章

  1. Java基础—面向对象
  2. 20155327 2017-2018-2《Java程序设计》课程总结
  3. 汇编 循环位移指令 ROL, 循环位移指令 ROR
  4. adb连接手机的两种方式
  5. java拦截器(Interceptor)学习笔记
  6. Edit Distance问题在两种编程范式下的求解
  7. python 连接 hive 的 HiveServer2 的配置坑
  8. http-cache浏览器缓存
  9. 基于tensorflow使用全连接层函数实现多层神经网络并保存和读取模型
  10. PHP学习 类型 变量 常数 运算符