ページの先頭行へ戻る
Enterprise Postgres 17 オペレーターユーザーズガイド

4.8.1 自動生成の証明書を利用する場合

4.8.1.1 証明書の作成方法

オペレーターが証明書を自動的に生成し、コンテナ間の通信をMTLSにすることで安全性を向上することができます。

Kubernetes環境にcert-managerがインストールされている場合はcert-managerを利用し、cert-managerがインストールされていない場合はコンテナ内のopensslコマンドを利用して証明書を生成します。

証明書が自動生成される場合、デフォルトのPostgreSQLへの接続方法は相互認証TLS通信のみです。

ユーザーごとに認証方法を変更する場合には、spec.fepChildCrVal.customPgHbaでユーザーごとの接続方法を定義してください。

証明書の自動生成機能を変更するには下記のConfigMap“fepopr-cert-methood”をオペレーターのインストール前に作成してください。data.fepopr-cert-methodには、cert-manager、openssl、disableを指定することができます。証明書の自動生成機能を無効にする場合は、disableを記載します。

$ cat > /tmp/cert-method.yaml <<EOF
kind: ConfigMap
apiVersion: v1
metadata:
  name: fepopr-cert-method
immutable: true
data:
  fepopr-cert-method: disable
EOF

$ kubectl -n <namespace> apply -f /tmp/cert-method.yaml

また、手動で作成した証明書を利用する場合は、“4.8.2 独自の証明書を利用する場合”を参照してください。

独自の証明書を利用する場合は、証明書の自動生成機能を無効にしてください。

4.8.1.2 クライアント証明書の作成方法

証明書の自動生成機能では、データベース管理のためのシステムユーザーの証明書を自動生成します。データベースに接続する一般ユーザーの証明書を作成する場合は次の手順を参照してください。

ここでは、クライアントコンテナにマウントする証明書が格納されたSecretリソースを作成する方法を説明します。作成されたSecretリソースをクライアントのPodにマウントして、証明書認証でFEPClusterに接続するために利用することができます。

証明書の生成にcert-managerを利用する場合
  1. Issuerリソース“<namespace>-ca-issuer”があることを確認します。

  2. Certificateリソースのテンプレートを作成します。

    $ cat mydbuser-cert.yaml
    apiVersion:cert-manager.io/v1
    kind:Certificate
    metadata:
    name: "<fepclustername>-<username>-cert"
    namespace: "<namespace>"
    spec:
    commonName: "< username >"
    issuerRef:
    name: <namespace>-ca-issuer
    secretName: "<fepclustername>-<username>-cert"
  3. Certificateリソースをアプライします。

    $ kubectl apply -f mydbuser-cert.yaml
証明書の生成にopensslを利用する場合
  1. Secret“fepopr-root-secret”に格納されたCA証明書を取得します。

    $ kubectl -n <namespace> get secret fepopr-root-secret-o jsonpath='{.data.tls\.key}' | base64 -d > <namespace>-ca.key
    
    $ kubectl -n <namespace> get secret fepopr-root-secret-o jsonpath=’{.data.tls\.crt}’ | base64 -d > <namespace>-ca.crt
  2. 次のコマンドを使用して証明書を作成します。

    $ serial=$(openssl rand -hex 8)
    $ openssl genrsa -out <fepclustername>-<username>.key 2048
    $ openssl req -new -key <fepclustername>-<username>.key -out <fepclustername>-<username>.csr -subj “/CN=<username>”
    $ openssl x509 -req -in <fepclustername>-<username>.csr -CA <namespace>-ca.crt -CAkey <namespace>-ca.key -set_serial “0x${serial}” -out <fepclustername>-<username>.crt -days 365
  3. 証明書を格納するシークレットを作成します。

    $ kubectl -n <namespace> create secret tls <fepclustername>-<username>-cert --cert <fepclustername>-<username>.crt -key=<fepclustername>-<username>.key