これで可能になること
1. ReplitでTunnelを作成する
- Replitで、ワークスペースセレクターを使用してプロジェクトを所有するワークスペースを選択します。Settings → Workspace overview を開き、Tunnelsまでスクロールします。

ワークスペース設定でTunnelsセクションを開きます。
- Create tunnel をクリックし、わかりやすい名前を入力します。

Tunnelを作成します。
- Save your enrollment key ダイアログで、Tunnel ID と Enrollment key の横にあるコピーボタンを使用します。I’ve saved my key をクリックする前に、登録キーを承認済みのシークレットマネージャーに保存してください。キーは一度しか表示されず、このダイアログを閉じると再度確認することはできません。

一度だけ表示される登録キーのダイアログ。このスクリーンショットでは、キーは意図的に非表示にしています。
- Settings → Workspace overview → Tunnels を開き、Tunnelを選択します。IDはTunnel名の下にコピーボタン付きで表示されます。コネクターがオンラインになる前は、Complete tunnel setup パネルにDockerコマンドが表示されます。登録キーのプレースホルダーを、保存したキーに置き換えてください。

Complete tunnel setup からDockerコマンドをコピーします。
RPTUN_TUNNEL_REF と RPTUN_ENROLL_ADDR の完全な値を tunnelRef と enrollAddr にコピーします。コマンドの最終行にあるコンテナイメージを image にコピーします。完全なTunnel参照は、Tunnel名の下に表示される短いTunnel IDとは異なります。登録キーは、セットアップコマンドからではなく、一度だけ表示されるキーのダイアログから取得します。
Dockerコマンドは、プライベートサービスを名前解決して到達できるホスト上で実行してください。Kubernetesの場合は、下記のHelmチャートを使用します。
2. Helmでコネクターをデプロイする
このサンプルチャートは、お客様側のコネクターをKubernetes上で実行します。お使いのクラスターの標準に合わせて調整し、本番環境に展開する前に非本番環境で検証してください。チャートファイルを作成する
次のディレクトリ構成を作成します:replit-tunnel-connector/Chart.yaml
replit-tunnel-connector/values.yaml
replit-tunnel-connector/templates/deployment.yaml
Tunnelを設定する
namespaceを作成し、承認済みのシークレット管理プロセスを通じて登録キーをプロビジョニングします。この例では、namespacereplit-tunnels に、replit-tunnel-enrollment という名前のSecretと enrollment-key というフィールドが存在することを前提としています。登録キーをHelmのvalues、ソース管理、--set 引数に含めないでください。
customer-values.yaml — 自分のTunnelの生成されたセットアップコマンドを使用して、3つのプレースホルダーを置き換えます:
レンダリングとインストール
helm と kubectl が対象のKubernetesクラスターに向けて設定されている状態で、customer-values.yaml とチャートディレクトリがあるディレクトリから次のコマンドを実行します。namespaceとSecretは事前に存在している必要があります:
Recreate 戦略で実行するため、更新時にはダウンタイムが発生します。公開ServiceやLoadBalancerは作成せず、ヘルスプローブも定義しません。Kubernetesのreadinessだけでは、Tunnelの接続性は証明されません。Replitで Online を確認し、下記のプロジェクトShellテストを完了してください。
本番環境で使用する前に、リソース、CPUアーキテクチャ、書き込み可能な状態の必要性、セキュリティコンテキスト、再起動時の動作、アウトバウンドネットワーク要件を検証してください。コネクターは、プライベートサービスのDNSホスト名とTCPポートに到達できる必要があります。コネクターの完全なエグレス要件はReplitにお問い合わせください。
トラブルシューティングのために、ログをローカルで確認し、共有する前に認証情報とプライベートな情報を削除してください:
3. コネクターがオンラインであることを確認する
Settings → Workspace overview → Tunnels に戻り、Tunnelを選択します。Statusカードに Online と表示されるまで待ちます。オフラインのままの場合は、登録設定、アウトバウンドネットワークアクセス、Podイベント、コネクターのログを確認してください。
Online はコネクターが接続されていることを意味します。アプリケーショントラフィックが発生する前は Never と表示されるのが正常です。
4. プライベートエンドポイントを登録する
- Tunnelの詳細ページで、Endpointsセクションの Add endpoint をクリックします。
- わかりやすい名前と、プライベートな宛先のホスト名およびTCPポートを入力します。例:database.internal.example:5432
- コネクターのネットワークから名前解決できるホスト名を使用してください。現在のUIはIPアドレスによる宛先をサポートしていません。
- Test connection を選択します。緑のチェックマークは、コネクターが宛先に到達できることを意味します。
- エンドポイントを追加し、テーブルに表示されることを確認します。

接続テストの成功:Destination の横の緑のチェックマークは、コネクターがサービスに到達できることを示します。

保存されたRedisエンドポイント。コネクターは Online、宛先は Reachable です。
5. ReplitプロジェクトのShellでエンドポイントの名前解決を検証する
ワークスペースセレクターを使用してTunnelを所有するワークスペースに戻り、そこでプロジェクトを開き、プロジェクトエディターの Shell タブを開きます。以下のチェックは、スタンドアロンのチャットではなく、このShellで実行してください。ホスト名が名前解決されることを確認する
エンドポイントの Destination フィールドにあるホスト名を、ポートやURLスキームを付けずに使用します:サービス接続をテストする
通常のTLSおよび認証要件に従い、サービスのネイティブクライアントを使用して軽量なリクエストを送信します。Redisの場合:6379 はRedisのデフォルトポートです。登録したエンドポイントのポートに合わせて、必要に応じて置き換えてください。
期待される結果:PONG。これはRedisのアプリケーションレベルの PING であり、ICMPのネットワークpingではありません。

プロジェクトShellでのホスト名の名前解決と、Redisからの正常な PONG。

Redisリクエスト成功後のTunnelアクティビティ。
6. 登録キーを管理する
Tunnelダッシュボードに戻り、Tunnel名の横にある3点リーダーメニューを開いて Manage enrollment key を選択します。
登録キー管理を開きます。

有効なキーの一覧と利用可能なアクション。
登録キーを追加する
空きスロットがある場合は Add enrollment key を選択します。初期セットアップ時と同じ Save your enrollment key ダイアログが開きます。新しいキーをすぐにコピーし、安全に保存してください。キーは一度しか表示されません。 両方のキースロットが使用中の場合は、続行する前に、失効または置き換えるキーを特定してください。むやみにキーを失効させないでください。Retry key delivery は中断されたリクエスト用であり、すでに配信されたキーを再表示するためのものではありません。登録キーを失効させる
対象のキーで Revoke を選択し、選択したキーの詳細を確認して、Confirm selected key revocation を選択します。これにより、そのキーを使用した今後の登録がブロックされます。
選択したキーの失効内容を確認し、確定します。

失効後、有効なキーの数が更新されます。確立済みのコネクターは引き続き Online の場合があります。
キー変更後にコネクターを更新する
承認済みのシークレットマネージャーを通じて新しいキーをプロビジョニングします。Secretの更新後にコネクターのデプロイメントを再起動します:Recreate 戦略ではダウンタイムが発生することを見込んでください。失効だけで既存の接続が終了するとは想定しないでください。
7. 切断とクリーンアップ
コネクターが停止すると、Tunnelは Offline になり、エンドポイントに到達可能であるとみなすべきではありません。
コネクターの切断後、Tunnelは Offline、エンドポイントは Unreachable になります。