はじめに
前回、GitLab に Let's Encrypt で SSL を設定。 で GitLabサーバーにSSLを導入しました。
ここでは ロードバランサー(NLB) を導入したいと思います。
また、今回は SSL もロードバランサーへ移すため、AmazonLinux2023 に GitLab をインストール からこちらの作業を行っても大丈夫です。
事前作業
今回の作業を行う前に以下の準備をしておきます。
セキュリティグループ の作成
NLB用に以下の設定で作成しておきます。
- gitlab-nlb
タイプ | プロトコル | ポート | ソース |
---|---|---|---|
HTTPS | TCP | 443 | 0.0.0.0/0 |
ACM による SSL証明書 の作成
NLB で利用する SSL証明書 を ACM を使って用意しておきます。
バックアップ
現在の状態にいつでも戻せるようにバックアップを取っておきましょう。
$ sudo cp -pi /etc/gitlab/gitlab.rb /etc/gitlab/gitlab.rb_yyyymmdd
構成
ロードバランサーの作成
今回作成するロードバランサーはNLBになります。
ターゲットグループの作成
- EC2 > ターゲットグループ > ターゲットグループの作成
項目 | 値 |
---|---|
ターゲットタイプの選択 | インスタンス |
ターゲットグループ名 | gitlab-nlb |
プロトコル | TCP, ポート:80 |
IP アドレスタイプ | IPv4 |
VPC | GitLabのインスタンスと同じVPC |
ヘルスチェック
項目 | 値 |
---|---|
ヘルスチェックプロトコル | HTTP |
ヘルスチェックパス | /users/sign_in |
ターゲットの登録
ロードバランサーの作成
- EC2 > ロードバランサー > ロードバランサーの作成
- ロードバランサータイプ で Network Load Balancer を作成
基本的な設定
項目 | 値 |
---|---|
ロードバランサー名 | gitlab-nlb |
スキーム | インターネット向け |
IP アドレスタイプ | Ipv4 |
ネットワークマッピング
項目 | 値 |
---|---|
VPC | GitLabのインスタンスと同じVPC |
マッピング | ap-northeast-1a, ap-northeast-1c, ap-northeast-1d |
- サブネット | パブリックサブネットを選択(デフォルトVPCの場合は全てチェックでOK) |
- IPv4 アドレス | AWS によって割り当て済み |
セキュリティグループ
リスナーとルーティング
項目 | 値 |
---|---|
プロトコル | TLS |
ポート | 443 |
デフォルトアクション | gitlab-nlb |
セキュアリスナーの設定
項目 | 値 |
---|---|
セキュリティポリシー情報 | ELBSecurityPolicy-TLS13-1-2-2021-06(推奨) |
デフォルトの SSL/TLS 証明書 | ACMで用意したSSL証明書を指定 |
ALPN ポリシー | None |
セキュリティグループの変更
GitLabに付与しているセキュリティグループの設定を以下に変更します。
タイプ | プロトコル | ポート | ソース |
---|---|---|---|
SSH | TCP | 22 | 接続元IP |
HTTP | TCP | 80 | gitlab-nlbのSecurityGroup |
Elastic Load Balancer 経由へ切り替え
現在、EC2へアクセスができる状態になっていたと思いますが、これをELB経由にしたいと思います。
$ sudo vim /etc/gitlab/gitlab.rb
GitLab に Let's Encrypt で SSL を設定 を行った後の場合、以下のような差分が出ると思います。
$ sudo diff -y --suppress-common-lines /etc/gitlab/gitlab.rb /etc/gitlab/gitlab.rb_yyyymmdd
nginx['listen_port'] = 80 | # nginx['listen_port'] = nil
nginx['listen_https'] = false | # nginx['listen_https'] = nil
# letsencrypt['auto_renew'] = true | letsencrypt['auto_renew'] = true
# letsencrypt['auto_renew_hour'] = 21 | letsencrypt['auto_renew_hour'] = 21
# letsencrypt['auto_renew_minute'] = 30 # Should be a number | letsencrypt['auto_renew_minute'] = 30 # Should be a number o
# letsencrypt['auto_renew_day_of_month'] = "*/7" | letsencrypt['auto_renew_day_of_month'] = "*/7"
ここでは、インスタンス側で有効にしていた Let's Encrypt を無効にしています。
また、nginx[] のところは NLB では HTTPS で受けて、 EC2 側では ポート80 で受けるための設定になります。
もし、AmazonLinux2023 に GitLab をインストール からこちらを実施した場合は以下のような差分が出ると思います。
$ sudo diff -y --suppress-common-lines /etc/gitlab/gitlab.rb /etc/gitlab/gitlab.rb_org
external_url 'https://sample.hengjiu.jp' | external_url 'http://ec2-xxx-xxx-xxx-xxx.ap-northeast-1.compute.
nginx['listen_port'] = 80 | # nginx['listen_port'] = nil
nginx['listen_https'] = false | # nginx['listen_https'] = nil
ELBでSSLを利用するため外部URLに https://<独自ドメイン>
を設定します。
また、nginx[] のところは NLB では HTTPS で受けて、 EC2 側では ポート80 で受けるための設定になります。
修正したら、 gitlab-ctl reconfigure
します。
$ sudo gitlab-ctl reconfigure
[xxxx-xx-xxT14:40:27+00:00] INFO: Started Cinc Zero at chefzero://localhost:1 with repository at /opt/gitlab/embedded (One version per cookbook)
Cinc Client, version 17.10.0
Patents: https://www.chef.io/patents
Infra Phase starting
~~~
Running handlers:
[xxxx-xx-xxT01:52:15+00:00] INFO: Running report handlers
Running handlers complete
[xxxx-xx-xxT01:52:15+00:00] INFO: Report handlers complete
Infra Phase complete, 20/851 resources updated in 01 minutes 53 seconds
gitlab Reconfigured!
gitlab Reconfigured!
が確認できれば更新完了です。
DNS の設定
ドメイン(sample.hengjiu.jp) を NLB と紐付けます。
今回は Route53 でドメイン管理しているので Alias 設定を行います。
確認
ブラウザからアクセスできれば完了です。
おわりに
今回は過去の記事の続きとして作業しましたが、この構成にする場合は EC2 インスタンスはプライベートネットワークに配置した方が良いと思います。
その場合、SSHが直接できないためセッションマネージャ経由などで作業するなどして構築してください。
その他の GitLab に関する投稿
GitLab に関する記事は他にも投稿しているのでよければ読んでもらえたら嬉しいです。
参考