3.6 etcdのデータ・ストアとしての設定

MicroTxのデータ・ストアを作成して、トランザクション・ログを格納します。データ・ストアとしてetcdまたはOracle Databaseを使用できます。

Oracle Databaseをデータ・ストアとして設定する場合は、この項をスキップします。「Oracle Databaseのデータ・ストアとしての設定」を参照してください。

MicroTxをインストールする前に、データ・ストアをインストールして構成する必要があります。トランザクション・コーディネータとデータ・ストアの間の通信を可能にするために必要なネットワーキング・ルールを設定してください。

データベースに表を作成するために必要な権限があることを確認してください。MicroTxをインストールすると、サービスによって必要な表がデータベースに作成されます。そのため、MicroTxにはデータベースに関する特定の詳細が必要です。

トピック:

3.6.1 etcdのRSA証明書の生成

トランザクション・コーディネータのYAMLファイルにetcd資格証明およびetcdエンドポイントを指定する必要があります。MicroTxは、この情報を使用して、サービスのインストール後にデータベースへの接続を確立します。

etcdをトランザクション・ストアとして使用しない場合は、このステップをスキップします。

開始する前に、次のタスクを完了してください。

  • CFSSLツールをインストールします。https://github.com/cloudflare/cfsslを参照してください。このトピックには、CFSSLツールを使用して証明書を作成するためのサンプル・コマンドが記載されています。このツールまたはその他の任意のツールを使用して、証明書を生成できます。
  • etcdデータベースをインストールして構成します。etcdデータ・ストアの作成の詳細は、https://etcd.io/docs/を参照してください。
  • セキュリティを強化するためにetcdでTLSを有効にし、トランザクション・コーディネータのYAMLファイルに証明書の詳細を指定します。
証明書を作成し、etcdエンドポイントを識別するには:
  1. ディレクトリを作成します。

    次のサンプル・コードは、cfsslという名前のディレクトリを作成します。

    mkdir cfssl
    cd cfssl

    この中にすべての証明書を作成するため、このディレクトリのパスを書き留めます。

  2. 次のコマンドを実行して、etcdデータベース・サーバーの外部IPアドレスを識別します。

    次のコマンドは、KubernetesクラスタにMicroTxをインストールする場合にのみ実行します。

    kubectl get svc

    サンプル出力

    NAME          TYPE           CLUSTER-IP     EXTERNAL-IP      PORT(S)             AGE
    
    etcd          ClusterIP      None           <none>           4002/TCP,4003/TCP   5h8m
    
    etcd-client   LoadBalancer   192.0.2.83    198.51.100.1    4002:32135/TCP      5h8m
  3. 外部IPアドレスを書き留めます。
    この値を指定して、サーバー証明書を生成し、トランザクション・コーディネータのYAMLファイルにetcdエンドポイントとして指定します。
  4. 次のコマンドを実行して、認証局を初期化します。
    echo '{"CN":"CA","key":{"algo":"rsa","size":2048}}' | cfssl gencert -initca - | cfssljson -bare ca -
    
    このコマンドは、ca-key.pemca.csrおよびca.pemという3つのファイルを現在の作業ディレクトリに作成します。
  5. 次のコマンドを実行して、認証局のオプションを構成します。

    サンプル・コマンド

    echo '{"signing":{"default":{"expiry":"43800h","usages":["signing","key encipherment","server auth","client auth"]}}}' > ca-config.json

    ここで、出力はca-config.jsonファイルに書き込まれます。

    expiryおよびusagesの値を変更できます。これらの属性の詳細は、CFSSLのドキュメントを参照してください。

  6. サーバー証明書を生成します。
    1. 次のコマンドを実行して、etcdデータベース・サーバーのIPアドレスを変数ADDRESSに割り当てます。このコマンドを環境で実行する場合は、サンプル値を環境に固有の値に置き換えます。
      export ADDRESS=192.0.2.82
    2. 次のコマンドを実行して、etcdデータベース・サーバーの名前を変数NAMEに割り当てます。これは、サーバー証明書を生成するために必要なサーバー共通名(CN)です。このコマンドを環境で実行する場合は、サンプル値を環境に固有の値に置き換えます。
      export NAME=server
    3. 次のコマンドを実行して、サーバー証明書を生成します。
      echo '{"CN":"'$NAME'","hosts":[""],"key":{"algo":"rsa","size":2048}}' | cfssl gencert -config=ca-config.json -ca=ca.pem -ca-key=ca-key.pem -hostname="$ADDRESS" - | cfssljson -bare $NAME
    このコマンドは、server-key.pemserver.csrおよびserver.pemという3つのファイルを現在の作業ディレクトリに作成します。
  7. サーバー証明書に権限を追加します。このステップは、Docker SwarmにMicroTxをインストールする場合にのみ実行します。KubernetesクラスタにMicroTxをインストールする場合は、このステップをスキップします。
    sudo chmod 644 server-key.pem
    sudo chmod 644 server.pem
  8. クライアント証明書を生成します。クライアント証明書の生成中に、クライアント証明書ホストのIPアドレスを指定する必要はありません。
    1. 次のコマンドを実行して、変数NAMEに名前を割り当てます。これは、クライアント証明書を生成するために必要なサーバー共通名(CN)です。クライアント証明書を識別するための任意の値を指定できます。
      export NAME=client
    2. 次のコマンドを実行して、クライアント証明書を生成します。
      echo '{"CN":"'$NAME'","hosts":[""],"key":{"algo":"rsa","size":2048}}' | cfssl gencert -config=ca-config.json -ca=ca.pem -ca-key=ca-key.pem -hostname="$ADDRESS" - | cfssljson -bare $NAME
    このコマンドは、client-key.pemclient.csrおよびclient.pemという3つのファイルを現在の作業ディレクトリに作成します。
  9. 次のコマンドを実行して、クライアント証明書をパスワードで保護します。
    openssl rsa -passout pass:<your_password> -aes256 -in client-key.pem -out client-ekey.pem

    <your_password>をクライアントの秘密キー・ファイルのパスワードに置き換えます。次のステップで指定する必要があるため、パスワードを覚えておいてください。

    client-ekey.pemファイルは、現在の作業ディレクトリに作成されます。次のステップで、client-ekey.pemファイルおよびパスワードの内容を指定する必要があります。

  10. 任意のテキスト・エディタで、client-ekey.pemclient.pemの内容およびクライアント証明書の保護に使用したパスワードを含むJSONファイルを作成します。

    client.pemファイルにはクライアント証明書が含まれ、client-ekey.pemファイルにはキーが含まれます。

    1. certフィールドの値として、クライアント公開キー・ファイルであるclient.pemの内容をコピーします。
    2. keyフィールドの値として、クライアント秘密キー・ファイルであるclient-ekey.pemの内容をコピーします。
    3. 前のステップで指定したクライアント秘密キー・ファイルのパスワードをkeyPasswordフィールドの値として入力します。
    4. すべての改行を改行文字\nに置き換えます。
    5. 編集した値を使用してJSONファイルを作成します。次のコードは、サンプルのJSONファイルを示しています。サンプル値は、読みやすくするために省略記号(...)を使用して一部を省いています。
    {
    "cert":"-----BEGIN CERTIFICATE-----\nMIIDOjCC...\nBQAwD..jHPs=\n-----END CERTIFICATE-----",
    "key":"-----BEGIN RSA PRIVATE KEY-----\nProc-Type: 4,ENCRYPTED\nDEK-Info: AES-256-CBC,1870...\n\nNb...\n-----END RSA PRIVATE KEY-----",
    "keyPassword":"<your_password>"
    }
  11. JSONファイルを検証してから保存します。ファイルの名前とその場所を指定する必要があるため、覚えておいてください。JSONファイルをetcdecred.JSONとして保存するとします。

3.6.2 etcdのKubernetesシークレットの作成

values.yamlファイルにetcd資格証明およびetcdエンドポイントを指定する必要があります。MicroTxは、この情報を使用して、サービスのインストール後にetcdへの接続を確立します。

開始する前に、etcdのRSA証明書を生成し、生成された証明書の内容を含むJSONファイルを作成します。「etcdのRSA証明書の生成」を参照してください。

同じKubernetesクラスタ内にetcdおよびMicroTxをデプロイする予定の場合は、TLSを使用してetcdを構成することはオプションです。etcdがTLSで構成されている場合は、トランザクション・コーディネータのvalues.yamlファイルに証明書の詳細を指定する必要があります。

KubernetesシークレットおよびKubernetes構成マップを作成するには:
  1. 作成したJSONファイルで使用可能なコンテンツを使用して、Kubernetesシークレットを作成します。MicroTxをデプロイするネームスペースにKubernetesシークレットを作成してください。
    kubectl create secret generic etcd-cert-secret \
        --from-file=location of etcdecred.json -n otmm

    説明

    • etcd-cert-secretは、作成するKubernetesシークレットの名前です。MicroTxをインストールするには、この名前をYAMLファイルに指定する必要があるため、この名前を書き留めます。
    • location of etcdecred.JSONは、前のステップで作成したJSONファイルの場所です。
    • otmmは、MicroTxをデプロイするネームスペースです。
  2. これより前に認証局の初期化中に作成したca.pemファイルの構成マップを作成します。MicroTxをデプロイするネームスペースに構成マップを作成してください。
    kubectl create configmap etcd-ca-cert-map --from-file=location of ca.pem -n otmm

    説明

    • etcd-ca-cert-mapは、作成する構成マップの名前です。MicroTxvalues.yamlファイルにこの名前を指定するため、この名前を書き留めます。
    • location of ca.pemは、ca.pemファイルの場所です。
    • otmmは、MicroTxをデプロイするネームスペースです。
作成したetcdエンドポイント、証明書、KubernetesシークレットおよびKubernetes構成マップをvalues.yamlファイルに指定する必要があります。次のコード・スニペットでは、このトピックのコマンドで使用した値に基づいてサンプル値を指定しています。
storage:
    type: etcd
    etcd:
      endpoints: "https://198.51.100.1:4002"
      skipHostNameVerification: "false"
      credentialSecret:
        secretName: "etcd-cert-secret"
        secretFileName: "etcdecred.json"
      cacertConfigMap:
        configMapName: "etcd-ca-cert-map"
        configMapFileName: "ca.pem"

endpointsフィールドに正しいIPアドレスを指定しない場合、MicroTxのインストール時にホスト検証が失敗します。開発環境でホスト検証をバイパスするには、MicroTxvalues.yamlファイルでskipHostNameVerificationtrueに設定します。

注意:

本番環境では、skipHostNameVerificationフィールドをfalseに設定する必要があります。