TimesTenClassicオブジェクトの構成およびデプロイ

この例では、自動クライアント/サーバーのTLS暗号化用にTimesTenClassicオブジェクトを構成およびデプロイする方法を示します。この例では、YAMLマニフェスト・ファイルを使用します。

  1. 任意のディレクトリで、YAMLマニフェスト・ファイルを作成します。
    vi sampletls.yaml
    
    apiVersion: timesten.oracle.com/v4
    kind: TimesTenClassic
    metadata:
      name: sampletls
    spec:
      ttspec:
        storageClassName: oci-bv
        clientTLS:
          auto: true
          ciphersuites: SSL_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
          eccurve: p256
          encryption: required
          signAlg: ecdsasha384
          validity: 365  
        storageSize: 10Gi
        image: container-registry.oracle.com/timesten/timesten:22.1.1.34.0
        imagePullSecret: sekret
        dbConfigMap:
        - sampletls
    次の点に注目してください。
    • .spec.ttspec.clientTLSが指定され、.spec.ttspec.clientTLStrueに設定されています。この指示により、TimesTenオペレータは、自己署名証明書を自動的に作成し、これらの証明書をクライアント/サーバーのTLS暗号化に使用するようTimesTenを構成します。

    • .spec.ttspec.clientTLS.ciphersuitesが指定されています。TimesTenオペレータは、値がSSL_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384ciphersuitesエントリをsys.odbc.iniファイルに追加します。

    • .spec.ttspec.clientTLS.eccurveが指定されています。TimesTenオペレータは、-eccurveオプションをttCreateCertsユーティリティに追加し、このオプションにp256の値を指定します。

    • .spec.ttspec.clientTLS.encryptionが指定されています。TimesTenオペレータは、値がrequiredencryptionエントリをsys.odbc.iniファイルに追加します。

    • .spec.ttspec.clientTLS.signAlgが指定されています。TimesTenオペレータは、-sign_algオプションをttCreateCertsユーティリティに追加し、このオプションにecdsasha384の値を指定します。

    • .spec.ttspec.clientTLS.validityが指定されています。TimesTenオペレータは、-validityオプションをttCreateCertsユーティリティに追加し、このオプションに365の値を指定します。

  2. TimesTenClassicオブジェクトをデプロイします。
    kubectl create -f sampletls.yaml
    出力は次のようになります。
    timestenclassic.timesten.oracle.com/sampletls created
  3. デプロイメントを監視します。
    1. ステータスをチェックします。
      kubectl get ttc sampletls

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

      NAME        STATE          ACTIVE   AGE
      sampletls   Initializing   None     2m33s

      プロビジョニングは開始しましたが、まだ完了していません。

    2. 数分待ってから、再度ステータスを確認します。
      kubectl get ttc sampletls

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

      NAME        STATE    ACTIVE        AGE
      sampletls   Normal   sampletls-0   4m37s

      プロビジョニング・プロセスが完了します。データベースは稼働中であり、Normal状態で示されるとおり、動作しています。

  4. TimesTenオペレータが、TimesTenサーバーおよびTimesTenクライアントの証明書を含むKubernetesシークレットを作成したことを確認します。
    1. シークレットを確認します。
      kubectl get secrets

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

      NAME                                     TYPE                             DATA   AGE
      sampletls-client                         Opaque                           1      21m
      sampletls-server                         Opaque                           1      21m
      ...
    2. sampletls-serverシークレットの内容を確認します。
      kubectl describe secret sampletls-server

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

      Name:         sampletls-server
      Namespace:    mynamespace
      Labels:       <none>
      Annotations:  <none>
      
      Type:  Opaque
      
      Data
      ====
      cwallet.sso:  1525 bytes

      シークレットには、cwallet.ssoウォレットが含まれています。このウォレットには、TimesTenサーバーの自己署名証明書が含まれています。

    3. sampletls-clientシークレットの内容を確認します。
      kubectl describe secret sampletls-client

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

      Name:         sampletls-client
      Namespace:    mynamespace
      Labels:       <none>
      Annotations:  <none>
      
      Type:  Opaque
      
      Data
      ====
      cwallet.sso:  1525 bytes

      シークレットには、cwallet.ssoウォレットが含まれています。このウォレットには、TimesTenクライアントの自己署名証明書が含まれています。

    TimesTenオペレータは、TimesTen ttCreateCertsユーティリティを実行して、クライアント/サーバーのTLS暗号化用の自己署名証明書を作成しました。TimesTenオペレータは、これらの証明書をKubernetesシークレットに格納しました。
  5. クライアント/サーバーのTLS暗号化用の証明書が使用されるよう、TimesTenオペレータにより自動的にTimesTenが構成されたことを確認します。
    1. sampletls-0ポッドのttコンテナにシェルを設定します。
      kubectl exec -it sampletls-0 -c tt -- /bin/bash
    2. サーバー・ウォレットとクライアント・ウォレットが存在することを確認します。
      [timesten@sampletls-0 /]$ pwd
      /
      [timesten@sampletls-0 /]$ ls -a serverWallet
      .  ..  cwallet.sso
      
      [timesten@sampletls-0 /]$ ls -a clientWallet
      .  ..  cwallet.sso

      /serverWallet/cwallet.ssoウォレットには、TimesTenサーバーの自己署名証明書が含まれます。/clientWallet/cwallet.ssoウォレットには、TimesTenクライアントの自己署名証明書が含まれます。

    3. (オプション) sys.odbc.iniファイルの内容を確認します。
      [timesten@sampletls-0 ~]$ cat /tt/home/timesten/instances/instance1/conf/sys.odbc.ini

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

      [ODBC Data Sources]
      sampletls=TimesTen 22.1 Driver
      tt=TimesTen 22.1 Driver
      
      [sampletls]
      Datastore=/tt/home/timesten/datastore/sampletls
      PermSize=200
      DatabaseCharacterSet=AL32UTF8
      DDLReplicationLevel=3
      AutoCreate=0
      ForceDisconnectEnabled=1
      Wallet=/serverWallet
      Ciphersuites=SSL_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
      Encryption=required
      
      [tt]
      Datastore=/tt/home/timesten/datastore/sampletls
      PermSize=200
      DatabaseCharacterSet=AL32UTF8
      DDLReplicationLevel=3
      AutoCreate=0
      ForceDisconnectEnabled=1
      WaitForConnect=0
      Wallet=/serverWallet
      Ciphersuites=SSL_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
      Encryption=required

      TimesTenオペレータは、適切なWalletCiphersuitesおよびEncryptionエントリをsys.odbc.iniファイルに正しく追加しました。これらのエントリの値は、.spec.ttspec.clientTLSに指定されており、正しい値です。

    4. シェルを終了します。
  6. TLSが使用されていることを確認します。

    次のステップでは、TimesTenクライアント・インスタンスを実行しているアプリケーション・コンテナにクライアント・ウォレットを正常にコピーしたこと、および適切なクライアント側属性を構成したことを前提としています。TimesTenクライアント側属性の詳細は、『Oracle TimesTen In-Memory Databaseセキュリティ・ガイド』「タスク3: TimesTen ClassicでのTLSのクライアント構成の設定」を参照してください。

    1. TimesTenクライアント・インスタンスが含まれているアプリケーション・コンテナでシェルを確立します。
      kubectl exec -it client-0 -c tt -- /bin/bash
    2. ttIsqlCSを使用して、sampletlsデータベースに接続します。
      [timesten@sampletls-0]$ ttisqlcs -connstr "TTC_SERVER1=sampletls-0.sampletls.mynamespace.svc.cluster.local;TTC_SERVER2=sampletls-1.sampletls.mynamespace.svc.cluster.local;TTC_SERVER_DSN=sampletls;UID=adminuser;PWD=adminuserpwd;wallet=/clientWallet;ciphersuites=SSL_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384;encryption=required";
      出力は、次のようになります。
      Copyright (c) 1996, 2025, Oracle and/or its affiliates. All rights reserved.
      Type ? or "help" for help, type "exit" to quit ttIsql.
      
      
      
      connect "TTC_SERVER1=sampletls-0.sampletls.mynamespace.svc.cluster.local;TTC_SERVER2=sampletls-1.sampletls.mynamespace.svc.cluster.local;TTC_SERVER_DSN=sampletls;UID=adminuser;PWD=********;wallet=/clientWallet;ciphersuites=SSL_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384;encryption=required";
      Connection successful: DSN=;TTC_SERVER=sampletls-0.sampletls.mynamespace.svc.cluster.local;TTC_SERVER_DSN=sampletls;UID=adminuser;DATASTORE=/tt/home/timesten/datastore/sampletls;DATABASECHARACTERSET=AL32UTF8;CONNECTIONCHARACTERSET=US7ASCII;AUTOCREATE=0;PERMSIZE=200;DDLREPLICATIONLEVEL=3;FORCEDISCONNECTENABLED=1;Encryption=Required;Wallet=/clientWallet;CipherSuites=SSL_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384;
      (Default setting AutoCommit=1)
    3. ttIsqlCSのTimesTen sqlgetconnectattrコマンドを使用して、TLSが使用されていることを確認します。戻り値の1は、TLSが使用されていることを示します。
      Command> sqlgetconnectattr tt_tls_session;

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

      
      TT_TLS_SESSION = 1 (SQL_TRUE)
おめでとうございます。自動クライアント/サーバーTLS暗号化用にTimesTenClassicオブジェクトを正常に構成しました。ネームスペースにTimesTenClassicオブジェクトをデプロイした後、TimesTenオペレータが自動的に自己署名証明書を作成し、これらの証明書をクライアント/サーバーのTLS暗号化に使用するようTimesTenを構成しました。