Helm Charts の入門 (ScalarDL Ledger と Auditor / Auditor モード)
このページは英語版のページが機械翻訳されたものです。英語版との間に矛盾または不一致がある場合は、英語版を正としてください。
このドキュメントでは、Kubernetes クラスター上の Helm Chart をテスト環境として使用して、ScalarDL Ledger および Auditor を開始する方法について説明します。 ここでは、テスト用の Mac または Linux 環境がすでにあることを前提としています。 このドキュメントでは Minikube を使用しますが、これから説明する手順はどの Kubernetes クラスターでも機能するはずです。
要件
以下のコンテナイメージを取得するには、AWS Marketplace または Azure Marketplace でScalarDL Ledger および ScalarDL Auditor をサブスクライブする必要があります。
- AWS Marketplace
- scalar-ledger
- scalar-ledger-envoy
- scalardl-schema-loader-ledger
- scalar-auditor
- scalar-auditor-envoy
- scalardl-schema-loader-auditor
- Azure Marketplace
- scalar-ledger
- scalar-auditor
- scalardl-envoy
- scalardl-schema-loader
詳細については、以下のドキュメントを参照してください。
- How to install Scalar products through AWS Marketplace
- How to install Scalar products through Azure Marketplace
注記
監査によるビザンチン障害検出を適切に機能させるには、Ledger と Auditor を異なる管理ドメインに展開して管理する必要があります。 ただし、このガイドでは、テストを容易にするために、Ledger と Auditor を同じ Kubernetes クラスターにデプロイします。
私たちが作るもの
次のように、次のコンポーネントを Kubernetes クラスターにデプロイします。
+-----------------------------------------------------------------------------------------------------------------------------+
| [Kubernetes クラスター] |
| [ポッド] [ポッド] [ポッド] |
| |
| +-------+ +---------+ |
| +---> | Envoy | ---+ +---> | Ledger | ---+ |
| | +-------+ | | +---------+ | |
| | | | | |
| +---------+ | +-------+ | +-----------+ | +---------+ | +---------------+ |
| +---> | サービス | ---+---> | Envoy | ---+---> | サービス | ---+---> | Ledger | ---+---> | PostgreSQL | |
| | | (Envoy) | | +-------+ | | (Ledger) | | +---------+ | | (Ledger 用) | |
| | +---------+ | | +-----------+ | | +---------------+ |
| | | +-------+ | | +---------+ | |
| | +---> | Envoy | ---+ +---> | Ledger | ---+ |
| +--------+ | +-------+ +---------+ |
| | クライアント | ---+ |
| +--------+ | +-------+ +---------+ |
| | +---> | Envoy | ---+ +---> | Auditor | ---+ |
| | | +-------+ | | +---------+ | |
| | | | | | |
| | +---------+ | +-------+ | +-----------+ | +---------+ | +---------------+ |
| +---> | サービス | ---+---> | Envoy | ---+---> | サービス | ---+---> | Auditor | ---+---> | PostgreSQL | |
| | (Envoy) | | +-------+ | | (Auditor) | | +---------+ | | (Auditor 用) | |
| +---------+ | | +-----------+ | | +---------------+ |
| | +-------+ | | +---------+ | |
| +---> | Envoy | ---+ +---> | Auditor | ---+ |
| +-------+ +---------+ |
| |
+-----------------------------------------------------------------------------------------------------------------------------+
ステップ 1. Kubernetes クラスターを開始する
まず、Kubernetes クラスターを準備する必要があります。 minikube 環境を使用する場合は、[Scalar Helm Charts の入門] (./getting-started-scalar-helm-charts.mdx)を参照してください。 すでに Kubernetes クラスターを開始している場合は、この手順をスキップできます。
ステップ 2. PostgreSQL コンテナーを開始する
ScalarDL Ledger と Auditor は、バックエンド データベースとして何らかのデータベース システムを使用します。 このドキュメントでは PostgreSQL を使用します。
次のようにして、Kubernetes クラスターに PostgreSQL をデプロイできます。
-
Bitnami Helm リポジトリを追加します。
helm repo add bitnami https://charts.bitnami.com/bitnami
-
Ledger 用に PostgreSQL をデプロイします。
helm install postgresql-ledger bitnami/postgresql \
--set auth.postgresPassword=postgres \
--set primary.persistence.enabled=false -
Auditor 用に PostgreSQL をデプロイします。
helm install postgresql-auditor bitnami/postgresql \
--set auth.postgresPassword=postgres \
--set primary.persistence.enabled=false -
PostgreSQL コンテナが実行されているかどうかを確認します。
kubectl get pod
【コマンド実行結果】
NAME READY STATUS RESTARTS AGE
postgresql-auditor-0 1/1 Running 0 11s
postgresql-ledger-0 1/1 Running 0 16s
ステップ 3. 作業ディレクトリを作成する
いくつかの構成ファイルとキー/証明書ファイルをローカルに作成します。 したがって、それらの作業ディレクトリを作成します。
- 作業ディレクトリを作成します。
mkdir -p ~/scalardl-test/certs/
Step 4. Create key/certificate files
注記:このガイドでは、テストに自己署名証明書を使用します。 ただし、これらの証明書を運用環境では使用しないことを強くお勧めします。
-
作業ディレクトリを
~/scalardl-test/certs/
ディレクトリに変更します。cd ~/scalardl-test/certs/
-
Ledger 情報を含む JSON ファイルを作成します。
cat << 'EOF' > ~/scalardl-test/certs/ledger.json
{
"CN": "ledger",
"hosts": ["example.com","*.example.com"],
"key": {
"algo": "ecdsa",
"size": 256
},
"names": [
{
"O": "ledger",
"OU": "test team",
"L": "Shinjuku",
"ST": "Tokyo",
"C": "JP"
}
]
}
EOF -
Auditor 情報を含む JSON ファイルを作成します。
cat << 'EOF' > ~/scalardl-test/certs/auditor.json
{
"CN": "auditor",
"hosts": ["example.com","*.example.com"],
"key": {
"algo": "ecdsa",
"size": 256
},
"names": [
{
"O": "auditor",
"OU": "test team",
"L": "Shinjuku",
"ST": "Tokyo",
"C": "JP"
}
]
}
EOF -
クライアント情報を含む JSON ファイルを作成します。
cat << 'EOF' > ~/scalardl-test/certs/client.json
{
"CN": "client",
"hosts": ["example.com","*.example.com"],
"key": {
"algo": "ecdsa",
"size": 256
},
"names": [
{
"O": "client",
"OU": "test team",
"L": "Shinjuku",
"ST": "Tokyo",
"C": "JP"
}
]
}
EOF -
Ledger のキー/証明書ファイルを作成します。
cfssl selfsign "" ./ledger.json | cfssljson -bare ledger
-
Auditor のキー/証明書ファイルを作成します。
cfssl selfsign "" ./auditor.json | cfssljson -bare auditor
-
クライアントのキー/証明書ファイルを作成します。
cfssl selfsign "" ./client.json | cfssljson -bare client
-
キー/証明書ファイルが作成されたことを確認します。
ls -1
【コマンド実行結果】
auditor-key.pem
auditor.csr
auditor.json
auditor.pem
client-key.pem
client.csr
client.json
client.pem
ledger-key.pem
ledger.csr
ledger.json
ledger.pem
ステップ 5. Helm Charts を使用して ScalarDL Ledger の DB スキーマを作成する
Helm Chart を使用して、Kubernetes クラスターに 2 つの ScalarDL Schema Loader ポッドをデプロイします。 ScalarDL Schema Loader は、PostgreSQL で ScalarDL Ledger と Auditor の DB スキーマを作成します。
-
作業ディレクトリを
~/scalardl-test/
に変更します。cd ~/scalardl-test/
-
Scalar helm リポジトリを追加します。
helm repo add scalar-labs https://scalar-labs.github.io/helm-charts
-
AWS/Azure Marketplace から ScalarDL コンテナー イメージをプルするためのシークレット リソースを作成します。
- AWS Marketplace
kubectl create secret docker-registry reg-ecr-mp-secrets \
--docker-server=709825985650.dkr.ecr.us-east-1.amazonaws.com \
--docker-username=AWS \
--docker-password=$(aws ecr get-login-password --region us-east-1) - Azure Marketplace
kubectl create secret docker-registry reg-acr-secrets \
--docker-server=<your private container registry login server> \
--docker-username=<Service principal ID> \
--docker-password=<Service principal password>
詳細については、以下のドキュメントを参照してください。
- AWS Marketplace
-
ScalarDL Schema Loader for Ledger のカスタム値ファイル (schema-loader-ledger-custom-values.yaml) を作成します。
-
AWS Marketplace
cat << 'EOF' > ~/scalardl-test/schema-loader-ledger-custom-values.yaml
schemaLoading:
schemaType: "ledger"
image:
repository: "709825985650.dkr.ecr.us-east-1.amazonaws.com/scalar/scalardl-schema-loader-ledger"
version: "3.6.0"
imagePullSecrets:
- name: "reg-ecr-mp-secrets"
databaseProperties: |
scalar.db.contact_points=jdbc:postgresql://postgresql-ledger.default.svc.cluster.local:5432/postgres
scalar.db.username={{ default .Env.SCALAR_DL_LEDGER_POSTGRES_USERNAME "" }}
scalar.db.password={{ default .Env.SCALAR_DL_LEDGER_POSTGRES_PASSWORD "" }}
scalar.db.storage=jdbc
secretName: "ledger-credentials-secret"
EOF -
Azure Marketplace
cat << 'EOF' > ~/scalardl-test/schema-loader-ledger-custom-values.yaml
schemaLoading:
schemaType: "ledger"
image:
repository: "<your private container registry>/scalarinc/scalardl-schema-loader"
version: "3.6.0"
imagePullSecrets:
- name: "reg-acr-secrets"
databaseProperties: |
scalar.db.contact_points=jdbc:postgresql://postgresql-ledger.default.svc.cluster.local:5432/postgres
scalar.db.username={{ default .Env.SCALAR_DL_LEDGER_POSTGRES_USERNAME "" }}
scalar.db.password={{ default .Env.SCALAR_DL_LEDGER_POSTGRES_PASSWORD "" }}
scalar.db.storage=jdbc
secretName: "ledger-credentials-secret"
EOF
-
-
Auditor 用の ScalarDL Schema Loader のカスタム値ファイル (schema-loader-auditor-custom-values.yaml) を作成します。
-
AWS Marketplace
cat << 'EOF' > ~/scalardl-test/schema-loader-auditor-custom-values.yaml
schemaLoading:
schemaType: "auditor"
image:
repository: "709825985650.dkr.ecr.us-east-1.amazonaws.com/scalar/scalardl-schema-loader-auditor"
version: "3.6.0"
imagePullSecrets:
- name: "reg-ecr-mp-secrets"
databaseProperties: |
scalar.db.contact_points=jdbc:postgresql://postgresql-auditor.default.svc.cluster.local:5432/postgres
scalar.db.username={{ default .Env.SCALAR_DL_AUDITOR_POSTGRES_USERNAME "" }}
scalar.db.password={{ default .Env.SCALAR_DL_AUDITOR_POSTGRES_PASSWORD "" }}
scalar.db.storage=jdbc
secretName: "auditor-credentials-secret"
EOF -
Azure Marketplace
cat << 'EOF' > ~/scalardl-test/schema-loader-auditor-custom-values.yaml
schemaLoading:
schemaType: "auditor"
image:
repository: "<your private container registry>/scalarinc/scalardl-schema-loader"
version: "3.6.0"
imagePullSecrets:
- name: "reg-acr-secrets"
databaseProperties: |
scalar.db.contact_points=jdbc:postgresql://postgresql-auditor.default.svc.cluster.local:5432/postgres
scalar.db.username={{ default .Env.SCALAR_DL_AUDITOR_POSTGRES_USERNAME "" }}
scalar.db.password={{ default .Env.SCALAR_DL_AUDITOR_POSTGRES_PASSWORD "" }}
scalar.db.storage=jdbc
secretName: "auditor-credentials-secret"
EOF
-
-
PostgreSQL for Ledger のユーザー名とパスワードを含むシークレット リソースを作成します。
kubectl create secret generic ledger-credentials-secret \
--from-literal=SCALAR_DL_LEDGER_POSTGRES_USERNAME=postgres \
--from-literal=SCALAR_DL_LEDGER_POSTGRES_PASSWORD=postgres -
PostgreSQL for Auditor のユーザー名とパスワードを含むシークレット リソースを作成します。
kubectl create secret generic auditor-credentials-secret \
--from-literal=SCALAR_DL_AUDITOR_POSTGRES_USERNAME=postgres \
--from-literal=SCALAR_DL_AUDITOR_POSTGRES_PASSWORD=postgres -
Ledger 用の ScalarDL Schema Loader をデプロイします。
helm install schema-loader-ledger scalar-labs/schema-loading -f ./schema-loader-ledger-custom-values.yaml
-
Auditor 用の ScalarDL Schema Loader をデプロイします。
helm install schema-loader-auditor scalar-labs/schema-loading -f ./schema-loader-auditor-custom-values.yaml
-
ScalarDL Schema Loader ポッドがデプロイされ、完了しているかどうかを確認します。
kubectl get pod
【コマンド実行結果】
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 10sScalarDL Schema Loader ポッドが ContainerCreating または Running の場合は、プロセスが完了するまで待ちます (STATUS は Completed になります)。
ステップ 6. Helm Chart を使用して Kubernetes クラスターに ScalarDL Ledger と Auditor をデプロイする
-
ScalarDL Ledger のカスタム値ファイル (scalardl-ledger-custom-values.yaml) を作成します。
-
AWS Marketplace
cat << 'EOF' > ~/scalardl-test/scalardl-ledger-custom-values.yaml
envoy:
image:
repository: "709825985650.dkr.ecr.us-east-1.amazonaws.com/scalar/scalar-ledger-envoy"
version: "1.3.0"
imagePullSecrets:
- name: "reg-ecr-mp-secrets"
ledger:
image:
repository: "709825985650.dkr.ecr.us-east-1.amazonaws.com/scalar/scalar-ledger"
version: "3.6.0"
imagePullSecrets:
- name: "reg-ecr-mp-secrets"
ledgerProperties: |
scalar.db.contact_points=jdbc:postgresql://postgresql-ledger.default.svc.cluster.local:5432/postgres
scalar.db.username={{ default .Env.SCALAR_DL_LEDGER_POSTGRES_USERNAME "" }}
scalar.db.password={{ default .Env.SCALAR_DL_LEDGER_POSTGRES_PASSWORD "" }}
scalar.db.storage=jdbc
scalar.dl.ledger.proof.enabled=true
scalar.dl.ledger.auditor.enabled=true
scalar.dl.ledger.proof.private_key_path=/keys/private-key
secretName: "ledger-credentials-secret"
extraVolumes:
- name: "ledger-keys"
secret:
secretName: "ledger-keys"
extraVolumeMounts:
- name: "ledger-keys"
mountPath: "/keys"
readOnly: true
EOF -
Azure Marketplace
cat << 'EOF' > ~/scalardl-test/scalardl-ledger-custom-values.yaml
envoy:
image:
repository: "<your private container registry>/scalarinc/scalardl-envoy"
version: "1.3.0"
imagePullSecrets:
- name: "reg-acr-secrets"
ledger:
image:
repository: "<your private container registry>/scalarinc/scalar-ledger"
version: "3.6.0"
imagePullSecrets:
- name: "reg-acr-secrets"
ledgerProperties: |
scalar.db.contact_points=jdbc:postgresql://postgresql-ledger.default.svc.cluster.local:5432/postgres
scalar.db.username={{ default .Env.SCALAR_DL_LEDGER_POSTGRES_USERNAME "" }}
scalar.db.password={{ default .Env.SCALAR_DL_LEDGER_POSTGRES_PASSWORD "" }}
scalar.db.storage=jdbc
scalar.dl.ledger.proof.enabled=true
scalar.dl.ledger.proof.private_key_path=/keys/private-key
secretName: "ledger-credentials-secret"
extraVolumes:
- name: "ledger-keys"
secret:
secretName: "ledger-keys"
extraVolumeMounts:
- name: "ledger-keys"
mountPath: "/keys"
readOnly: true
EOF
-
-
ScalarDL Auditor のカスタム値ファイル (scalardl-auditor-custom-values.yaml) を作成します。
-
AWS Marketplace
cat << 'EOF' > ~/scalardl-test/scalardl-auditor-custom-values.yaml
envoy:
image:
repository: "709825985650.dkr.ecr.us-east-1.amazonaws.com/scalar/scalar-auditor-envoy"
version: "1.3.0"
imagePullSecrets:
- name: "reg-ecr-mp-secrets"
auditor:
image:
repository: "709825985650.dkr.ecr.us-east-1.amazonaws.com/scalar/scalar-auditor"
version: "3.6.0"
imagePullSecrets:
- name: "reg-ecr-mp-secrets"
auditorProperties: |
scalar.db.contact_points=jdbc:postgresql://postgresql-auditor.default.svc.cluster.local:5432/postgres
scalar.db.username={{ default .Env.SCALAR_DL_AUDITOR_POSTGRES_USERNAME "" }}
scalar.db.password={{ default .Env.SCALAR_DL_AUDITOR_POSTGRES_PASSWORD "" }}
scalar.db.storage=jdbc
scalar.dl.auditor.ledger.host=scalardl-ledger-envoy.default.svc.cluster.local
scalar.dl.auditor.cert_path=/keys/certificate
scalar.dl.auditor.private_key_path=/keys/private-key
secretName: "auditor-credentials-secret"
extraVolumes:
- name: "auditor-keys"
secret:
secretName: "auditor-keys"
extraVolumeMounts:
- name: "auditor-keys"
mountPath: "/keys"
readOnly: true
EOF -
Azure Marketplace
cat << 'EOF' > ~/scalardl-test/scalardl-auditor-custom-values.yaml
envoy:
image:
repository: "<your private container registry>/scalarinc/scalardl-envoy"
version: "1.3.0"
imagePullSecrets:
- name: "reg-acr-secrets"
auditor:
image:
repository: "<your private container registry>/scalarinc/scalar-auditor"
version: "3.6.0"
imagePullSecrets:
- name: "reg-acr-secrets"
auditorProperties: |
scalar.db.contact_points=jdbc:postgresql://postgresql-auditor.default.svc.cluster.local:5432/postgres
scalar.db.username={{ default .Env.SCALAR_DL_AUDITOR_POSTGRES_USERNAME "" }}
scalar.db.password={{ default .Env.SCALAR_DL_AUDITOR_POSTGRES_PASSWORD "" }}
scalar.db.storage=jdbc
scalar.dl.auditor.ledger.host=scalardl-ledger-envoy.default.svc.cluster.local
scalar.dl.auditor.cert_path=/keys/certificate
scalar.dl.auditor.private_key_path=/keys/private-key
secretName: "auditor-credentials-secret"
extraVolumes:
- name: "auditor-keys"
secret:
secretName: "auditor-keys"
extraVolumeMounts:
- name: "auditor-keys"
mountPath: "/keys"
readOnly: true
EOF
-
-
秘密リソース
ledger-keys
を作成します。kubectl create secret generic ledger-keys --from-file=certificate=./certs/ledger.pem --from-file=private-key=./certs/ledger-key.pem
-
秘密リソース
auditor-keys
を作成します。kubectl create secret generic auditor-keys --from-file=certificate=./certs/auditor.pem --from-file=private-key=./certs/auditor-key.pem
-
ScalarDL Ledger をデプロイします。
helm install scalardl-ledger scalar-labs/scalardl -f ./scalardl-ledger-custom-values.yaml
-
ScalarDL Auditor をデプロイします。
helm install scalardl-auditor scalar-labs/scalardl-audit -f ./scalardl-auditor-custom-values.yaml
-
ScalarDL Ledger および Auditor ポッドがデプロイされているかどうかを確認します。
kubectl get pod
【コマンド実行結果】
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 11mScalarDL Ledger および Auditor ポッドが適切にデプロイされている場合、STATUS が Running であることがわかります。
-
ScalarDL Ledger サービスと Auditor サービスがデプロイされているかどうかを確認します。
kubectl get svc
【コマンド実行結果】
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 61sScalarDL Ledger サービスと Auditor サービスが適切にデプロイされている場合は、CLUSTER-IP 列にプライベート IP アドレスが表示されます。 (注記:
scalardl-ledger-headless
とscalardl-auditor-headless
には CLUSTER-IP がありません。)
ステップ 7. クライアントコンテナを開始する
クライアントコンテナで証明書ファイルを使用します。 そこで、シークレット リソースを作成し、クライアント コンテナにマウントします。
-
秘密リソース
client-keys
を作成します。kubectl create secret generic client-keys --from-file=certificate=./certs/client.pem --from-file=private-key=./certs/client-key.pem
-
Kubernetes クラスター上でクライアント コンテナーを起動します。
cat << 'EOF' | kubectl apply -f -
apiVersion: v1
kind: Pod
metadata:
name: "scalardl-client"
spec:
containers:
- name: scalardl-client
image: eclipse-temurin:8
command: ['sleep']
args: ['inf']
volumeMounts:
- name: "ledger-keys"
mountPath: "/keys/ledger"
readOnly: true
- name: "auditor-keys"
mountPath: "/keys/auditor"
readOnly: true
- name: "client-keys"
mountPath: "/keys/client"
readOnly: true
volumes:
- name: "ledger-keys"
secret:
secretName: "ledger-keys"
- name: "auditor-keys"
secret:
secretName: "auditor-keys"
- name: "client-keys"
secret:
secretName: "client-keys"
restartPolicy: Never
EOF -
クライアントコンテナが実行されているかどうかを確認します。
kubectl get pod scalardl-client
【コマンド実行結果】
NAME READY STATUS RESTARTS AGE
scalardl-client 1/1 Running 0 4s