部署harbor1.2.0開啟ldap驗證


就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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM