Cloud Native Experience Kubernetes Ready
ご覧のページは、お客様の利便性のために一部機械翻訳されています。また、ドキュメントは頻繁に更新が加えられており、翻訳は未完成の部分が含まれることをご了承ください。最新情報は都度公開されておりますため、必ず英語版をご参照ください。翻訳に問題がある場合は、 こちら までご連絡ください。

CNE Kubernetes Ready: 外部依存関係の設定

Kubernetes Readyデプロイメントは、永続化、検索、オブジェクトストレージ、ライセンス管理、およびシークレット管理のために、外部で管理されるプラットフォームサービスに依存しています。 liferay-default Helm チャートはこれらの依存関係をプロビジョニングしません。 その代わりに、Liferayコンテナに設定を注入する拡張ポイントを提供します。

外部サービスは、Kubernetes Secrets、ConfigMaps、マウントされたファイル、およびHelmの値を介してLiferayに接続します。

これらのパターンでは、データベース、検索、ストレージをポッドの外に移動させることで、LiferayがKubernetes上でステートレスなワークロードとして実行されるようにします。

概念と用語

Kubernetes Ready構成パターンでは、Liferay固有の概念がいくつか使用されています。 以下の抜粋を読む前に、このセクションをざっと読んでください。

OSGi PID: Liferay は OSGi .config ファイルからランタイム構成を読み込みます。 ファイル名は、構成コンポーネントの永続識別子 (PID) と一致します。たとえば、 com.liferay.portal.search.elasticsearch8.configuration.ElasticsearchConfiguration.config のようになります。 Liferay は /opt/liferay/osgi/configs/ を監視し、JVM を再起動せずに変更を適用します。

ポータルプロパティ環境変数エンコーディング: Liferay は環境変数を介してポータルプロパティを受け入れます。 エンコーディングは . を置き換えます _PERIOD_ と、キャメルケースの各大文字が _UPPERCASE<LETTER> で区切られています。 例えば、プロパティ jdbc.default.driverClassNameLIFERAY_JDBC_PERIOD_DEFAULT_PERIOD_DRIVER_UPPERCASEC_LASS_UPPERCASEN_AME になります。 大文字を含むポータルプロパティを設定する場合は、必ずこのルールを使用してください。

${env.X} vs $[env:X]: どちらの構文も実行時に環境変数を解決しますが、解決するファイルは異なります。

  • ${env.VARIABLE_NAME} は、Liferay の portal-properties レイヤー ( customEnv の値内で使用) によって解決されます。
  • $[env:VARIABLE_NAME] は OSGi .config プレースホルダー形式です ( configmap.data エントリ内で使用されます)。

両者を混在させるのは意図的なものです。周囲のファイルと一致する形式を使用してください。

B"true" および型付きプロパティ値: OSGi .config 構文では型付き値が必要です: B"true" boolean の場合、 ["a","b"] は配列用、それ以外のものはすべて通常の二重引用符付き文字列です。 型接頭辞を省略すると、パーサーは文字列として処理します。

クラスタリンク: Liferay のクラスタ内通信チャネル (ポート 7800)。StatefulSet レプリカ間のキャッシュ無効化およびクラスタリングメッセージに使用されます。 liferay-default-headless サービスを経由してルーティングされます。 ポート 7800 を外部に公開しないでください。

設定モデル

liferay-default チャートは、Liferay コンテナに設定を注入するためのいくつかの拡張ポイントを公開します。

この表は、標準的なチャート拡張ポイントを定義しています。

拡張ポイント目的
customEnv環境変数をコンテナに直接追加します
customEnvFromSecretsまたはConfigMapsから環境変数をインポートします。
configmap.dataインラインOSGi構成ファイルを作成します
customVolumesKubernetesボリュームを追加します
customVolumeMountsファイルをコンテナファイルシステムにマウントします

ほとんどの運用環境では、以下の特定の構成が使用されます。

  • 認証情報用のKubernetes Secrets
  • customEnvFrom 環境変数の注入用
  • OSGi .config サービス構成用ファイル
  • 免許証や証明書用のマウントシークレット

秘密管理

Kubernetes Readyで推奨されるパターンは、外部依存関係ごとに個別のSecretを作成することです。

このアプローチにより、認証情報のローテーション、RBACポリシー、ボールトの同期、環境の分離、および運用上のトラブルシューティングが簡素化されます。

標準サンプル構成を作成するには、以下のコマンドを実行してください。

kubectl --namespace liferay create secret generic liferay-database \
   --from-literal=DATABASE_HOST=db.internal.example.com \
   --from-literal=DATABASE_PORT=5432 \
   --from-literal=DATABASE_NAME=lportal \
   --from-literal=LIFERAY_JDBC_PERIOD_DEFAULT_PERIOD_USERNAME=liferay \
   --from-literal=LIFERAY_JDBC_PERIOD_DEFAULT_PERIOD_PASSWORD='********'

kubectl --namespace liferay create secret generic liferay-search \
   --from-literal=ELASTICSEARCH_URL=https://search.internal.example.com:9200 \
   --from-literal=ELASTICSEARCH_USERNAME=liferay \
   --from-literal=ELASTICSEARCH_PASSWORD='********'

kubectl --namespace liferay create secret generic liferay-object-storage \
   --from-literal=S3_BUCKET_NAME=acme-liferay-documents \
   --from-literal=S3_BUCKET_REGION=us-east-1 \
   --from-literal=S3_ACCESS_KEY_ID=AKIA... \
   --from-literal=S3_SECRET_ACCESS_KEY='********'
ヒント

Gitリポジトリに平文の認証情報を保存しないでください。 本番環境では、外部のシークレット管理システム(External Secrets Operator、HashiCorp Vault、AWS Secrets Manager、Azure Key Vault、Google Secret Manager、Sealed Secretsなど)からシークレットを取得します。

customEnvFrom を使用してシークレットをインポートしています

チャートの customEnvFrom 拡張ポイントは、Secret または ConfigMap のすべてのキーを Liferay コンテナ内の環境変数として挿入します。

この設定では、外部のシークレットをデプロイ環境にマッピングします。

customEnvFrom:
  x-liferay-database:
    - secretRef:
        name: liferay-database

  x-liferay-search:
    - secretRef:
        name: liferay-search

  x-liferay-object-storage:
    - secretRef:
        name: liferay-object-storage

インジェクション後、コンテナは、Liferay の customEnv 設定内の ${env.VARIABLE_NAME} プレースホルダーを介して値を参照します。

${env.DATABASE_HOST}
${env.ELASTICSEARCH_URL}
${env.S3_BUCKET_NAME}

データベース設定

ポータルプロパティにマッピングされた環境変数を使用して、Liferayデータベースへの接続を設定します。

PostgreSQLの設定

この例では、PostgreSQLデータベースの接続マッピングを処理します。

customEnv:
  x-liferay-database:
    - name: LIFERAY_JDBC_PERIOD_DEFAULT_PERIOD_DRIVER_UPPERCASEC_LASS_UPPERCASEN_AME
      value: org.postgresql.Driver

    - name: LIFERAY_JDBC_PERIOD_DEFAULT_PERIOD_URL
      value: jdbc:postgresql://${env.DATABASE_HOST}:${env.DATABASE_PORT}/${env.DATABASE_NAME}?useUnicode=true&characterEncoding=UTF-8&useFastDateParsing=false

デプロイメントは、 liferay-database Secret から customEnvFrom を介してデータベースのユーザー名とパスワードをロードします。

MySQLの設定

この例では、MySQLデータベース接続のマッピングを処理します。

customEnv:
  x-liferay-database:
    - name: LIFERAY_JDBC_PERIOD_DEFAULT_PERIOD_DRIVER_UPPERCASEC_LASS_UPPERCASEN_AME
      value: com.mysql.cj.jdbc.Driver

    - name: LIFERAY_JDBC_PERIOD_DEFAULT_PERIOD_URL
      value: jdbc:mysql://${env.DATABASE_HOST}:${env.DATABASE_PORT}/${env.DATABASE_NAME}
重要

デプロイ前に、 Liferay互換性マトリックス に対してデータベースの互換性を確認してください。

検索設定

OSGi .config ファイルを /opt/liferay/osgi/configs にマウントして、Liferay 検索コネクタを設定します。

適切なコネクタの選択は、DXPのバージョンと検索エンジンのバージョンによって異なります。

DXPバージョンコネクター
DXP 2026.Q1 LTS+Elasticsearch 8
DXP 7.3から2025年第4四半期までElasticsearch 7
任意の(代替案)OpenSearch

Elasticsearch 7 の設定

この設定では、Elasticsearch 7 エンジンのアタッチメントを登録します。

configmap:
  data:
    com.liferay.portal.search.elasticsearch7.configuration.ElasticsearchConfiguration.config: |
      authenticationEnabled=B"true"
      httpSSLEnabled=B"true"
      networkHostAddresses=["$[env:ELASTICSEARCH_URL]"]
      operationMode="REMOTE"
      password="$[env:ELASTICSEARCH_PASSWORD]"
      productionModeEnabled=B"true"
      username="$[env:ELASTICSEARCH_USERNAME]"

customVolumeMounts:
  x-liferay-search:
    - mountPath: /opt/liferay/osgi/configs/com.liferay.portal.search.elasticsearch7.configuration.ElasticsearchConfiguration.config
      name: liferay-configmap
      subPath: com.liferay.portal.search.elasticsearch7.configuration.ElasticsearchConfiguration.config

Elasticsearch 8 の設定

この設定では、Elasticsearch 8 エンジンのアタッチメントを登録します。

configmap:
  data:
    com.liferay.portal.search.elasticsearch8.configuration.ElasticsearchConfiguration.config: |
      authenticationEnabled=B"true"
      httpSSLEnabled=B"true"
      networkHostAddresses=["$[env:ELASTICSEARCH_URL]"]
      password="$[env:ELASTICSEARCH_PASSWORD]"
      productionModeEnabled=B"true"
      username="$[env:ELASTICSEARCH_USERNAME]"

customVolumeMounts:
  x-liferay-search:
    - mountPath: /opt/liferay/osgi/configs/com.liferay.portal.search.elasticsearch8.configuration.ElasticsearchConfiguration.config
      name: liferay-configmap
      subPath: com.liferay.portal.search.elasticsearch8.configuration.ElasticsearchConfiguration.config

OpenSearchのデプロイメントでは、異なるOSGi PIDと互換性マトリックスが使用されます。

OpenSearchの設定

プラットフォームがElasticsearchではなくOpenSearchを使用している場合は、対応するOSGi PIDを使用してOpenSearchエンジンのアタッチメントを登録してください。

configmap:
  data:
    com.liferay.portal.search.opensearch2.configuration.OpenSearchConfiguration.config: |
      authenticationEnabled=B"true"
      networkHostAddresses=["$[env:OPENSEARCH_URL]"]
      password="$[env:OPENSEARCH_PASSWORD]"
      productionModeEnabled=B"true"
      username="$[env:OPENSEARCH_USERNAME]"

customVolumeMounts:
  x-liferay-search:
    - mountPath: /opt/liferay/osgi/configs/com.liferay.portal.search.opensearch2.configuration.OpenSearchConfiguration.config
      name: liferay-configmap
      subPath: com.liferay.portal.search.opensearch2.configuration.OpenSearchConfiguration.config

DXP リリースでサポートされている OpenSearch バージョンについては、 Liferay 互換性マトリックス を確認してください。

オブジェクトストレージ構成

本番環境へのデプロイに使用するドキュメントとメディアコンテンツを、Podのファイルシステムではなく、外部オブジェクトストレージに保存します。

S3構成

この例では、外部のAmazon S3ストレージとの統合を扱います。

customEnv:
  x-liferay-storage:
    - name: LIFERAY_DL_PERIOD_STORE_PERIOD_IMPL
      value: com.liferay.portal.store.s3.S3Store

configmap:
  data:
    com.liferay.portal.store.s3.configuration.S3StoreConfiguration.config: |
      bucketName="$[env:S3_BUCKET_NAME]"
      s3Region="$[env:S3_BUCKET_REGION]"
      accessKey="$[env:S3_ACCESS_KEY_ID]"
      secretKey="$[env:S3_SECRET_ACCESS_KEY]"

customVolumeMounts:
  x-liferay-storage:
    - mountPath: /opt/liferay/osgi/configs/com.liferay.portal.store.s3.configuration.S3StoreConfiguration.config
      name: liferay-configmap
      subPath: com.liferay.portal.store.s3.configuration.S3StoreConfiguration.config

Google Cloud Storage、Azure Blob Storage、MinIO、およびその他のS3互換APIにも、同等のストレージ実装が存在します。

クラウドワークロードID(IRSA、GKEワークロードID、またはAzure ADワークロードID)を使用する場合は、Secretsから静的アクセスキーを削除し、 accessKeysecretKey をOSGi S3構成から除外します。

OSGi設定ファイルのマウント

Kubernetes Readyデプロイメントで構成値をマウントするには、この標準構造を適用してください。

  1. configmap.data を介して OSGi 設定ファイルを定義します。

  2. それらを /opt/liferay/osgi/configs にマウントします。

このリソース定義は、マウントが完了した例を示しています。

configmap:
  data:
    com.liferay.portal.search.elasticsearch7.configuration.ElasticsearchConfiguration.config: |
      productionModeEnabled=B"true"

customVolumeMounts:
  x-search:
    - mountPath: /opt/liferay/osgi/configs/com.liferay.portal.search.elasticsearch7.configuration.ElasticsearchConfiguration.config
      name: liferay-configmap
      subPath: com.liferay.portal.search.elasticsearch7.configuration.ElasticsearchConfiguration.config

Liferay は起動時にマウントされた .config ファイルを自動的に読み込みます。

ライセンス構成

LiferayライセンスをKubernetes Secretに保存し、自動デプロイディレクトリにマウントします。

秘密を創造する:

kubectl --namespace liferay create secret generic liferay-license \
   --from-file=license.xml=./license.xml

秘密をマウントする:

customEnv:
  x-license:
    - name: LIFERAY_DISABLE_TRIAL_LICENSE
      value: "true"

customVolumes:
  x-license:
    - name: liferay-license
      secret:
        secretName: liferay-license

customVolumeMounts:
  x-license:
    - mountPath: /etc/liferay/mount/files/deploy/license.xml
      name: liferay-license
      subPath: license.xml

Liferayは起動時にライセンスを自動的にデプロイします。

本番環境向けのKubernetes Readyデプロイメントでは、以下のアーキテクチャ構成が使用されます。

values.yaml
Secrets
├── liferay-database
├── liferay-search
├── liferay-object-storage
└── liferay-license

configmap.data
├── ElasticsearchConfiguration.config
└── S3StoreConfiguration.config

customEnvFrom
└── injects Secrets into the container

customVolumeMounts
└── mounts OSGi configs and license.xml