概要
例えば ELB や F5BIG-IP などのロードバランサを使って docker registry を動作させようとします
その場合にロードバランサ側で SSL アクセラレータを使って 443 -> 5000 などのバランシングをすると思います
その場合には間に nginx を挟んでヘッダの調整をしないとうまく動作しないことがあるようです
環境
- Ubuntu 18.04
- docker registry 2.7.2
- nginx 1.14.0
- docker 20.10.2
自分が遭遇した現象
docker push 時に止まり何度かリトライしたあとで 503 が返却されました
docker registry のログを見ても成功のログしか出ておらずおそらくロードバランサとの相性が悪いのだと思います
docker registry の起動
mkdir -p /mnt/registry
docker run -d -p 5000:5000 --restart=always --name registry -v /mnt/registry:/var/lib/registry registry:2
nginx の起動
apt -y install nginx
vim /etc/nginx/sites-enabled/default
server {
listen *:80;
server_name your.domain.com;
server_tokens off;
client_max_body_size 0;
chunked_transfer_encoding on;
location / {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Forwarded-Ssl on;
proxy_read_timeout 900;
proxy_cache off;
proxy_buffering off;
proxy_request_buffering off;
proxy_http_version 1.1;
proxy_pass http://localhost:5000;
}
}
ロードバランサ側の設定
- SSL アクセラレータを ON にする
- 443 -> 80 にバランシングする
- ロードバランサの IP などに対して A レコードなどを DNS に設定する
動作確認
docker login して問題なく push できるか確認してみましょう
最後に
proxy_set_header
などの設定がないと registry 側が接続を中断しているのかなと思います
0 件のコメント:
コメントを投稿