Skip to main content
このガイドでは、Helm ChartデプロイメントにおけるDify Enterpriseのカスタム認証局(CA)証明書の設定方法について説明します。この機能は、自己署名証明書やプライベートPKIインフラストラクチャを使用する環境に不可欠です。

概要

有効にすると、Difyはすべての外部へのHTTPS接続に対して、システム全体のCA証明書とカスタムCA証明書の両方を信頼します。これは特に以下の場合に役立ちます:
  • 組織が内部PKI(公開鍵インフラストラクチャ)を使用している場合。
  • 自己署名証明書を使用してエアギャップ環境にデプロイしている場合。
  • 外部サービス(Redis、データベース、S3、ベクトルデータベースなど)がプライベートCAによって署名された証明書を使用している場合。
  • 内部HTTPSエンドポイントとの信頼関係を確立する必要がある場合。

仕組み

カスタムCAの実装は、以下のアプローチを使用します:
  1. 初期化:各Dify Podが起動する前に、Initコンテナが実行されます。
  2. CAバンドルの作成:Initコンテナは、システムCA証明書(ベースイメージから)とカスタムCA証明書(Kubernetes Secretから)を結合します。
  3. 環境設定:Python、Node.js、curl、AWS CLIが結合されたCAバンドルを指すように環境変数が設定されます。
  4. ランタイムの信頼:すべてのDifyコンポーネントは、SSL/TLS検証に結合されたCAバンドルを使用します。

前提条件

  • Dify Helmチャートがインストールされている(またはインストール準備ができている)Kubernetesクラスタ。
  • PEM形式のカスタムCA証明書。
  • クラスタへの kubectl アクセス。
  • Kubernetes Secretに関する基本的な理解。

設定手順

1. CA証明書の準備

CA証明書は PEM形式(Base64エンコードされ、BEGIN CERTIFICATEEND CERTIFICATE マーカーで囲まれている)である必要があります。 証明書の形式を確認します:
DERエンコードされた証明書がある場合は、PEMに変換します:

2. Kubernetes Secretの作成

CA証明書を含むKubernetes Secretを作成します。
注意
  • Secret名dify-custom-ca(任意の名前を選択できます)。
  • Key名ca.crt(デフォルト、values.yaml でカスタマイズ可能)。
  • Namespace:Difyデプロイメントと同じ名前空間にある必要があります。
Secretが作成されたことを確認します:

3. values.yamlの設定

Helmの values.yaml ファイルを編集して、カスタムCAを有効にします。
最小構成(デフォルトを使用):

4. Difyのデプロイまたは更新

新規インストールの場合:
既存のインストールの場合:
注意:カスタムCA設定の変更を有効にするには、Podの再起動が必要です。CAバンドルはPodの初期化中に一度だけ生成されます。

検証

デプロイ後、カスタムCAが正しく設定されていることを確認します。

1. Initコンテナの確認

Initコンテナが正常に実行されたか確認します。
CAバンドルが正常に作成されたことを示す出力が表示されるはずです。

2. 環境変数の確認

実行中のPodに入る、環境変数を確認します。
期待される出力:

3. CAバンドル内容の確認

Pod内で、バンドルに証明書が含まれていることを確認します。
バンドルには複数の証明書(システムCA + カスタムCA)が含まれているはずです。

環境変数リファレンス

カスタムCA機能は、幅広い互換性を確保するために以下の環境変数を設定します。すべての変数は、同じ結合されたCAバンドル /etc/dify/custom-ca/ca-bundle.crt(またはカスタム mountPath)を指します。

影響を受けるコンポーネント

カスタムCAが有効になっている場合、以下のDifyコンポーネントは自動的にカスタムCAバンドルを使用します:
  • API Server (api-deployment)
  • Worker (worker-deployment)
  • Worker Beat (worker-beat-deployment)
  • Trigger Worker (trigger-worker-deployment)
  • Enterprise Service (enterprise-deployment)
  • Enterprise Audit (enterprise-audit-deployment)
  • Sandbox (sandbox-deployment)
  • Gateway (caddy-deploy)
  • SSRF Proxy (ssrf-proxy-deployment)
  • Unstructured (unstructured-deployment)
  • Plugin Daemon (plugin-daemon)
  • Plugin Manager (plugin-manager)
  • Plugin Controller (plugin-controller)

トラブルシューティング

PodがInit:0/1でスタックする

原因:Initコンテナ init-custom-ca が失敗しています。 解決策
一般的な原因:
  1. initImage がプルできない(エアギャップ環境)。
  2. Secretが見つからない、または名前空間が間違っている。
  3. Secret内のKey名が間違っている。

カスタムCAを有効にした後にSSL検証エラーが発生する

原因:カスタムCA証明書の形式が正しくないか、不完全である可能性があります。 解決策
  1. 証明書が有効なPEM形式であることを確認します:
  2. 完全なチェーンであるか確認します(CAが中間証明書を必要とする場合)。必要に応じて複数の証明書を結合します:
  3. Secretを更新してPodを再起動します:

カスタムCA Secretの変更が反映されない

原因:CAバンドルはPodの初期化中に作成されます。Secretを更新しても、実行中のPodは自動的に更新されません。 解決策:Secretの更新後、Podを再起動する必要があります。

Initコンテナがalpine:3.20イメージをプルできない

原因:エアギャップ環境または制限されたレジストリアクセス。 解決策values.yaml でプライベートレジストリを使用します。
サポートされている代替イメージ
  • Alpineベース:alpine:3.20, alpine:3.19
  • Debianベース:ubuntu:22.04, debian:12
  • /etc/ssl/certs/ca-certificates.crt (Debian/Ubuntu) または /etc/ssl/cert.pem (Alpine) を含む任意のイメージ。

高度な設定

異なるSecret Key名の使用

Secretで異なるKey名を使用している場合:

カスタムマウントパス

CAバンドルのマウント場所を変更する必要がある場合:
注意mountPath を変更すると、すべての環境変数が自動的に更新されます。

複数のCA証明書

複数のカスタムCAを信頼する必要がある場合は、それらを単一のファイルに結合します:

エアギャップ環境

完全にエアギャップされたデプロイメントの場合:
  1. Initイメージをミラーリングしてプライベートレジストリにプッシュします:
  2. values.yamlを更新します:

FAQ

有効化した後にカスタムCAを無効にできますか?

はい、global.customCA.enabled: false に設定してHelmリリースをアップグレードしてください。PodはカスタムCA設定なしで再起動します。

これはDifyコンポーネント間のTLSに影響しますか?

いいえ、これはDifyから外部サービス(データベース、S3、APIなど)への出站HTTPS接続にのみ影響します。内部コンポーネント間の通信には影響しません。

データベースもカスタムCAを必要とする場合はどうすればよいですか?

カスタムCA機能はデータベース接続もカバーしています。データベースサーバーの証明書が、設定したCAによって署名されていることを確認してください。

中間証明書を使用できますか?

はい、Secretを作成する前に、完全なチェーン(中間証明書 + ルートCA)を単一のファイルに結合してください。

ダウンタイムなしでCA証明書を更新するにはどうすればよいですか?

Kubernetes Secretは更新できますが、Podの再起動が必要です。ゼロダウンタイム更新の場合:
  1. Secretを更新します。
  2. ローリングアップデート戦略(デフォルト)で kubectl rollout restart を使用します。
  3. Podは順次再起動され、サービスの可用性が維持されます。