${OVERLEAF_SITE_URL}/git/<project id> を通じてクローンやプッシュを行います。Ayakaleaf Pro Pod がそれらのリクエストを git-bridge に転送し、git-bridge はプロジェクトの内容と履歴を取得するために Pod を呼び出します。これを有効にすると MCP サーバー も有効になり、GitHub、GitLab、Gitea、Dropbox の同期にも必要です。
このページは、Kubernetes の使用 のシングルレプリカ構成のインストールを拡張するものです。複数のレプリカについては、水平スケーリング を参照してください。
1
git-bridge をデプロイする
45-git-bridge.yaml
10.96.100.80 は、クラスターの Service CIDR 内の空いているアドレスである必要があります(kubeadm のデフォルトは 10.96.0.0/12)。2
Ayakaleaf Pro から git-bridge を参照する
30-config.yaml に追加します。30-config.yaml (additions)
3
プロジェクトをクローンする
Account Settings で Git 認証トークンを作成し、次を実行します。ユーザー名には
git、パスワードにはトークンを使用します。マニフェストがこの形になっている理由
GIT_BRIDGE_HOSTに固定の ClusterIP を使用。Ayakaleaf Pro イメージ内の nginx は、Docker の組み込み DNS である127.0.0.11をリゾルバーに設定して/git/を転送します。Kubernetes ではそこに DNS サーバーが存在しないため、git-bridgeのようなホスト名では502で失敗し、/var/log/nginx/error.logに “git-bridge could not be resolved” と記録されます。IP アドレスであれば名前解決は不要です。overleaf-internal。git-bridge は Ayakaleaf Pro Pod のポート3000(web API)と3100(履歴)を必要とします。別の ClusterIP Service を使うことで、これらのポートをクラスター内に留めます。NodePort Service に追加すると、すべてのノードで公開されてしまいます。enableServiceLinks: false。Servicegit-bridgeがあると、Kubernetes は Pod にGIT_BRIDGE_PORT=tcp://10.96.100.80:8000を追加します。git-bridge はGIT_BRIDGE_PORTを待ち受けポートとして読み込むため、MalformedJsonException ... path $.portで停止してしまいます。- 専用のボリュームを持つ 1 つのレプリカ。git-bridge はクローンされたプロジェクトごとに git リポジトリをディスク上に保持し、2 つ同時に実行してはいけません。そのボリュームはバックアップしてください。
Kubernetes でのテスト結果
Kubernetes 1.37 上で、HAProxy の背後に 3 つのレプリカを配置し、git-bridge をoverleaf-0 の sibling とした構成で、Git 連携のエンドツーエンドテストに合格しました(19 ケース)。nginx が GIT_BRIDGE_HOST と GIT_BRIDGE_PORT を使用せざるを得ないように git-bridge をポート 8001 に移した状態でも合格しています。対象は、アカウント設定の Git トークン、エディターのクローンコマンド、クローン・プッシュ・プル、バイナリファイルとフォルダー、名前の変更と削除、古い状態からのプッシュの拒否、ロールによるアクセス(招待された編集者とリンク経由の編集者はプッシュ可能、閲覧者とレビュアーはクローンのみ、アクセス権のないユーザーは拒否)、誤ったトークンと削除されたトークンの拒否、nginx の背後に保たれる git-bridge の内部ルート、停止されたアカウントです。Git 認証トークンそのもの(生成、一覧表示、ユーザーあたりの上限、削除、有効期限、git-bridge が web に問い合わせるチェック、停止・削除されたアカウントのトークン)は、レプリカ 1 つで合格しています(16 ケース)。
Q&A
git clone が 502 を返す。
git clone が 502 を返す。
回答:
GIT_BRIDGE_HOST を確認してください。上記のとおり、git-bridge Service の名前ではなく IP アドレスである必要があります。kubectl -n overleaf exec deploy/overleaf -- tail /var/log/nginx/error.log で原因を確認できます。
