Connecting from an application

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

サービスとその管理方法の詳細については、 Service management セクションを参照してください。

Tip

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

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

  • DNS解決

  • 環境変数

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

注釈

接続プーラーとしてPgBouncerを利用し、アプリケーションとPostgreSQLクラスターの間にアクセスレイヤーを作成する方法については、 Connection Pooling を参照してください。

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]-app .spec.bootstrap.initdb.secret.name を介して既存のシークレットを提供していない場合

  • [cluster name]-superuser .spec.enableSuperuserAccesstrue に設定されており、.spec.superuserSecret を使用して別のシークレットを指定していない場合

各シークレットには次のものが含まれます。

URIで使用されるFQDNは、 KUBERNETES_CLUSTER_DOMAIN 構成パラメーターで指定されたKubernetesクラスタードメインを使用して計算されます。詳細については、 the operator configuration documentation を参照してください。

-app 資格情報は、PostgreSQLクラスターに接続するアプリケーションが使用するもので、データベースを 所有 しているユーザーに対応します。

-superuser のものは、管理目的でのみ使用されることになっており、 postgres ユーザーに対応します。

注釈

ネットワーク上のスーパーユーザーのアクセスはデフォルトで無効になっています。