ScalarDB Analytics server のカスタム値ファイルを構成する
このドキュメントでは、ScalarDB Analytics server チ ャートのカスタム値ファイルを作成する方法について説明します。パラメータの詳細については、ScalarDB Analytics server チャートの README を参照してください。
必要な構成
このセクションでは、必須の設定項目であるイメージ、データベース、およびサービスの構成について説明します。
コンテナイメージ構成
scalarDbAnalyticsServer.image.repository を設定する必要があります。コンテナリポジトリからイメージをプルできるように、必ず ScalarDB Analytics server コンテナイメージを指定してください。
scalarDbAnalyticsServer:
image:
repository: <SCALARDB_ANALYTICS_SERVER_CONTAINER_IMAGE>
データベース構成
scalarDbAnalyticsServer.properties を設定する必要があります。このパラメータの値の設定の詳細については、ScalarDB Analytics サーバー設定参照してください。
scalarDbAnalyticsServer:
properties: |
scalar.db.analytics.server.db.url=jdbc:postgresql://localhost:5432/scalardb_analytics
scalar.db.analytics.server.db.username=analytics_user
scalar.db.analytics.server.db.password=your_secure_password
サービス構成
Kubernetes のサービスリソースタイプを指定するには、scalarDbAnalyticsServer.service.type を設定する必要があります。
ScalarDB Analytics server が Kubernetes クラスターの内部からのみクライアントリクエストを受け入れる場合 (たとえば、クライアントアプリケーションを Scalar 製品と同じ Kubernetes クラスターにデプロイする場合)、scalarDbAnalyticsServer.service.type を ClusterIP に設定できます。この構成では、クラウドサービスプロバイダーが提供するロードバランサーは作成されません。
scalarDbAnalyticsServer:
service:
type: ClusterIP
クラウドサービスプロバイダーが提供するロードバランサーを使用して、Kubernetes クラスターの外部からのクライアントリクエストを受け入れる場合は、scalarDbAnalyticsServer.service.type を LoadBalancer に設定する必要があります。
scalarDbAnalyticsServer:
service:
type: LoadBalancer
アノテーションを介してロードバランサを設定したい場合は、アノテーションを scalarDbAnalyticsServer.service.annotations に設定することもできます。
scalarDbAnalyticsServer:
service:
type: LoadBalancer
annotations:
service.beta.kubernetes.io/aws-load-balancer-internal: "true"
service.beta.kubernetes.io/aws-load-balancer-type: "nlb"
オプションの構成
シークレット構成 (運用環境で推奨)
環境変数を使用してプロパティ (資格情報など) を設定するには、scalarDbAnalyticsServer.secretName を使用して、資格情報を含む Secret リソースを指定します。
たとえば、環境変数を使用してバックエンドデータベースの資格情報 (scalar.db.analytics.server.db.username and scalar.db.analytics.server.db.password) を設定できるため、Pod の安全性が高まります。
scalarDbAnalyticsServer:
secretName: "scalardb-analytics-server-credentials-secret"
ScalarDB Analytics server は、特定の環境変数から設定を自動的に読み込みます。環境変数の命名規則は次のとおりです。
- プロパティ名のすべての文字を大文字にします。
- ピリオド (
.) を アンダースコア (_) に置き換えます。
たとえば、scalar.db.analytics.server.db.username と scalar.db.analytics.server.db.password を環境変数で設定する場合は、SCALAR_DB_ANALYTICS_SERVER_DB_USERNAME と SCALAR_DB_ANALYTICS_SERVER_DB_PASSWORD という環境変数を設定する必要があります。
この場合、scalarDbAnalyticsServer.properties で scalar.db.analytics.server.db.username と scalar.db.analytics.server.db.password を設定する必要はありません。環境変数のみを設定すれば十分です。
たとえば、次のようにして、SCALAR_DB_ANALYTICS_SERVER_DB_USERNAME と SCALAR_DB_ANALYTICS_SERVER_DB_PASSWORD を含むシークレットリソースを作成できます。
kubectl create secret generic scalardb-analytics-server-credentials-secret \
--from-literal=SCALAR_DB_ANALYTICS_SERVER_DB_USERNAME=analytics_user \
--from-literal=SCALAR_DB_ANALYTICS_SERVER_DB_PASSWORD=your_secure_password
SecurityContext 設定 (デフォルト値を推奨)
ScalarDB Analytics server Pod の SecurityContext と PodSecurityContext を設定するには、scalarDbAnalyticsServer.securityContext と scalarDbAnalyticsServer.podSecurityContext を使用できます。
Kubernetes の SecurityContext および PodSecurityContext と同じ構文を使用して、SecurityContext および PodSecurityContext を構成できます。Kubernetes の SecurityContext および PodSecurityContext 構成の詳細については、Configure a Security Context for a Pod or Container を参照してください。
scalarDbAnalyticsServer:
podSecurityContext:
seccompProfile:
type: RuntimeDefault
securityContext:
capabilities:
drop:
- ALL
runAsNonRoot: true
allowPrivilegeEscalation: false
TLS 構成 (環境に応じてオプション)
TLS は、次の通信で有効にできます:
- ScalarDB Analytics server とクライアント間の通信。
証明書管理にはいくつかのオプションがあります。
- 秘密鍵と証明書ファイルの管理
- cert-manager を使用して秘密鍵と証明書ファイルを自動的に管理します。
- メンテナンスや運用のコストを削減できます。たとえば、cert-manager は証明書の有効期限が切れる前に自動的に更新し、Scalar Helm Chart は秘密鍵と証明書ファイルを Scalar 製品ポッドに自動的にマウントします。
- cert-manager がサポートしていない CA は使用できません。サポートされている発行元は cert-manager ドキュメントで確認できます。
- 秘密鍵と証明書ファイルを手動で管理します。
- ご自身のお好みの方法で、秘密鍵と証明書ファイルを発行・管理することができます。
- cert-manager がサポートしていない場合でも、任意の証明書を使用できます。
- 証明書の有効期限が切れた場合は、シークレットリソースを更新する必要があります。
- cert-manager を使用して秘密鍵と証明書ファイルを自動的に管理します。
- 証明書の種類
- 信頼できる CA (サードパーティによる署名付き証明書) を使用します。
- サードパーティの証明書発行者からの信頼できる証明書を使用できます。
- パケットを暗号化できます。
- 信頼できる証明書を発行するには費用を支払う必要があります。
- 自己署名証明書を使用します。
- 証明書発行にかかるコストを削減できます。
- 証明書の信頼性は信頼できる CA よりも低くなりますが、パケットを暗号化できます。
- 信頼できる CA (サードパーティによる署名付き証明書) を使用します。
つまり、次の4つのオプションがあります。
- 自動管理で自己署名 CA を使用します。
- 自動管理で信頼できる CA を使用します。
- 手動管理で自己署名 CA を使用します。
- 手動管理で信頼できる CA を使用します。
セキュリティ要件に基づいて、どの方法を使用するかを検討する必要があります。各方法のガイダンスと関連ドキュメントについては、次の意思決定ツリーを参照してください。
TLS を有効にする
次の構成を使用して、すべての ScalarDB Analytics server 接続で TLS を有効にできます。
scalarDbAnalyticsServer:
properties: |
...(omit)...
scalar.db.analytics.server.tls.enabled=true
scalar.db.analytics.server.tls.cert_chain_path=/tls/scalardb-analytics-server/certs/tls.crt
scalar.db.analytics.server.tls.private_key_path=/tls/scalardb-analytics-server/certs/tls.key
tls:
enabled: true
cert-manager によって生成される秘密鍵と証明書の仕様、およびこの表の仕様に基づき、TLS 機能を有効にする場合は、固定のファイルパスとファイル名を設定する必要があります。scalar.db.analytics.server.tls.cert_chain_path および scalar.db.analytics.server.tls.private_key_path には、上記のファイルパスとファイル名をそのまま設定してください。
秘密鍵と証明書ファイルを使用する
次の構成を使用して、秘密鍵と証明書ファイルを設定できます。
scalarDbAnalyticsServer:
tls:
enabled: true
caRootCertSecret: "scalardb-analytics-server-tls-ca"
certChainSecret: "scalardb-analytics-server-tls-cert"
privateKeySecret: "scalardb-analytics-server-tls-key"
この場合、次のように山括弧内の内容を置き換えて、ScalarDB Analytics server の秘密鍵と証明書ファイルを含むシークレットリソースを作成する必要があります。
kubectl create secret generic scalardb-analytics-server-tls-ca --from-file=ca.crt=<PATH_TO_YOUR_CA_CERTIFICATE_FILE_FOR_SCALARDB_ANALYTICS_SERVER> -n <NAMESPACE>
kubectl create secret generic scalardb-analytics-server-tls-cert --from-file=tls.crt=<PATH_TO_YOUR_CERTIFICATE_FILE_FOR_SCALARDB_ANALYTICS_SERVER> -n <NAMESPACE>
kubectl create secret generic scalardb-analytics-server-tls-key --from-file=tls.key=<PATH_TO_YOUR_PRIVATE_KEY_FILE_FOR_SCALARDB_ANALYTICS_SERVER> -n <NAMESPACE>
秘密鍵と証明書ファイルを準備する方法の詳細については、Scalar 製品の秘密鍵と証明書ファイルを作成する方法を参照してください。
cert-manager で信頼できる CA を使用して秘密鍵と証明書ファイルを管理する
次の構成を使用して、山括弧内の内容を説明に従って置き換えることで、cert-manager で秘密鍵と証明書ファイルを管理できます。
- cert-manager を使用する場合は、cert-manager をデプロイし、
Issuersリソースを準備する必要があります。詳細については、cert-manager のドキュメント、インストールおよび発行者構成を参照してください。 - デフォルトでは、Scalar Helm Chart は Scalar 製品の証明書要件を満たす
Certificateリソースを作成します。デフォルトの証明書構成が推奨されますが、カスタム証明書構成を使用する場合は、Scalar 製品の証明書要件を満たす必要があります。詳細については、Scalar 製品の秘密鍵と証明書ファイルを作成する方法を参照してください。
scalarDbAnalyticsServer:
tls:
enabled: true
certManager:
enabled: true
issuerRef:
name: <YOUR_TRUSTED_CA>
dnsNames:
- server.analytics.scalardb.example.com
この場合、cert-manager は信頼できる発行者を使用して秘密鍵と証明書ファイルを発行します。秘密鍵と証明書ファイルを手動でマウントする必要はありません。
cert-manager で自己署名 CA を使用して秘密鍵と証明書ファイルを管理する
次の構成を使用して、cert-manager で秘密鍵と自己署名証明書ファイルを管理できます。
- cert-manager を使用する場合は、cert-manager をデプロイする必要があります。詳細については、cert-manager のドキュメントインストールを参照してください。
- デフォルトでは、Scalar Helm Chart は Scalar 製品の証明書要件を満たす
Certificateリソースを作成します。デフォルトの証明書構成が推奨されますが、カスタム証明書構成を使用する場合は、Scalar 製品の証明書要件を満たす必要があります。詳細については、Scalar 製品の秘密鍵と証明書ファイルを作成する方法を参照してください。
scalarDbAnalyticsServer:
tls:
enabled: true
certManager:
enabled: true
selfSigned:
enabled: true
dnsNames:
- server.analytics.scalardb.example.com
この場合、Scalar Helm Charts と cert-manager が秘密鍵と自己署名証明書ファイルを発行します。秘密鍵と証明書ファイルを手動でマウントする必要はありません。
TLS通信のカスタム権限を設定する
scalarDbAnalyticsServer.tls.overrideAuthority を使用して、TLS 通信のカスタム権限を設定できます。この値によって、実際に接続されているホストが変わることはありません。この値はテスト用ですが、DNS オーバーライドの代替としてテスト以外でも安全に使用できます。たとえば、scalarDbAnalyticsServer.tls.certChainSecret を使用して設定した証明書チェーンファイルで提示されるホスト名を指定できます。このチャートでは、ヘルスチェックリクエスト (startupProbe と livenessProbe) にこの値を使用しています。
scalarDbAnalyticsServer:
tls:
enabled: true
overrideAuthority: "server.analytics.scalardb.example.com"
アフィニティ構成 (環境に応じてオプション)
Kubernetes でアフィニティとアンチアフィニティを使用して Pod のデプロイメントを制御するには、scalarDbAnalyticsServer.affinity を使用できます。
Kubernetes のアフィニティとアンチアフィニティと同じ構文を使用して、アフィニティとアンチアフィニティを構成できます。Kubernetes でのアフィニティの構成の詳細については、Assigning Pods to Nodes を参照してください。
scalarDbAnalyticsServer:
affinity:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- podAffinityTerm:
labelSelector:
matchExpressions:
- key: app.kubernetes.io/name
operator: In
values:
- scalardb-analytics-server
- key: app.kubernetes.io/app
operator: In
values:
- scalardb-analytics-server
topologyKey: kubernetes.io/hostname
weight: 50
汚染と許容の構成 (環境に応じてオプション)
Kubernetes のテイントと許容を使用して Pod のデプロイメントを制御したい場合は、scalarDbAnalyticsServer.tolerations を使用できます。
Kubernetes の許容と同じ構文を使用して、テイントと許容を 構成できます。Kubernetes での許容設定の詳細については、Kubernetes の公式ドキュメント Taints and Tolerations を参照してください。
scalarDbAnalyticsServer:
tolerations:
- effect: NoSchedule
key: scalar-labs.com/dedicated-node
operator: Equal
value: scalardb-analytics-server