Connecting from an application ============================== .. raw:: html アプリケーションは、同じKubernetesクラスター内のCloudNativePGによって作成されたサービスで動作することになっています。 サービスとその管理方法の詳細については、 :ref:`Service management ` セクションを参照してください。 .. tip:: アプリケーションでこれらのサービスを使用し、特定のPostgreSQLインスタンスに直接接続することを強くお勧めします。後者はクラスターの有効期間中に変更される可能性があります。   これらのサービスは、次の方法でアプリケーションで使用できます。 - DNS解決 - 環境変数 PostgreSQLに接続するための資格情報には、オペレーターによって生成されたシークレットを使用できます。 .. Note:: 接続プーラーとしてPgBouncerを利用し、アプリケーションとPostgreSQLクラスターの間にアクセスレイヤーを作成する方法については、 :ref:`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.enableSuperuserAccess`` が\ ``true`` に設定されており、\ ``.spec.superuserSecret`` を使用して別のシークレットを指定していない場合 各シークレットには次のものが含まれます。 - ユーザー名 - パスワード - RWサービスへのホスト名 - ポート番号 - データベース名 - 作業用 `.pgpass file `_ - `uri `_ - `jdbc-uri `_ - `fqdn-uri `_ - `fqdn-jdbc-uri `_ URIで使用されるFQDNは、 ``KUBERNETES_CLUSTER_DOMAIN`` 構成パラメーターで指定されたKubernetesクラスタードメインを使用して計算されます。詳細については、 :ref:`the operator configuration documentation ` を参照してください。 ``-app`` 資格情報は、PostgreSQLクラスターに接続するアプリケーションが使用するもので、データベースを *所有* しているユーザーに対応します。 ``-superuser`` のものは、管理目的でのみ使用されることになっており、 ``postgres`` ユーザーに対応します。 .. Note:: ネットワーク上のスーパーユーザーのアクセスはデフォルトで無効になっています。