独自のOracle Wallet、証明書およびKubernetes Secretの作成

独自のOracle Wallet、証明書およびKubernetes Secretを作成する方法を示す例を見てみましょう。この例では、TimesTenClassicオブジェクトのYAMLマニフェスト・ファイルにOracle Walletを含むKubernetes Secretを指定する方法も示しています。

ノート:

ステップは、TimesTenScaleoutオブジェクトの場合と同じです。

始める前に

TimesTen ttExporterユーティリティは、TimesTenインスタンスの/binディレクトリ内にあります。ttExporterユーティリティはTimesTenインスタンス内にあるため、ttExporterユーティリティにアクセスできるように、開発ホストにTimesTenインスタンスを作成する必要があります。TimesTenインスタンスは、TimesTenインストールから作成します。TimesTenディストリビューションを解凍すると、TimesTenインストールが作成されます。

これらのステップを開始する前に、TimesTenディストリビューションをダウンロードして解凍し、TimesTenインストールを作成する必要があります。TimesTenコンテナ・イメージの作成を選択した場合、このプロセスはすでに完了している可能性があります。

  1. まだ行っていない場合は、TimesTenディストリビューションを開発ホストのディレクトリにダウンロードして解凍します。
  2. 開発ホストの任意のディレクトリで、TimesTenインスタンスのディレクトリを作成します。この例では、以前に/scratch/ttuserディレクトリを作成していることを前提としています。この例では、/scratch/ttuser/instance1_exporter_dirディレクトリを作成します。
    mkdir /scratch/ttuser/instance1_exporter_dir
  3. TimesTenインストール・ディレクトリにあるTimesTenインスタンスを作成します。次のように置換します。
    • installation_dir: TimesTenインストール・ディレクトリの名前。これは、TimesTenディストリビューションを解凍したディレクトリです。

    • tt22.1.1.27.0: ttdottedrelease形式のTimesTenリリース番号。この例では、dottedrelease22.1.1.27.0です。
    • instance1_exporter: TimesTenインスタンスの名前。

    • /scratch/ttuser/instance1_exporter_dir: TimesTenインスタンスの場所。このディレクトリは前のステップで作成しました。

    ./installation_dir/tt22.1.1.27.0/bin/ttInstanceCreate -name instance1_exporter -location /scratch/ttuser/instance1_exporter_dir

    出力は、次のようになります。

    Creating instance in /scratch/ttuser/instance1_exporter_dir/instance1_exporter ...
    
    NOTE: The TimesTen daemon startup/shutdown scripts have not been installed.
    
    The startup script is located here :
            '/scratch/ttuser/instance1_exporter_dir/instance1_exporter/startup/tt_instance1_exporter'
    
    Run the 'setuproot' script :
            /scratch/ttuser/instance1_exporter_dir/instance1_exporter/bin/setuproot -install
    This will move the TimesTen startup script into its appropriate location.
    
    The 22.1 Release Notes are located here :
      '/scratch/ttuser/installation_dir/tt22.1.1.27.0/README.html'
    
    Instance created successfully.
  4. TIMESTEN_HOME環境変数を設定します。ttExporterユーティリティを実行する前に、この変数を設定する必要があります。この例では、bash Bourneタイプのシェルを使用します。
    . /scratch/ttuser/instance1_exporter_dir/instance1_exporter/bin/ttenv.sh

    出力は次のようになります(すべての出力を示しているわけではありません)。

    LD_LIBRARY_PATH set to ...
    ...
    PATH set to ...
    ...
    CLASSPATH set to ...
    TIMESTEN_HOME set to /scratch/ttuser/instance1_exporter_dir/instance1_exporter
    
開発ホストにTimesTenインスタンスが正常に作成されました。これで、ttExporterユーティリティを使用して証明書を作成する準備ができました。

証明書の作成

Transport Layer Security (相互TLS)/httpsを使用するために必要な証明書があります。これらは次のとおりです。
  • サーバー証明書: Oracle Walletに格納される自己署名証明書。この証明書は、TimesTenエクスポータによって使用されます。Oracle Walletの名前はcwallet.ssoです。

  • エクスポートされたサーバー証明書: PEM形式の自己署名サーバー証明書。この証明書はPrometheusの構成に必要です。

  • クライアント証明書およびクライアント秘密キー: Prometheusの構成に必要なクライアント証明書およびクライアント秘密キー。

次のステップでは、これらの証明書を作成する方法を示します。

  1. TIMESTEN_HOME環境変数が設定されていることを確認します。この環境変数は、前のステップで設定しました。「始める前に」を参照してください。
    echo $TIMESTEN_HOME

    出力は次のようになります。

    /scratch/ttuser/instance1_exporter_dir/instance1_exporter
  2. 開発ホストの任意のディレクトリで、Oracle Walletを格納するサブディレクトリを作成します。この例では、exportercertdirディレクトリを作成します。
    mkdir -p exportercertdir
  3. 自己署名サーバー証明書を作成します。この証明書はOracle Walletとして格納されます。Oracle Walletを含むファイルの名前はcwallet.ssoです。これには、TimesTenエクスポータに必要な証明書情報が含まれます。後で、Kubernetes Secretを使用して、cwallet.sso Oracle Walletファイルをexporterコンテナの/ttconfig/exporterWalletの場所に配置します。
    ttExporter -create-server-certificate -certificate-common-name *.samplecertsecret.mynamespace.svc.cluster.local -certificate-alt-names *.samplecertsecret.mynamespace.svc.cluster.local -certificate-directory exportercertdir

    -certificate-common-nameおよび-certificate-alt-names ttExporterオプションは必須です。これらのオプションの詳細は、Oracle TimesTen In-Memory DatabaseリファレンスttExporterを参照してください。

    -certificate-common-nameオプションは、証明書に含まれる共通名(CN)です。これは、証明書がインストールされているDNS名と一致します。このCNには1つの名前のみを含めることができます。単一レベルのワイルドカードを使用できます。この例では、CN名は*.samplecertsecret.mynamespace.svc.cluster.localです。次に説明を示します。
    • *は、単一レベルのワイルドカードです。

    • samplecertsecretは、TimesTenClassicオブジェクトまたはTimesTenScaleoutオブジェクトの名前です。

    • mynamespaceは、ネームスペースの名前です。

    • svc.cluster.localは、DNS名に必要な形式を完成させます。
    -certificate-alt-namesオプションは、証明書に含まれるサブジェクトの代替名(SAN)です。この名前には、前述したCNと、TimesTenエクスポータにアクセスする必要がある他のDNS名が含まれます。単一レベルのワイルドカードを使用できます。この例では、SAN名にはCN名のみが含まれています。具体的には、SAN名は*.samplecertsecret.mynamespace.svc.cluster.localです。次に説明を示します。
    • *は、単一レベルのワイルドカードです。

    • samplecertsecretは、TimesTenClassicオブジェクトまたはTimesTenScaleoutオブジェクトの名前です。

    • mynamespaceは、ネームスペースの名前です。

    • svc.cluster.localは、DNS名に必要な形式を完成させます。

    これらのオプションでは、TimesTenClassic (またはTimesTenScaleout)オブジェクトの名前とネームスペースの名前を指定する必要があるため、このステップを完了する前にこれらの名前を把握しておく必要があります。また、TimesTen ClassicオブジェクトまたはTimesTenScaleoutオブジェクトを定義する場合は、これらの同じ名前を使用する必要があります。

  4. サーバー証明書をエクスポートします。
    ttExporter -export-server-certificate exportercertdir/server.crt -certificate-directory exportercertdir

    このコマンドは、サーバー証明書をPEM形式でエクスポートします。この例では、証明書を含むファイルの名前はserver.crtです。このファイルを保存します。これは後でPrometheusを構成する際に必要になります。

  5. クライアント証明書およびクライアント秘密キーを作成してエクスポートします。
    ttExporter -export-client-certificate exportercertdir/client.crt -export-client-private-key exportercertdir/key.crt -certificate-directory exportercertdir

    このコマンドは、クライアント証明書を作成します。この例では、クライアント証明書の内容がclient.crtファイルに格納されます。また、この例では、クライアント秘密キーを作成し、その内容をkey.crtファイルに格納します。これらのファイルを保存します。これらは後でPrometheusを構成する際に必要になります。

  6. (オプション): 証明書が作成されていることを確認します。
    ls -a exportercertdir

    出力は、次のようになります。

    .   client.crt  server.crt
    ..  key.crt     .ttwallet.BA0F2D86-B6D2-4095-A4D0-CDF1FF89E9BF

    ttExporterユーティリティによってOracle Walletが作成されたことを確認します。

    ls -a exportercertdir/.ttwallet*

    出力は次のようになります。

    .  ..  cwallet.sso
サーバー証明書、クライアント証明書およびクライアント秘密キーが正常に作成されました。これらのファイルとその場所を書き留めます。後で必要になります。具体的には、Kubernetes Secretの作成時にcwallet.sso Oracle Walletファイルを指定する必要があります。「Oracle Walletを含むKubernetes Secretの作成」を参照してください。また、Prometheusを構成する際に、server.crtclient.crtおよびkey.crtファイルを後で指定する必要があります。

ノート:

Prometheusの構成はこのマニュアルでは対象外です。Prometheusの構成の詳細は、『Oracle TimesTen In-Memory Databaseモニタリングおよびトラブルシューティング・ガイド』クライアント証明書認証を使用したTimesTenエクスポータおよびPrometheusの構成についてを参照してください。

Oracle Walletを含むKubernetes Secretの作成

次のステップでは、Oracle WalletのKubernetes Secretを作成する方法を示します。このOracle Walletには、自己署名サーバー証明書が含まれています。Oracle Walletは、「証明書の作成」で作成しました。

  1. 開発ホストの任意のディレクトリで、Oracle Wallet (cwallet.ssoファイル)用の空のサブディレクトリを作成します。この例では、walletdirサブディレクトリを作成します。
    mkdir -p walletdir
  2. cwallet.sso Oracle Walletをそのディレクトリにコピーします。
    cp exportercertdir/.ttwallet*/cwallet.sso walletdir/cwallet.sso

    この例では、Oracle Walletはexportercertdir/.ttwallet*/cwallet.sso walletdirディレクトリにあります。このディレクトリは、「証明書の作成」で作成しました。

  3. Oracle WalletのKubernetes Secretを作成します。必ず/exporterWalletディレクトリを指定してください。
    kubectl create secret generic prometheuscert --from-file=exporterWallet=walletdir/cwallet.sso
    kubectl create generic secretコマンドは、次の処理を実行します。
    • prometheuscert Kubernetes Secretを作成します。

    • exporterWalletメタデータ・ファイルを含めます。このファイルは、cwallet.ssoファイルをシークレットに含めるときに必要です。

    • walletdircwallet.ssoファイルの場所として定義します。

    • cwallet.ssoファイルをOracle Walletファイルの名前として定義します。

    出力は次のようになります。
    secret/prometheuscert created
Kubernetes Secretが正常に作成されました。シークレットの名前を書き留めます。これは後でTimesTenClassicオブジェクトまたはTimesTenScaleoutオブジェクトを作成するときに使用します。

TimesTenClassicオブジェクトの定義およびデプロイ

TimesTenを実行している各ポッド内の個別のコンテナにTimesTenオペレータがTimesTenエクスポータを自動的にプロビジョニングするように、適切な情報を使用してTimesTenClassicオブジェクトを定義してみましょう。.spec.ttspec.prometheus.certSecretデータ項目を使用して、以前に作成したKubernetes SecretにあるOracle Walletを使用するようTimesTenオペレータに指示しましょう。(このシークレットは、「Oracle Walletを含むKubernetes Secretの作成」で作成しました)。

  1. TimesTenClassicオブジェクトを定義します。
    vi samplecertsecret.yaml
    
    apiVersion: timesten.oracle.com/v2
    kind: TimesTenClassic
    metadata:
      name: samplecertsecret
    spec:
      ttspec:
        storageClassName: oci-bv
        storageSize: 250G
        image: container-registry.oracle.com/timesten/timesten:22.1.1.27.0
        imagePullSecret: sekret
        prometheus:
          certSecret: prometheuscert
          port: 7777
        dbConfigMap:
        - samplecertsecret
    
    次の点に注目してください。
    • .spec.ttspec.prometheus句が指定されています。TimesTenオペレータは、各TimesTenポッドにTimesTenエクスポータ・コンテナをプロビジョニングします。

    • .spec.ttspec.prometheus.certSecretデータ項目が指定されています。このデータ項目の値は、以前に作成したOracle Walletを含むKubernetes Secretの名前です。

    • TimesTenエクスポータは、ポート7777でリスニングしています。
  2. YAMLファイルの内容からTimesTenClassicオブジェクトを作成します。
    kubectl create -f samplecertsecret.yaml
    出力は次のようになります。
    configmap/samplecertsecret created
    timestenclassic.timesten.oracle.com/samplecertsecret created
  3. 数分待ってから、TimesTenClassicオブジェクトがNormal状態であることを確認します。TimesTenオペレータが各TimesTenポッドにTimesTenエクスポータ・コンテナをプロビジョニングしたことも確認します。
    kubectl get ttc samplecertsecret
    出力。
    NAME               STATE    ACTIVE               AGE
    samplecertsecret   Normal   samplecertsecret-0   6m19s
    

    TimesTenエクスポータ・コンテナがあることを確認します。

    kubectl get pods

    出力。

    NAME                                  READY   STATUS    RESTARTS   AGE
    samplecertsecret-0                    3/3     Running   0          2m59s
    samplecertsecret-1                    3/3     Running   0          2m59s
    timesten-operator-7f77c749fd-lkhtr    1/1     Running   0          60m
    

    TimesTenオペレータは、TimesTenポッドごとに3つのコンテナをプロビジョニングしました。1つのコンテナでTimesTenエクスポータが実行されています。TimesTenエクスポータは、ポート7777でリスニングしており、httpsサーバーとして機能します。

次のステップでは、適切なPrometheus構成ファイルを編集して、PrometheusがTimesTenメトリックをスクレイプするようにします。Prometheusの構成の詳細は、https://prometheus.io/docs/prometheus/latest/configuration/configuration/を参照してください。