2021年1月29日金曜日

docker registry を LB 配下で動作させる場合は nginx を挟まなければならない

概要

例えば 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 件のコメント:

コメントを投稿