アプリケーションから接続する

アプリケーションは、同じKubernetesクラスター内のCloudNativePGによって作成されたサービスで動作することになっています。

  • [cluster name]-rw

  • [cluster name]-ro

  • [cluster name]-r

これらのサービスはKubernetesクラスターによって完全に管理され、

:ref:``microservice` タイプ<microservice タイプ>` で説明されている形式の仮想IPを実装します。

ヒント

アプリケーションでこれらのサービスを使用し、特定のPostgreSQLインスタンスに直接接続しないことを強くお勧めします。後者はクラスターの有効期間中に変更される可能性があります。

これらのサービスは、次の方法でアプリケーションで使用できます。

  • DNS解決

*環境変数

PostgreSQLに接続するための資格情報には、オペレーターによって生成されたシークレットを使用できます。

警告

オペレーターは、[cluster name]-any という名前の別のサービスを作成します。そのサービスは、PostgreSQLインスタンスの検出を管理するために内部で使用されます。アプリケーションで直接使用することは想定されていません。

DNS解決

Kubernetes DNSサービスを使用して、特定のサーバーをポイントできます。オペレーターはKubernetes DNSサービスを必要とします。アプリケーションがPostgreSQLクラスターと同じ名前空間にデプロイされている場合、サービスの名前を使用してこれを行うことができます。 PostgreSQLクラスターが別の名前空間にある場合、完全修飾子 service-name.namespace-name を使用できます。

DNSは、推奨される検出方法です。

環境変数

PostgreSQL クラスターが含まれるのと同じ名前空間にアプリケーションをデプロイする場合、環境変数を使用してデータベースに接続することもできます。

たとえば、PostgreSQLクラスターの名前がpg-database であるとします。アプリケーションで次の環境変数を使用できます。

  • PG_DATABASE_R_SERVICE_HOST : 読み取り専用ワークロードのすべてのPostgreSQLインスタンスを指すサービスのIPアドレス

  • PG_DATABASE_RO_SERVICE_HOST : クラスターのすべてのホットスタンバイレプリカをポイントするサービスのIPアドレス

  • PG_DATABASE_RW_SERVICE_HOST : クラスターのプライマリインスタンスを指すサービスのIPアドレス

秘密

PostgreSQL オペレーターは、デプロイするすべての PostgreSQL クラスターに対して 2 つの basic-auth タイプのシークレットを生成します。

  • [cluster name]-superuser

  • [cluster name]-app

シークレットには、それぞれpostgres ユーザーとデータベースの所有者のユーザー名、パスワード、および作業中の .pgpass file が含まれています。

-app 資格情報は、PostgreSQLクラスターに接続するアプリケーションで使用する必要があります。

-superuser は管理目的でのみ使用されることになっています。