Connecting from an application

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

  • [cluster name]-rw

  • [cluster name]-ro

  • [cluster name]-r

これらのサービスはKubernetesクラスターによって完全に管理され、 Exposing Postgres Services で説明されているように仮想IPのフォームを実装します。

ヒント

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

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

  • DNS解決 *環境変数

PostgreSQLに接続するための資格情報には、演算子が生成したシークレットを使用できます。

警告

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

DNS解決

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

DNSは、推奨される推奨される発見メソッドです。

環境変数

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

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

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

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

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

秘密

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

  • [cluster name]-superuser

  • [cluster name]-app

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

-app クレデンシャルは、 PostgreSQLクラスターに接続するアプリケーションが使用する必要があるクレデンシャルです。

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