メインコンテンツまでスキップ
バージョン: 3.7

Helm チャートの入門 (TLS を使用した ScalarDL Ledger および Auditor / Auditor モード)

このドキュメントでは、Kubernetes クラスター上の Helm Chart をテスト環境として使用して、TLS 構成で ScalarDL Ledger および ScalarDL Auditor を開始する方法について説明します。 ここでは、テスト用の Mac または Linux 環境がすでにあることを前提としています。 このドキュメントでは minikube を使用しますが、これから説明する手順はどの Kubernetes クラスターでも機能するはずです。

要件

  • ScalarDLのライセンスキー(試用ライセンスまたは商用ライセンス)を取得する必要があります。 ライセンス キーをお持ちでない場合は、お問い合わせ してください。
  • TLSに対応したScalarDL v3.9以降を使用する必要があります。
注記

監査によるビザンチン障害検出を適切に機能させるには、ScalarDL Ledger と ScalarDL Auditor を別の管理ドメインに展開して管理する必要があります。 ただし、このチュートリアルでは、テストを容易にするために、ScalarDL Ledger と ScalarDL Auditor を同じ Kubernetes クラスターにデプロイします。

作成するもの

次のように、次のコンポーネントを Kubernetes クラスターにデプロイします。

+-----------------------------------------------------------------------------------------------------------------------------+
| [Kubernetes Cluster] |
| [Pod] [Pod] [Pod] |
| |
| +-------+ +---------+ |
| +---> | Envoy | ---+ +---> | Ledger | ---+ |
| | +-------+ | | +---------+ | |
| | | | | |
| +---------+ | +-------+ | +-----------+ | +---------+ | +---------------+ |
| +---> | Service | ---+---> | Envoy | ---+---> | Service | ---+---> | Ledger | ---+---> | PostgreSQL | |
| | | (Envoy) | | +-------+ | | (Ledger) | | +---------+ | | (For Ledger) | |
| | +---------+ | | +-----------+ | | +---------------+ |
| [Pod] | | +-------+ | | +---------+ | |
| | +---> | Envoy | ---+ +---> | Ledger | ---+ |
| +--------+ | +-------+ +---------+ |
| | Client | ---+ |
| +--------+ | +-------+ +---------+ |
| | +---> | Envoy | ---+ +---> | Auditor | ---+ |
| | | +-------+ | | +---------+ | |
| | | | | | |
| | +---------+ | +-------+ | +-----------+ | +---------+ | +---------------+ |
| +---> | Service | ---+---> | Envoy | ---+---> | Service | ---+---> | Auditor | ---+---> | PostgreSQL | |
| | (Envoy) | | +-------+ | | (Auditor) | | +---------+ | | (For Auditor) | |
| +---------+ | | +-----------+ | | +---------------+ |
| | +-------+ | | +---------+ | |
| +---> | Envoy | ---+ +---> | Auditor | ---+ |
| +-------+ +---------+ |
| |
+-----------------------------------------------------------------------------------------------------------------------------+

TLS 接続用に次の秘密キーファイルと証明書ファイルを作成します。

                                                        +----------------------+
+---> | For Scalar Envoy |
| +----------------------+
| | envoy-key.pem |
| | envoy.pem |
| +----------------------+
|
+----------------------+ | +----------------------+
| Self-signed CA | ---(Sign certificates)---+---> | For ScalarDL Ledger |
+----------------------+ | +----------------------+
| ca-key.pem | | | ledger-key.pem |
| ca.pem | | | ledger.pem |
+----------------------+ | +----------------------+
|
| +----------------------+
+---> | For ScalarDL Auditor |
+----------------------+
| auditor-key.pem |
| auditor.pem |
+----------------------+

各接続で TLS を有効にするために、各秘密キーと証明書ファイルを次のように設定します。

                                                                     +--------------------------------+      +--------------------------------+
+-------(Normal request)-----> | Envoy for ScalarDL Ledger | ---> | ScalarDL Ledger |
| +--------------------------------+ +--------------------------------+
| +---(Recovery request)---> | envoy-key.pem | ---> | ledger-key.pem |
| | | envoy.pem | | ledger.pem |
| | | ca.pem (to verify ledger.pem) | | ca.pem (used for health check) |
| | +--------------------------------+ +--------------------------------+
+--------------------------------+ | |
| Client | ---+ |
+--------------------------------+ | +--------------------------------------------------------------------------------------------------------+
| ca.pem (to verify envoy.pem) | | |
+--------------------------------+ | |
| +--------------------------------+ +--------------------------------+ |
+-------(Normal request)-----> | Envoy for ScalarDL Auditor | ---> | ScalarDL Auditor | ---+
+--------------------------------+ +--------------------------------+
| envoy-key.pem | | auditor-key.pem |
| envoy.pem | | auditor.pem |
| ca.pem (to verify auditor.pem) | | ca.pem (used for health check) |
+--------------------------------+ | ca.pem (to verify ledger.pem) |
+--------------------------------+

ScalarDL 関連コンポーネント間には、次の接続があります。

  • クライアント - ScalarDL Ledger の Envoy: 一部のScalarDL APIを実行すると、クライアントはEnvoy for ScalarDL Ledgerにアクセスします。
  • クライアント - ScalarDL Auditor の Envoy: 一部のScalarDL APIを実行すると、クライアントはEnvoy for ScalarDL Auditorにアクセスします。
  • ScalarDL Ledgerの Envoy - ScalarDL Ledger: Envoy は、ScalarDL Ledger の前で L7 (gRPC) ロード バランサーとして機能します。
  • ScalarDL Auditor の Envoy - ScalarDL Auditor: Envoy は、ScalarDL Auditor の前で L7 (gRPC) ロード バランサーとして機能します。
  • ScalarDL Auditor - ScalarDL Ledger (ScalarDL Ledger) の Envoy: ScalarDL がデータの一貫性を保つために回復プロセスを実行する必要がある場合、ScalarDL Auditor は Envoy を介して ScalarDL Lever に対してリクエストを実行します。

ステップ 1. Kubernetes クラスターを開始する

Kubernetes クラスターを準備し、いくつかのツール (kubectlhelmcfssl、および cfssljson) をインストールする必要があります。 インストール方法の詳細については、Scalar Helm Charts の開始 を参照してください。

ステップ 2. PostgreSQL コンテナーを開始する

ScalarDL Ledger および ScalarDL Auditor は、バックエンドデータベースとして何らかのデータベースシステムを使用する必要があります。 このチュートリアルでは、PostgreSQL を使用します。

次のようにして、Kubernetes クラスターに PostgreSQL をデプロイできます。

  1. Bitnami Helm リポジトリを追加します。

    helm repo add bitnami https://charts.bitnami.com/bitnami
  2. Ledger 用に PostgreSQL をデプロイします。

    helm install postgresql-ledger bitnami/postgresql \
    --set auth.postgresPassword=postgres \
    --set primary.persistence.enabled=false \
    -n default
  3. Auditor 用に PostgreSQL をデプロイします。

    helm install postgresql-auditor bitnami/postgresql \
    --set auth.postgresPassword=postgres \
    --set primary.persistence.enabled=false \
    -n default
  4. PostgreSQL コンテナが実行されているかどうかを確認します。

    kubectl get pod -n default

    [コマンド実行結果]

    NAME                   READY   STATUS    RESTARTS   AGE
    postgresql-auditor-0 1/1 Running 0 11s
    postgresql-ledger-0 1/1 Running 0 16s

ステップ 3. 作業ディレクトリを作成する

いくつかの構成ファイルと秘密キーおよび証明書ファイルをローカルに作成します。 したがって、それらの作業ディレクトリを作成します。

  1. 作業ディレクトリを作成します。

    mkdir -p ${HOME}/scalardl-test/certs/

ステップ 4. 秘密キーおよび証明書ファイルを作成する

秘密キーと証明書ファイルを作成します。

  1. 作業ディレクトリを ${HOME}/scalardl-test/certs/ ディレクトリに変更します。

    cd ${HOME}/scalardl-test/certs/
  2. CA の情報を含む JSON ファイルを作成します。

    cat << 'EOF' > ${HOME}/scalardl-test/certs/ca.json
    {
    "CN": "scalar-test-ca",
    "key": {
    "algo": "ecdsa",
    "size": 256
    },
    "names": [
    {
    "C": "JP",
    "ST": "Tokyo",
    "L": "Shinjuku",
    "O": "Scalar Test CA"
    }
    ]
    }
    EOF
  3. CA の鍵/証明書ファイルを作成します。

    cfssl gencert -initca ca.json | cfssljson -bare ca
  4. CA 構成を含む JSON ファイルを作成します。

    cat << 'EOF' > ${HOME}/scalardl-test/certs/ca-config.json
    {
    "signing": {
    "default": {
    "expiry": "87600h"
    },
    "profiles": {
    "scalar-test-ca": {
    "expiry": "87600h",
    "usages": [
    "signing",
    "key encipherment",
    "server auth"
    ]
    }
    }
    }
    }
    EOF
  5. Envoy 情報を含む JSON ファイルを作成します。

    cat << 'EOF' > ${HOME}/scalardl-test/certs/envoy.json
    {
    "CN": "scalar-envoy",
    "hosts": [
    "envoy.scalar.example.com",
    "localhost"
    ],
    "key": {
    "algo": "ecdsa",
    "size": 256
    },
    "names": [
    {
    "C": "JP",
    "ST": "Tokyo",
    "L": "Shinjuku",
    "O": "Scalar Envoy Test"
    }
    ]
    }
    EOF
  6. ScalarDL Ledger 情報を含む JSON ファイルを作成します。

    cat << 'EOF' > ${HOME}/scalardl-test/certs/ledger.json
    {
    "CN": "scalardl-ledger",
    "hosts": [
    "ledger.scalardl.example.com",
    "localhost"
    ],
    "key": {
    "algo": "ecdsa",
    "size": 256
    },
    "names": [
    {
    "C": "JP",
    "ST": "Tokyo",
    "L": "Shinjuku",
    "O": "ScalarDL Ledger Test"
    }
    ]
    }
    EOF
  7. ScalarDL Auditor 情報を含む JSON ファイルを作成します。

    cat << 'EOF' > ${HOME}/scalardl-test/certs/auditor.json
    {
    "CN": "scalardl-auditor",
    "hosts": [
    "auditor.scalardl.example.com",
    "localhost"
    ],
    "key": {
    "algo": "ecdsa",
    "size": 256
    },
    "names": [
    {
    "C": "JP",
    "ST": "Tokyo",
    "L": "Shinjuku",
    "O": "ScalarDL Auditor Test"
    }
    ]
    }
    EOF
  8. Envoy の秘密キーおよび証明書ファイルを作成します。

    cfssl gencert -ca ca.pem -ca-key ca-key.pem -config ca-config.json -profile scalar-test-ca envoy.json | cfssljson -bare envoy
  9. ScalarDL Ledger の秘密キーおよび証明書ファイルを作成します。

    cfssl gencert -ca ca.pem -ca-key ca-key.pem -config ca-config.json -profile scalar-test-ca ledger.json | cfssljson -bare ledger
  10. ScalarDL Auditor の秘密キーおよび証明書ファイルを作成します。

    cfssl gencert -ca ca.pem -ca-key ca-key.pem -config ca-config.json -profile scalar-test-ca auditor.json | cfssljson -bare auditor
  11. 秘密キーおよび証明書ファイルが作成されたことを確認します。

    ls -1

    [コマンド実行結果]

    auditor-key.pem
    auditor.csr
    auditor.json
    auditor.pem
    ca-config.json
    ca-key.pem
    ca.csr
    ca.json
    ca.pem
    envoy-key.pem
    envoy.csr
    envoy.json
    envoy.pem
    ledger-key.pem
    ledger.csr
    ledger.json
    ledger.pem

ステップ 5. Helm チャートを使用して ScalarDL Ledger と ScalarDL Auditor の DB スキーマを作成する

Helm Chart を使用して、Kubernetes クラスターに 2 つの ScalarDL Schema Loader ポッドをデプロイします。 ScalarDL Schema Loader は、PostgreSQL で ScalarDL Ledger と Auditor の DB スキーマを作成します。

  1. 作業ディレクトリを ${HOME}/scalardl-test/ に変更します。

    cd ${HOME}/scalardl-test/
  2. Scalar helm リポジトリを追加します。

    helm repo add scalar-labs https://scalar-labs.github.io/helm-charts
  3. ScalarDL Schema Loader for Ledger のカスタム値ファイル (schema-loader-ledger-custom-values.yaml) を作成します。

    cat << 'EOF' > ${HOME}/scalardl-test/schema-loader-ledger-custom-values.yaml
    schemaLoading:
    schemaType: "ledger"
    databaseProperties: |
    scalar.db.contact_points=jdbc:postgresql://postgresql-ledger.default.svc.cluster.local:5432/postgres
    scalar.db.username=${env:SCALAR_DL_LEDGER_POSTGRES_USERNAME}
    scalar.db.password=${env:SCALAR_DL_LEDGER_POSTGRES_PASSWORD}
    scalar.db.storage=jdbc
    secretName: "schema-ledger-credentials-secret"
    EOF
  4. ScalarDL Schema Loader for Auditor のカスタム値ファイル (schema-loader-auditor-custom-values.yaml) を作成します。

    cat << 'EOF' > ${HOME}/scalardl-test/schema-loader-auditor-custom-values.yaml
    schemaLoading:
    schemaType: "auditor"
    databaseProperties: |
    scalar.db.contact_points=jdbc:postgresql://postgresql-auditor.default.svc.cluster.local:5432/postgres
    scalar.db.username=${env:SCALAR_DL_AUDITOR_POSTGRES_USERNAME}
    scalar.db.password=${env:SCALAR_DL_AUDITOR_POSTGRES_PASSWORD}
    scalar.db.storage=jdbc
    secretName: "schema-auditor-credentials-secret"
    EOF
  5. PostgreSQL for Ledger のユーザー名とパスワードを含むシークレット リソースを作成します。

    kubectl create secret generic schema-ledger-credentials-secret \
    --from-literal=SCALAR_DL_LEDGER_POSTGRES_USERNAME=postgres \
    --from-literal=SCALAR_DL_LEDGER_POSTGRES_PASSWORD=postgres \
    -n default
  6. PostgreSQL for Auditor のユーザー名とパスワードを含むシークレット リソースを作成します。

    kubectl create secret generic schema-auditor-credentials-secret \
    --from-literal=SCALAR_DL_AUDITOR_POSTGRES_USERNAME=postgres \
    --from-literal=SCALAR_DL_AUDITOR_POSTGRES_PASSWORD=postgres \
    -n default
  7. ScalarDL Schema Loaderのチャートバージョンを設定します。

    SCALAR_DL_VERSION=3.9.1
    SCALAR_DL_SCHEMA_LOADER_CHART_VERSION=$(helm search repo scalar-labs/schema-loading -l | grep -F "${SCALAR_DL_VERSION}" | awk '{print $2}' | sort --version-sort -r | head -n 1)
  8. Ledger 用の ScalarDL スキーマ ローダーをデプロイします。

    helm install schema-loader-ledger scalar-labs/schema-loading -f ${HOME}/scalardl-test/schema-loader-ledger-custom-values.yaml --version ${SCALAR_DL_SCHEMA_LOADER_CHART_VERSION} -n default
  9. Auditor 用の ScalarDL スキーマ ローダーをデプロイします。

    helm install schema-loader-auditor scalar-labs/schema-loading -f ${HOME}/scalardl-test/schema-loader-auditor-custom-values.yaml --version ${SCALAR_DL_SCHEMA_LOADER_CHART_VERSION} -n default
  10. ScalarDL Schema Loader ポッドがデプロイされ、完了しているかどうかを確認します。

    kubectl get pod -n default

    [コマンド実行結果]

    NAME                                         READY   STATUS      RESTARTS   AGE
    postgresql-auditor-0 1/1 Running 0 2m56s
    postgresql-ledger-0 1/1 Running 0 3m1s
    schema-loader-auditor-schema-loading-dvc5r 0/1 Completed 0 6s
    schema-loader-ledger-schema-loading-mtllb 0/1 Completed 0 10s

    ScalarDL Schema Loader ポッドが ContainerCreating または Running の場合は、プロセスが完了するまで待ちます (ステータスは Completed になります)。

ステップ 6. Helm Chart を使用して Kubernetes クラスターに ScalarDL Ledger と ScalarDL Auditor をデプロイする

  1. ScalarDL Ledger のカスタム値ファイル (scalardl-ledger-custom-values.yaml) を作成します。

    cat << 'EOF' > ${HOME}/scalardl-test/scalardl-ledger-custom-values.yaml
    envoy:

    tls:
    downstream:
    enabled: true
    certChainSecret: "envoy-tls-cert"
    privateKeySecret: "envoy-tls-key"
    upstream:
    enabled: true
    overrideAuthority: "ledger.scalardl.example.com"
    caRootCertSecret: "scalardl-ledger-tls-ca"

    ledger:

    image:
    repository: "ghcr.io/scalar-labs/scalardl-ledger-byol"

    ledgerProperties: |
    ### Storage configurations
    scalar.db.storage=jdbc
    scalar.db.contact_points=jdbc:postgresql://postgresql-ledger.default.svc.cluster.local:5432/postgres
    scalar.db.username=${env:SCALAR_DL_LEDGER_POSTGRES_USERNAME}
    scalar.db.password=${env:SCALAR_DL_LEDGER_POSTGRES_PASSWORD}

    ### Ledger configurations
    scalar.dl.ledger.proof.enabled=true
    scalar.dl.ledger.auditor.enabled=true
    scalar.dl.ledger.authentication.method=hmac
    scalar.dl.ledger.authentication.hmac.cipher_key=${env:SCALAR_DL_LEDGER_HMAC_CIPHER_KEY}
    scalar.dl.ledger.servers.authentication.hmac.secret_key=${env:SCALAR_DL_LEDGER_HMAC_SECRET_KEY}

    ### TLS configurations
    scalar.dl.ledger.server.tls.enabled=true
    scalar.dl.ledger.server.tls.cert_chain_path=/tls/scalardl-auditor/certs/tls.crt
    scalar.dl.ledger.server.tls.private_key_path=/tls/scalardl-auditor/certs/tls.key

    ### License key configurations
    scalar.dl.licensing.license_key=${env:SCALAR_DL_LICENSE_KEY}
    scalar.dl.licensing.license_check_cert_pem=${env:SCALAR_DL_LICENSE_CHECK_CERT_PEM}

    tls:
    enabled: true
    overrideAuthority: "ledger.scalardl.example.com"
    caRootCertSecret: "scalardl-ledger-tls-ca"
    certChainSecret: "scalardl-ledger-tls-cert"
    privateKeySecret: "scalardl-ledger-tls-key"

    secretName: "ledger-credentials-secret"
    EOF
  2. ScalarDL Auditor のカスタム値ファイル (scalardl-auditor-custom-values.yaml) を作成します。

    cat << 'EOF' > ${HOME}/scalardl-test/scalardl-auditor-custom-values.yaml
    envoy:

    tls:
    downstream:
    enabled: true
    certChainSecret: "envoy-tls-cert"
    privateKeySecret: "envoy-tls-key"
    upstream:
    enabled: true
    overrideAuthority: "auditor.scalardl.example.com"
    caRootCertSecret: "scalardl-auditor-tls-ca"

    auditor:

    image:
    repository: "ghcr.io/scalar-labs/scalardl-auditor-byol"

    auditorProperties: |
    ### Storage configurations
    scalar.db.storage=jdbc
    scalar.db.contact_points=jdbc:postgresql://postgresql-auditor.default.svc.cluster.local:5432/postgres
    scalar.db.username=${env:SCALAR_DL_AUDITOR_POSTGRES_USERNAME}
    scalar.db.password=${env:SCALAR_DL_AUDITOR_POSTGRES_PASSWORD}

    ### Auditor configurations
    scalar.dl.auditor.ledger.host=scalardl-ledger-envoy.default.svc.cluster.local
    scalar.dl.auditor.authentication.method=hmac
    scalar.dl.auditor.authentication.hmac.cipher_key=${env:SCALAR_DL_AUDITOR_HMAC_CIPHER_KEY}
    scalar.dl.auditor.servers.authentication.hmac.secret_key=${env:SCALAR_DL_AUDITOR_HMAC_SECRET_KEY}

    ### TLS configurations
    scalar.dl.auditor.server.tls.enabled=true
    scalar.dl.auditor.server.tls.cert_chain_path=/tls/scalardl-auditor/certs/tls.crt
    scalar.dl.auditor.server.tls.private_key_path=/tls/scalardl-auditor/certs/tls.key
    scalar.dl.auditor.tls.enabled=true
    scalar.dl.auditor.tls.ca_root_cert_path=/tls/scalardl-ledger/certs/ca.crt
    scalar.dl.auditor.tls.override_authority=envoy.scalar.example.com

    ### License key configurations
    scalar.dl.licensing.license_key=${env:SCALAR_DL_LICENSE_KEY}
    scalar.dl.licensing.license_check_cert_pem=${env:SCALAR_DL_LICENSE_CHECK_CERT_PEM}

    tls:
    enabled: true
    overrideAuthority: "auditor.scalardl.example.com"
    caRootCertSecret: "scalardl-auditor-tls-ca"
    certChainSecret: "scalardl-auditor-tls-cert"
    privateKeySecret: "scalardl-auditor-tls-key"
    caRootCertForLedgerSecret: "scalardl-auditor-tls-ca-for-ledger"

    secretName: "auditor-credentials-secret"
    EOF
  3. ライセンスキーと証明書を環境変数に設定します。 ライセンスキーをお持ちでない場合は、お問い合わせ してください。

    SCALAR_DL_LICENSE_KEY=<YOUR_LICENSE_KEY>
    SCALAR_DL_LICENSE_CHECK_CERT_PEM=<CERT_PEM_FOR_YOUR_LICENSE_KEY>
  4. 資格情報とライセンスキーを含むシークレット リソース ledger-credentials-secret を作成します。

    kubectl create secret generic ledger-credentials-secret \
    --from-literal=SCALAR_DL_LEDGER_POSTGRES_USERNAME=postgres \
    --from-literal=SCALAR_DL_LEDGER_POSTGRES_PASSWORD=postgres \
    --from-literal=SCALAR_DL_LEDGER_HMAC_CIPHER_KEY=ledger-hmac-cipher-key \
    --from-literal=SCALAR_DL_LEDGER_HMAC_SECRET_KEY=scalardl-hmac-secret-key \
    --from-literal=SCALAR_DL_LICENSE_KEY=${SCALAR_DL_LICENSE_KEY} \
    --from-literal=SCALAR_DL_LICENSE_CHECK_CERT_PEM=${SCALAR_DL_LICENSE_CHECK_CERT_PEM} \
    -n default
  5. 資格情報とライセンスキーを含むシークレット リソース auditor-credentials-secret を作成します。

    kubectl create secret generic auditor-credentials-secret \
    --from-literal=SCALAR_DL_AUDITOR_POSTGRES_USERNAME=postgres \
    --from-literal=SCALAR_DL_AUDITOR_POSTGRES_PASSWORD=postgres \
    --from-literal=SCALAR_DL_AUDITOR_HMAC_CIPHER_KEY=auditor-hmac-cipher-key \
    --from-literal=SCALAR_DL_AUDITOR_HMAC_SECRET_KEY=scalardl-hmac-secret-key \
    --from-literal=SCALAR_DL_LICENSE_KEY=${SCALAR_DL_LICENSE_KEY} \
    --from-literal=SCALAR_DL_LICENSE_CHECK_CERT_PEM=${SCALAR_DL_LICENSE_CHECK_CERT_PEM} \
    -n default
  6. Envoy の秘密キーファイルと証明書ファイルを含むシークレット リソースを作成します。

    kubectl create secret generic envoy-tls-cert --from-file=tls.crt=${HOME}/scalardl-test/certs/envoy.pem -n default
    kubectl create secret generic envoy-tls-key --from-file=tls.key=${HOME}/scalardl-test/certs/envoy-key.pem -n default
  7. ScalarDL Ledger の秘密キー、証明書、CA 証明書ファイルを含むシークレット リソースを作成します。

    kubectl create secret generic scalardl-ledger-tls-ca --from-file=ca.crt=${HOME}/scalardl-test/certs/ca.pem -n default
    kubectl create secret generic scalardl-ledger-tls-cert --from-file=tls.crt=${HOME}/scalardl-test/certs/ledger.pem -n default
    kubectl create secret generic scalardl-ledger-tls-key --from-file=tls.key=${HOME}/scalardl-test/certs/ledger-key.pem -n default
  8. ScalarDL Auditor の秘密キー、証明書、CA 証明書ファイルを含むシークレット リソースを作成します。

    kubectl create secret generic scalardl-auditor-tls-ca --from-file=ca.crt=${HOME}/scalardl-test/certs/ca.pem -n default
    kubectl create secret generic scalardl-auditor-tls-cert --from-file=tls.crt=${HOME}/scalardl-test/certs/auditor.pem -n default
    kubectl create secret generic scalardl-auditor-tls-key --from-file=tls.key=${HOME}/scalardl-test/certs/auditor-key.pem -n default
    kubectl create secret generic scalardl-auditor-tls-ca-for-ledger --from-file=ca.crt=${HOME}/scalardl-test/certs/ca.pem -n default
  9. 秘密リソース auditor-keys を作成して、デジタル署名 認証方法を無効にします。 このドキュメントでは、 デジタル署名 の代わりに hmac 認証方法を使用します。

    kubectl create secret generic auditor-keys \
    --from-literal=tls.key=dummy-data-to-disable-digital-signature-method \
    --from-literal=certificate=dummy-data-to-disable-digital-signature-method \
    -n default

    注: 認証方法として hmac を使用する場合は、ダミーのシークレット auditor-key を作成して、ヘルム チャート側の デジタル署名 を無効にする必要があります。

  10. ScalarDL のチャートのバージョンを設定します。

    SCALAR_DL_LEDGER_CHART_VERSION=$(helm search repo scalar-labs/scalardl -l | grep -v -e "scalar-labs/scalardl-audit" | grep -F "${SCALAR_DL_VERSION}" | awk '{print $2}' | sort --version-sort -r | head -n 1)
    SCALAR_DL_AUDITOR_CHART_VERSION=$(helm search repo scalar-labs/scalardl-audit -l | grep -F "${SCALAR_DL_VERSION}" | awk '{print $2}' | sort --version-sort -r | head -n 1)
  11. ScalarDL Ledger をデプロイします。

    helm install scalardl-ledger scalar-labs/scalardl -f ${HOME}/scalardl-test/scalardl-ledger-custom-values.yaml --version ${SCALAR_DL_LEDGER_CHART_VERSION} -n default
  12. ScalarDL Auditor をデプロイします。

    helm install scalardl-auditor scalar-labs/scalardl-audit -f ${HOME}/scalardl-test/scalardl-auditor-custom-values.yaml --version ${SCALAR_DL_AUDITOR_CHART_VERSION} -n default
  13. ScalarDL Ledger および ScalarDL Auditor ポッドがデプロイされているかどうかを確認します。

    kubectl get pod -n default

    [コマンド実行結果]

    NAME                                         READY   STATUS      RESTARTS   AGE
    postgresql-auditor-0 1/1 Running 0 14m
    postgresql-ledger-0 1/1 Running 0 14m
    scalardl-auditor-auditor-5b885ff4c8-fwkpf 1/1 Running 0 18s
    scalardl-auditor-auditor-5b885ff4c8-g69cb 1/1 Running 0 18s
    scalardl-auditor-auditor-5b885ff4c8-nsmnq 1/1 Running 0 18s
    scalardl-auditor-envoy-689bcbdf65-5mn6v 1/1 Running 0 18s
    scalardl-auditor-envoy-689bcbdf65-fpq8j 1/1 Running 0 18s
    scalardl-auditor-envoy-689bcbdf65-lsz2t 1/1 Running 0 18s
    scalardl-ledger-envoy-547bbf7546-n7p5x 1/1 Running 0 26s
    scalardl-ledger-envoy-547bbf7546-p8nwp 1/1 Running 0 26s
    scalardl-ledger-envoy-547bbf7546-pskpb 1/1 Running 0 26s
    scalardl-ledger-ledger-6db5dc8774-5zsbj 1/1 Running 0 26s
    scalardl-ledger-ledger-6db5dc8774-vnmrw 1/1 Running 0 26s
    scalardl-ledger-ledger-6db5dc8774-wpjvs 1/1 Running 0 26s
    schema-loader-auditor-schema-loading-dvc5r 0/1 Completed 0 11m
    schema-loader-ledger-schema-loading-mtllb 0/1 Completed 0 11m

    ScalarDL Ledger および ScalarDL Auditor ポッドが適切にデプロイされている場合、ステータスが Running であることがわかります。

  14. ScalarDL Ledger サービスと ScalarDL Auditor サービスがデプロイされているかどうかを確認します。

    kubectl get svc -n default

    [コマンド実行結果]

    NAME                             TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                         AGE
    kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 47d
    postgresql-auditor ClusterIP 10.107.9.78 <none> 5432/TCP 15m
    postgresql-auditor-hl ClusterIP None <none> 5432/TCP 15m
    postgresql-ledger ClusterIP 10.108.241.181 <none> 5432/TCP 15m
    postgresql-ledger-hl ClusterIP None <none> 5432/TCP 15m
    scalardl-auditor-envoy ClusterIP 10.100.61.202 <none> 40051/TCP,40052/TCP 55s
    scalardl-auditor-envoy-metrics ClusterIP 10.99.6.227 <none> 9001/TCP 55s
    scalardl-auditor-headless ClusterIP None <none> 40051/TCP,40053/TCP,40052/TCP 55s
    scalardl-auditor-metrics ClusterIP 10.108.1.147 <none> 8080/TCP 55s
    scalardl-ledger-envoy ClusterIP 10.101.191.116 <none> 50051/TCP,50052/TCP 61s
    scalardl-ledger-envoy-metrics ClusterIP 10.106.52.103 <none> 9001/TCP 61s
    scalardl-ledger-headless ClusterIP None <none> 50051/TCP,50053/TCP,50052/TCP 61s
    scalardl-ledger-metrics ClusterIP 10.99.122.106 <none> 8080/TCP 61s

    ScalarDL Ledger サービスと ScalarDL Auditor サービスが適切にデプロイされている場合は、CLUSTER-IP 列にプライベート IP アドレスが表示されます。

注記

scalardl-ledger-headlessscalardl-auditor-headlesspostgresql-ledger-hlpostgresql-auditor-hlCLUSTER-IP の値は、IP アドレスがないため None になります。 。

ステップ 7. クライアントコンテナを開始する

クライアントコンテナでCAの証明書ファイルを使用します。 そこで、シークレット リソースを作成し、クライアント コンテナにマウントします。

  1. シークレット リソース client-ca-cert を作成します。

    kubectl create secret generic client-ca-cert --from-file=certificate=${HOME}/scalardl-test/certs/ca.pem -n default
  2. クライアント ポッドのマニフェスト ファイル (scalardl-client-pod.yaml) を作成します。

    cat << 'EOF' > ${HOME}/scalardl-test/scalardl-client-pod.yaml
    apiVersion: v1
    kind: Pod
    metadata:
    name: "scalardl-client"
    spec:
    containers:
    - name: scalardl-client
    image: eclipse-temurin:8
    command: ['sleep']
    args: ['inf']
    env:
    - name: SCALAR_DL_VERSION
    value: SCALAR_DL_CLIENT_POD_SCALAR_DL_VERSION
    volumeMounts:
    - name: "client-ca-cert"
    mountPath: "/certs/ca/ca.pem"
    subPath: certificate
    readOnly: true
    volumes:
    - name: "client-ca-cert"
    secret:
    secretName: "client-ca-cert"
    restartPolicy: Never
    EOF
  3. マニフェスト ファイルに ScalarDL のバージョンを設定します。

    sed -i s/SCALAR_DL_CLIENT_POD_SCALAR_DL_VERSION/${SCALAR_DL_VERSION}/ ${HOME}/scalardl-test/scalardl-client-pod.yaml
  4. クライアント ポッドをデプロイします。

    kubectl apply -f ${HOME}/scalardl-test/scalardl-client-pod.yaml -n default
  5. クライアントコンテナが実行されているかどうかを確認します。

    kubectl get pod scalardl-client -n default

    [コマンド実行結果]

    NAME              READY   STATUS    RESTARTS   AGE
    scalardl-client 1/1 Running 0 4s

ステップ 8. クライアント コンテナで ScalarDL サンプル コントラクトを実行する

以下に最低限の手順を説明します。 ScalarDL LedgerとScalarDL Auditorについて詳しく知りたい場合は、以下のドキュメントを参照してください。

  1. クライアントコンテナで bash を実行します。

    kubectl exec -it scalardl-client -n default -- bash

    次の手順移行のコマンドは、クライアントコンテナ無いで実行する必要があります。

  2. git、curl、および unzip コマンドをクライアントコンテナにインストールします。

    apt update && apt install -y git curl unzip
  3. ScalarDL Java クライアント SDK git リポジトリのクローンを作成します。

    git clone https://github.com/scalar-labs/scalardl-java-client-sdk.git
  4. ディレクトリを scalardl-java-client-sdk/ に変更します。

    cd scalardl-java-client-sdk/
    pwd

    [コマンド実行結果]

    /scalardl-java-client-sdk
  5. ブランチを使用するバージョンに変更します。

    git checkout -b v${SCALAR_DL_VERSION} refs/tags/v${SCALAR_DL_VERSION}
  6. サンプルコントラクトを作成します。

    ./gradlew assemble
  7. ScalarDL の CLI ツールを ScalarDL Java Client SDK Releases からダウンロードします。

    curl -OL https://github.com/scalar-labs/scalardl-java-client-sdk/releases/download/v${SCALAR_DL_VERSION}/scalardl-java-client-sdk-${SCALAR_DL_VERSION}.zip

    同じバージョンの CLI ツールと ScalarDL Ledger を使用する必要があります。

  8. scalardl-java-client-sdk-${SCALAR_DL_VERSION}.zip ファイルを解凍します。

    unzip ./scalardl-java-client-sdk-${SCALAR_DL_VERSION}.zip
  9. Kubernetes クラスター上の ScalarDL Ledger および ScalarDL Auditor にアクセスするための構成ファイル (client.properties) を作成します。

    cat << 'EOF' > client.properties
    # Ledger configuration
    scalar.dl.client.server.host=scalardl-ledger-envoy.default.svc.cluster.local
    scalar.dl.client.tls.enabled=true
    scalar.dl.client.tls.ca_root_cert_path=/certs/ca/ca.pem
    scalar.dl.client.tls.override_authority=envoy.scalar.example.com

    # Auditor configuration
    scalar.dl.client.auditor.enabled=true
    scalar.dl.client.auditor.host=scalardl-auditor-envoy.default.svc.cluster.local
    scalar.dl.client.auditor.tls.enabled=true
    scalar.dl.client.auditor.tls.ca_root_cert_path=/certs/ca/ca.pem
    scalar.dl.client.auditor.tls.override_authority=envoy.scalar.example.com

    # Client configuration
    scalar.dl.client.authentication_method=hmac
    scalar.dl.client.entity.id=client
    scalar.dl.client.entity.identity.hmac.secret_key=scalardl-hmac-client-secert-key
    EOF
  10. クライアントのシークレットを登録します。

    ./scalardl-java-client-sdk-${SCALAR_DL_VERSION}/bin/scalardl register-secret --config ./client.properties
  11. サンプルコントラクト StateUpdater を登録します。

    ./scalardl-java-client-sdk-${SCALAR_DL_VERSION}/bin/scalardl register-contract --config ./client.properties --contract-id StateUpdater --contract-binary-name com.org1.contract.StateUpdater --contract-class-file ./build/classes/java/main/com/org1/contract/StateUpdater.class
  12. サンプルコントラクト StateReader を登録します。

    ./scalardl-java-client-sdk-${SCALAR_DL_VERSION}/bin/scalardl register-contract --config ./client.properties --contract-id StateReader --contract-binary-name com.org1.contract.StateReader --contract-class-file ./build/classes/java/main/com/org1/contract/StateReader.class
  13. 検証リクエストを実行するためのコントラクト ValidateLedger を登録します。

    ./scalardl-java-client-sdk-${SCALAR_DL_VERSION}/bin/scalardl register-contract --config ./client.properties --contract-id validate-ledger --contract-binary-name com.scalar.dl.client.contract.ValidateLedger --contract-class-file ./build/classes/java/main/com/scalar/dl/client/contract/ValidateLedger.class
  14. コントラクト StateUpdater を実行します。

    ./scalardl-java-client-sdk-${SCALAR_DL_VERSION}/bin/scalardl execute-contract --config ./client.properties --contract-id StateUpdater --contract-argument '{"asset_id": "test_asset", "state": 3}'

    このサンプル コントラクトは、test_asset という名前のアセットの state (値) を 3 に更新します。

  15. コントラクト StateReader を実行します。

    ./scalardl-java-client-sdk-${SCALAR_DL_VERSION}/bin/scalardl execute-contract --config ./client.properties --contract-id StateReader --contract-argument '{"asset_id": "test_asset"}'

    [コマンド実行結果]

    Contract result:
    {
    "id" : "test_asset",
    "age" : 0,
    "output" : {
    "state" : 3
    }
    }

    参考情報

    • 資産データが改ざんされていない場合、execute-contract コマンドを実行してコントラクトの実行を要求すると、結果として OK が返されます。

    • 資産データが改ざんされている場合 (たとえば、データベース内の state 値が改ざんされている場合)、コントラクトの実行を要求する execute-contract コマンドを実行すると、実行結果として OK 以外の値が返されます (たとえば、 INCONSISTENT_STATES)。ScalarDL がデータ改ざんを検出する方法の例として、以下を参照してください。

      [コマンド実行結果(資産データが改ざんされている場合)]

      {
      "status_code" : "INCONSISTENT_STATES",
      "error_message" : "The results from Ledger and Auditor don't match"
      }
  16. アセットの検証リクエストを実行します。

    ./scalardl-java-client-sdk-${SCALAR_DL_VERSION}/bin/scalardl validate-ledger --config ./client.properties --asset-id "test_asset"

    [コマンド実行結果]

    {
    "status_code" : "OK",
    "Ledger" : {
    "id" : "test_asset",
    "age" : 0,
    "nonce" : "3533427d-03cf-41d1-bf95-4d31eb0cb24d",
    "hash" : "FiquvtPMKLlxKf4VGoccSAGsi9ptn4ozYVVTwdSzEQ0=",
    "signature" : "MEYCIQDiiXqzw6K+Ml4uvn8rK43o5wHWESU3hoXnZPi6/OeKVwIhAM+tFBcapl6zg47Uq0Uc8nVNGWNHZLBDBGve3F0xkzTR"
    },
    "Auditor" : {
    "id" : "test_asset",
    "age" : 0,
    "nonce" : "3533427d-03cf-41d1-bf95-4d31eb0cb24d",
    "hash" : "FiquvtPMKLlxKf4VGoccSAGsi9ptn4ozYVVTwdSzEQ0=",
    "signature" : "MEUCIQDLsfUR2PmxSvfpL3YvHJUkz00RDpjCdctkroZKXE8d5QIgH73FQH2e11jfnynD00Pp9DrIG1vYizxDsvxUsMPo9IU="
    }
    }

    参考情報

    • 資産データが改ざんされていない場合、validate-ledger コマンドを実行して検証を要求すると、結果として OK が返されます。

    • 資産データが改ざんされている場合 (たとえば、データベース内の state 値が改ざんされている場合)、validate-ledger コマンドを実行して検証を要求すると、実行結果として OK 以外の値が返されます (たとえば、INVALID_OUTPUT)。 ScalarDL がデータ改ざんを検出する方法の例として、以下を参照してください。

      [コマンド実行結果(資産データが改ざんされている場合)]

      {
      "status_code" : "INCONSISTENT_STATES",
      "error_message" : "The results from Ledger and Auditor don't match"
      }

ステップ 9. すべてのリソースを削除する

Kubernetes クラスターで ScalarDL Ledger テストと ScalarDL Auditor テストを完了したら、すべてのリソースを削除します。

  1. ScalarDL Ledger、ScalarDL Auditor、ScalarDL Schema Loader、および PostgreSQL をアンインストールします。

    helm uninstall -n default scalardl-ledger schema-loader-ledger postgresql-ledger scalardl-auditor schema-loader-auditor postgresql-auditor
  2. クライアントコンテナを削除します。

    kubectl delete pod scalardl-client --grace-period 0 -n default
  3. シークレットリソースを削除します。

    kubectl delete secrets envoy-tls-key envoy-tls-cert schema-ledger-credentials-secret schema-auditor-credentials-secret ledger-credentials-secret scalardl-ledger-tls-ca scalardl-ledger-tls-cert scalardl-ledger-tls-key auditor-credentials-secret auditor-keys scalardl-auditor-tls-ca scalardl-auditor-tls-cert scalardl-auditor-tls-key scalardl-auditor-tls-ca-for-ledger client-ca-cert
  4. 作業ディレクトリとサンプル ファイル (構成ファイル、秘密キー、および証明書) を削除します。

    cd ${HOME}
    rm -rf ${HOME}/scalardl-test/

参考文献

Scalar 製品の監視またはログ記録を開始する方法については、次のドキュメントで説明しています。