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

アプリケーションは、同じ 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 : クラスターの primary インスタンスを指すサービスの IP アドレス

秘密

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

*[cluster name]-superuser

*[cluster name]-app

シークレットには、ユーザー名、パスワード、および作業中の .pgpass file が含まれています

それぞれ postgres ユーザーとデータベースの 所有者 です。

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

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