Private Service Connect エラーのトラブルシューティング
宛先データベースに接続できません: EOF
接続テストを実行すると、[DATABASE] unable to connect to the destination database: EOF
エラー メッセージが返されます。
考えられる原因: サービス アタッチメントが正しく構成されていません。
試すことができる操作: サービス アタッチメントの Terraform 構成ファイルで、enable_proxy_protocol
が false
に設定されていることを確認します。プロキシ プロトコルは、NGINX や Apache などの HTTP サーバーに対してのみサポートされています。
gcloud
を使用して Private Service Connect の設定を作成する場合は、プロキシ プロトコルはデフォルトで無効になります。
接続タイムアウト、接続拒否
接続テストの実行が失敗するか、タイムアウトします。これは、Private Service Connect の設定内でルーティングが正しく構成されていないことが原因である可能性が高いです。これにはいくつかの理由が考えられます。
考えられる原因: Private Service Connect NAT CIDR 範囲が、踏み台が配置されている Private Service Connect サブネット(具体的には踏み台 VM nic0
インターフェース)にアクセスできるようにするファイアウォール ルールがありません。
試すことができる操作: 組織のポリシーで、Private Service Connect プロデューサーを設定するための Terraform スクリプトのサンプルで定義されている psc_sp_in_fw
ファイアウォール ルールなど、内部ファイアウォール ルールが制限されていないことを確認します。
考えられる原因: プロキシが停止している。指定されたポートにリスナーがないため、接続がハングします。
試すことができる操作: 踏み台 VM への SSH 接続を確立し、次のコマンドを使用してプロキシを検索できます。
netstat -tunalp | grep PORT
コマンドに対するレスポンスを分析します。
レスポンスが空の場合、プロキシは停止しています。次のコマンドを実行してみてください。
sudo su; cd /
を実行し、sudo dpkg -s dante-server
を実行して Dante サーバーがインストールされているかどうかを確認します。プロキシがインストールされている場合は、次のメッセージが表示されます。
Status: install ok installed
プロキシがインストールされていない場合は、ルーターがないことが原因と考えられます。ルーターを追加し、
apt-get install dante-server
を実行してプロキシをダウンロードできるかどうかを確認します。
プロキシが実行されていて、指定されたポートでリッスンしている場合は、次の手順でプロキシへの接続を開いてみましょう。
PostgreSQL クライアントをインストールします。
sudo apt-get install postgresql-client
。PostgreSQL データベースに接続します。
psql -h 127.0.0.1 -p PORT -U DBUSERNAME -W
(パスワードの入力を求められます)。次のように置き換えます。
PORT
: データベースのポート番号。DBUSERNAME
: PostgreSQL データベースへの接続に使用するユーザー名。
telnet クライアントをインストールします。
sudo apt-get install telnet
telnet クライアントに接続します。
telnet 127.0.0.1 PORT
PORT
は、データベースのポート番号に置き換えます。
コマンドの結果に応じて、次の対応を行います。
コマンドで接続を開くことができない場合は、プロキシ ログを調べて根本原因を特定してみてください。根本原因は、AlloyDB for PostgreSQL クラスタの設定によって異なります。
telnet を使用して接続が開かれ、ネイティブ クライアントでハングする場合は、踏み台 IP アドレスのルーティングに問題がある可能性があります。VM で、ターミナルに
ip route
と入力します。セカンダリnic
(nic1
、DB_SUBNETWORK_GATEWAY
IP アドレス)を使用して AlloyDB for PostgreSQL クラスタのプライベート IP アドレスに接続を転送するルーティング ルールが見つかるかどうかを確認します。
考えられる原因: サービス アタッチメントが、Database Migration Service からのエンドポイント接続を受け入れません。サービス アタッチメントには、承認されたプロジェクトのリストが保持されます。このリストに Database Migration Service プロジェクトは含まれていません。
試すことができる対応: この問題を解決するには、次のいずれかをお試しください。
Google Cloud コンソールで、[Private Service Connect] に移動します。
[公開サービス] タブで、サービス アタッチメントの Database Migration Service からの接続を承認します(保留中の場合)。
リクエスト元のプロジェクトを、サービス アタッチメントの許可リストに登録します(拒否された場合)。
Terraform で許可リストに登録されたプロジェクトを追加する方法については、Terraform のドキュメントをご覧ください。
gcloud
で許可リストに登録されたプロジェクトを追加する方法については、gcloud リファレンス ドキュメントをご覧ください。
それでも問題が解決しない場合は、接続プロファイルを再作成します。
Private Service Connect 接続に関連付けられている接続プロファイルを削除し、再作成します。