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.enableSuperuserAccessがtrueに設定されており、.spec.superuserSecretを使用して別のシークレットを指定していない場合
各シークレットには次のものが含まれます。
ユーザー名
パスワード
RWサービスへのホスト名
ポート番号
データベース名
作業用 .pgpass file
URIで使用されるFQDNは、 KUBERNETES_CLUSTER_DOMAIN
構成パラメーターで指定されたKubernetesクラスタードメインを使用して計算されます。詳細については、
the operator configuration documentation を参照してください。
-app
資格情報は、PostgreSQLクラスターに接続するアプリケーションが使用するもので、データベースを
所有 しているユーザーに対応します。
-superuser のものは、管理目的でのみ使用されることになっており、
postgres ユーザーに対応します。
注釈
ネットワーク上のスーパーユーザーのアクセスはデフォルトで無効になっています。