Kubernetes インストールガイド

前提条件

  • MySQL インスタンス(v8.0+)にアクセス可能な Kubernetes クラスター(v1.24 以降)
  • 最低限必要なクラスターリソース:4 vCPU、16GB RAM
  • テーブルに対する読み書きおよび削除権限を持つデータベース認証情報
  • Helm(バージョン 3.17.0 以降)
  • API、Console、IDP エンドポイント用のドメイン名

インストール手順

Authlete レジストリから Helm チャートおよびコンテナイメージにアクセスするには、以下の手順に従ってください。

セットアップフェーズ

1. 組織の作成

  • Authlete Console にログインします。
  • 自社用の組織を作成します。
  • Organization ID を控えておきます。
new-org

2. アクセスのリクエスト

  • Organization IDOrganization Name を Authlete サポートに共有します。
  • Authlete は、あなたの組織に対してレジストリアクセスを許可します。

3. 組織トークンの発行

  • Authlete Console にて、組織用の Token を発行します。
  • Organization IDToken は認証に必要なので手元に保持しておいてください。
user-permissions

準備フェーズ

1. Kubernetes ネームスペースの作成

kubectl create ns authlete

2. Helm レジストリへのログイン

以下のコマンドを使用してログインします:

helm registry login -u <ORG_ID> -p <TOKEN> artifacts.authlete.com

<ORG_ID> および <TOKEN> を実際の値に置き換えてください。

ログインが完了すると、レジストリから Helm チャートを取得できるようになります。

3. Helm チャートの取得

Authlete の Helm チャートは OCI フォーマットで配布されています。以下のコマンドでチャートを取得してローカルに展開します:

# 安定版の最新バージョンは 2.0.1
helm pull oci://artifacts.authlete.com/authlete-platform-chart --version 2.0.1 --untar
cd authlete-platform-chart

4. イメージレジストリの設定

Authlete のコンテナイメージへのアクセスには 2 つのオプションがあります:

オプション A: 直接レジストリアクセス(開発/評価環境)

開発または評価目的の環境では、Authlete のレジストリから直接イメージを取得可能です:

# レジストリ認証用のシークレットを作成
kubectl create secret docker-registry authlete-registry \
-n authlete \
--docker-server=artifacts.authlete.com \
--docker-username=<ORG_ID> \
--docker-password=<TOKEN>

# デフォルトの ServiceAccount にこのシークレットを設定
kubectl patch serviceaccount default \
-n authlete \
-p '{"imagePullSecrets": [{"name": "authlete-registry"}]}'

オプション B: イメージのミラー(本番環境推奨)

本番環境では、イメージのミラー セクションを参照し、イメージをプライベートレジストリにミラーリングしてください。

5. イメージのミラー

信頼性と制御性を高めるため、Authlete 提供のコンテナイメージを自社のレジストリにミラーリングすることを推奨します。これにより、Authlete のレジストリへの直接依存を避け、再現性のあるデプロイが可能になります。

イメージ 説明 対応バージョンタグ
server OAuth 2.0 および OpenID Connect 処理を担うコア API サーバー 3.0.19
server-db-schema API サーバー用の DB 初期化ツール v3.0.19
idp ユーザー認証と管理を行う ID プロバイダサーバー 1.0.18
idp-db-schema IdP サーバー用のデータベーススキーマ初期化ツール v1.0.18
console プラットフォーム設定および監視用の React ベース管理コンソール 1.0.11
nginx TLS 終端とルーティングを担当する Nginx リバースプロキシ 1.26.3
valkey パフォーマンス向上と DB 負荷軽減のためのキャッシュサービス 8.0.1
gce-proxy GCP 環境での安全な DB 接続のための Cloud SQL プロキシ 1.37.0
authlete-bootstrapper プラットフォーム初回デプロイ時のみ使用される初期化サービス 1.1.0
# Authlete レジストリにログイン
docker login artifacts.authlete.com -u <ORG_ID> -p <TOKEN>

# イメージを取得
docker pull artifacts.authlete.com/<image>:<tag>

# タグを付けて自社レジストリにプッシュ
docker tag artifacts.authlete.com/<image>:<tag> registry.mycompany.com/<image>:<tag>
docker push registry.mycompany.com/<image>:<tag>

values.yaml を更新して、インストール前にミラーしたイメージパスを使用してください。

代替として、crane を使用してイメージを直接プッシュすることもできます。

crane を使用したミラー
# 対象レジストリのベースを設定
TARGET_REGISTRY="ghcr.io/your-org-name"

# イメージコピーコマンド
crane cp artifacts.authlete.com/server:3.0.19 $TARGET_REGISTRY/server:3.0.19
crane cp artifacts.authlete.com/server-db-schema:v3.0.19 $TARGET_REGISTRY/server-db-schema:v3.0.19
crane cp artifacts.authlete.com/idp:1.0.18 $TARGET_REGISTRY/idp:1.0.18
crane cp artifacts.authlete.com/idp-db-schema:v1.0.18 $TARGET_REGISTRY/idp-db-schema:v1.0.18
crane cp artifacts.authlete.com/console:1.0.11 $TARGET_REGISTRY/console:1.0.11
crane cp artifacts.authlete.com/nginx:1.26.3 $TARGET_REGISTRY/nginx:1.26.3
crane cp artifacts.authlete.com/valkey:8.0.1 $TARGET_REGISTRY/valkey:8.0.1
crane cp artifacts.authlete.com/gce-proxy:1.37.0 $TARGET_REGISTRY/gce-proxy:1.37.0
crane cp artifacts.authlete.com/authlete-bootstrapper:1.1.0 $TARGET_REGISTRY/authlete-bootstrapper:1.1.0

設定フェーズ

1. Values とシークレットの設定

  • 既定の values.yaml はチャートに同梱されています。必要に応じて内容を確認・変更してください。

  • global.repo を自社レジストリに設定します。

global:
  id: "authlete-platform"
  repo: "registry.your-company.com"  # 必須: 自社のコンテナレジストリ
  • ドメイン名を domains セクションに設定します:
  # 必須: これらのドメインは利用者からアクセス可能である必要があります
  api: "api.your-domain.com"     # API サーバー
  idp: "login.your-domain.com"   # IDP サーバー
  console: "console.your-domain.com"  # 管理コンソール

2. TLS 証明書の設定

  • ドメイン用の TLS 証明書(例: Let’s Encrypt や社内の証明機関から取得)を用意し、authlete ネームスペースに kubernetes.io/tls タイプの Kubernetes シークレットを作成してください。証明書はすべてのドメイン(例: api.example.com、login.example.com、console.example.com)をカバーしている必要があります。ワイルドカードまたは SAN 証明書を使用できます。
kubectl create secret tls proxy-certs \
  --cert=./tls.crt \
  --key=./tls.key \
  -n authlete

3. データベースおよびメモリキャッシュへの TLS 接続を有効化 (任意){#3.-enabling-tls-connection-to-database-and-memory-cache-(optional)}

アプリケーション設定

環境変数の変更だけで TLS 暗号化を有効化できます。

Redis: Redis 接続で TLS 暗号化が必要な場合は、MEMCACHE_HOST に rediss:// を指定します。

api:
  env:
    - name: MEMCACHE_ENABLE
      value: "true"
    - name: MEMCACHE_HOST
      value: "rediss://<your-cache-service-host-or-ip>:<port>"  # ホスト名または IP アドレス

IdP デプロイの場合:

    env:
    - name: JAVA_OPTS
      value: "-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8008"
    - name: AUTHLETE_IDP_REMOTE_CACHE_ENDPOINT
      value: "rediss://<your-cache-service-host-or-ip>:<port>"  # ホスト名または IP アドレス
    - name: CLUSTER_NAME
      ...

Database: データベースへの TLS 接続は sslMode プロパティで有効化します。

database:
  idp:  # IdP サーバーのデータベース
    name: idp
    user: authlete
    password: !raw *****
    host: localhost
    connectionParams:
      allowPublicKeyRetrieval: true
      sslMode: verify-ca # ここで sslMode を設定
  api: # API サーバーのデータベース
    name: server
    user: authlete
    password: !raw ******
    host: localhost
    connectionParams:
      allowPublicKeyRetrieval: true
      sslMode: verify-ca # ここで sslMode を設定

注記: Cloud SQL Proxy を使用する場合、接続はプロキシにより既に暗号化されるため、sslMode は disable を設定してください。追加の TLS 層を有効にすると動作しません。

注記: Redis やデータベースが提示する TLS 証明書がプライベート CA によって発行されている場合は、すべての証明書を含むカスタムバンドルを作成し、アプリケーションに読み込ませる必要があります。詳細は Private CA セクションを参照してください。

  1. Private CA (Optional)

プライベート CA 証明書で TLS を使用するには、必要な証明書をすべて含むカスタムバンドルを Helm チャートの外部で作成します。次に、そのバンドルを含む ConfigMap を作成します。要件は以下のとおりです。

  • ConfigMap 名は “custom-ca-bundle” とすること
  • 少なくとも ca-bundle.p12ca-bundle.crt の 2 つのキーを含めること
CA バンドルの作成

trust-manager のドキュメント に記載の方法で公開 CA バンドルを抽出することを推奨します。以下では、そのバンドルを含む ConfigMap の作成方法を説明します。

trust-manager を使ったバンドル作成 (任意){#creating-bundle-with-trust-manager-(optional)}

trust-manager を使うと、Kubernetes で信頼バンドルの管理が容易になります。インストール手順は trust-manager の公式ドキュメント を参照してください。trust-manager をインストールしたら、単一の Bundle オブジェクトを作成します。必要な証明書をすべて含む ConfigMap は自動的に生成されます。

以下は trust-manager が最終バンドルを組み立てるための Bundle の例です。この Bundle のマニフェストファイル名は bundle-creation.yaml とします。

apiVersion: trust.cert-manager.io/v1alpha1
kind: Bundle
metadata:
  name: custom-ca-bundle
spec:
  sources:
  - useDefaultCAs: true

  # A manually specified PEM-encoded cert, included directly into the Bundle
  - inLine: |
      -----BEGIN CERTIFICATE-----
      MIIC5zCCAc+gAwIBAgIBADANBgkqhkiG9w0BAQsFADAVMRMwEQYDVQQDEwprdWJl
      ...
      ... contents of proxy's CA certificate ...
      -----END CERTIFICATE-----      
  - inLine: |
      -----BEGIN CERTIFICATE-----
      ... contents of mysql's CA certificate ...
      -----END CERTIFICATE-----      
  - inLine: |
      -----BEGIN CERTIFICATE-----
      ... contents of valkey's CA certificate ...
      -----END CERTIFICATE-----      
  target:
    # All ConfigMaps will include a PEM-formatted bundle, here named "root-certs.pem"
    # and in this case we also request binary formatted bundles in PKCS#12 format,
    # here named "bundle.p12".
    configMap:
      key: "ca-bundle.crt"
    additionalFormats:
      pkcs12:
        key: "ca-bundle.p12"
    namespaceSelector:
      matchLabels:
        kubernetes.io/metadata.name: "authlete" # Deployment namespace

最後に、次のコマンドで Bundle を作成します。

kubectl create -f bundle-creation.yaml -n authlete

注記: cert-manager が提供する公式の Debian trust パッケージを使用している場合は、trust パッケージが最新に保たれているか定期的に確認してください。

バンドルの手動作成

以下の手順では、docker コマンドを使ってカスタムバンドルを数ステップで作成します。

注記: 以下のチュートリアルはサンプルコードです。バンドルの作成・保管・更新を安全に行うことはお客様の責務です。

  1. gen-bundles.sh ファイルを作成
# Input/output directories
SRC="/certs"                                         # crt ファイルを配置する場所
DST="/usr/local/share/ca-certificates/custom"        # update-ca-certificates が監視するディレクトリ
OUT="/bundle"                                        # バンドルの出力先

# 出力ディレクトリをクリーンアップ
rm -f $OUT/*

# 出力ディレクトリを作成
mkdir -p "$DST"

# 必要なパッケージをインストール (Java の truststore 生成に ca-certificates-java が必要)
apt-get -y update
apt-cache madison ca-certificates
DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends openssl default-jre-headless ca-certificates-java "ca-certificates=20230311+deb12u1"

# 1) 追加証明書の配置 (*.pem / *.crt を .crt として配置)
cp -v ${SRC}/* ${DST}/
# .pem も .crt として扱うため拡張子を統一したい場合は以下を有効化
# for f in "$DST"/*.pem; do mv -v "$f" "${f%.pem}.crt"; done

# 2) システム & Java truststore を更新
update-ca-certificates -f

# 3) 出力 (PEM と PKCS12)
cp -v /etc/ssl/certs/ca-certificates.crt "$OUT/ca-bundle.crt"
keytool -importkeystore -srckeystore /etc/ssl/certs/java/cacerts -destkeystore $OUT/ca-bundle.p12 -deststoretype PKCS12 -srcstorepass changeit -deststorepass changeit
  1. バンドルをビルド
docker run --rm --user root -v "$PWD/certs:/certs:ro" -v "$PWD/out:/bundle" -v "$PWD/gen-bundles.sh:/usr/local/bin/gen-bundles.sh:ro" --entrypoint bash docker.io/library/debian:12-slim -c "sh /usr/local/bin/gen-bundles.sh"
  1. ca-bundle.p12ca-bundle.crt が準備できたら、次のように Kubernetes の ConfigMap を作成します。
kubectl create cm custom-ca-bundle --from-file=ca-bundle.p12 --from-file=ca-bundle.crt

注記:: trust-manager のバンドル作成に使用されている現在の Debian ベースイメージは docker.io/library/debian:12-slim で、ca-certificates のターゲットバージョンは 20230311+deb12u1.0 です。

アプリケーションからカスタムバンドルを読み込む

バンドルの準備ができたら、アプリケーションから利用できるように追加設定を行います。.Values.global.tls.caBundle.enabled を “true” に設定して、バンドルをアプリケーションの Pod にマウントします。

  tls:
    caBundle:
      enabled: true # これを有効にする
      type: ConfigMap
      name: custom-ca-bundle
      trustStore:
        password: "changeit"
バンドルの更新

新しいバンドルを作成して既存のものと置き換えた場合は、IdP、Authlete Server、プロキシの各 Pod (アプリケーション) を再起動してください。再起動時に、アプリケーションが更新後のバンドルを読み込みます。

5. データベース接続を設定

本プラットフォームは 2 つのデータベースを必要とします。1 つは API サーバー用、もう 1 つは IdP サーバー用です。secret-values.yaml で接続情報を設定します。

注記: MySQL 8.0+ を使用する場合、データベースは次の設定で構成してください:

  • 文字セット: utf8mb4
  • 照合順序: utf8mb4_0900_ai_ci
  • チャートアーカイブには secret-values.yaml のテンプレートも同梱されています。データベースおよび Authlete 管理者の資格情報に合わせて修正してください。
database:
  idp:  # IdP サーバーのデータベース
    name: idp           # データベース名
    user: authlete      # DB ユーザー
    password: !raw ***** # ユーザーパスワード
    host: localhost     # DB ホスト
    connectionParams:
      allowPublicKeyRetrieval: true
      sslMode: disable # disable|trust|verify-ca|verify-full
  api: # API サーバーのデータベース
    name: server
    user: authlete
    password: !raw ******
    host: localhost
    connectionParams:
      allowPublicKeyRetrieval: true
      sslMode: disable # disable|trust|verify-full

idp:
  auth:
    adminUser:
      email: "admin@authlete.com"
      password: !raw ******
  encryptionSecret: ********

GCP Cloud SQL を使用する場合:

  cloudSql:
    enabled: true
    image: gce-proxy:1.37.0
    instance: project:region:instance  # Cloud SQL インスタンス名
    port: 3306

他のクラウドプロバイダーを使用する場合は、Cloud SQL プロキシを無効にして直接接続を使用します:

cloudSql:
  enabled: false

6. キャッシュの設定

このプラットフォームは 2 種類のキャッシュ構成に対応しています:

オプション 1: Valkey(組み込みキャッシュ)

デフォルトでは、キャッシュとして Valkey Pod をデプロイします。この構成は values.yaml に定義されており、そのまま使用可能です:

redis:
  name: redis
  enabled: true
  image: valkey:8.0.1 
  # -- Resources requirements
  resources:
    requests:
      cpu: 10m
      memory: 440M
    limits:
      cpu: 1
      memory: 440M
オプション 2: マネージドキャッシュサービス

本番環境ではマネージドキャッシュサービスの利用を推奨します。以下のサービスに対応しています:

  • Google Cloud Platform:Memorystore for Valkey
  • Amazon Web Services:ElastiCache for Redis
  • Azure:Azure Cache for Redis

GCP 利用者への注意:Memorystore for Valkey を使用する際は、Private Service Connect(PSC)とサービス接続ポリシーを利用した接続を推奨します。これがサポートされている唯一のネットワーク方式です。詳細な手順は Memorystore for Valkey ネットワーク構成ガイド を参照してください。

マネージドキャッシュサービスを使用するには:

  1. values.yaml 内で Valkey を無効化します:
redis:
  enabled: false
  1. API セクションにキャッシュ接続設定を追加します:
api:
  env:
    - name: MEMCACHE_ENABLE
      value: "true"
    - name: MEMCACHE_HOST
      value: "<your-cache-service-host-or-ip>"  # ホスト名または IP アドレス

注意:キャッシュサービスがクラスターモードの場合は以下の環境変数も追加してください:

    - name: MEMCACHE_BACKEND
      value: "redis-cluster"

7. その他の設定オプション

プロキシ設定

ドメイン名が非常に長い場合、map_hash_max_size パラメータの制限に達する可能性があります。mapHashBucketSizeserverNamesHashBucketSize の値を増やすことで回避できます。

  configs:
    mapHashBucketSize: 128 # ここを調整
    serverNamesHashBucketSize: 128 # ここを調整
DB スキーマ更新フック

Liquibase の変更セットに含まれる新しい変更を自動適用し、アプリケーションと同じバージョンのデータベーススキーマを保つため、DB スキーマ更新フックを導入しました。これらのフックは冪等であり、アップグレード版と旧版の間でスキーマに変更がない限り、既存のデータベーススキーマを変更しません。

これらのフックは、インストール時およびアプリケーションバージョン更新時にスキーマを作成・更新するために必要です。ただし、新規アプリケーションをデプロイしない、またはスキーマ変更が見込まれない場合は無効化できます。

hooks:
  serviceAccount: ""
  idpDbSchemaUpgrade:
    enabled: true # 無効化可能
  serverDbSchemaUpgrade:
    enabled: true # 無効化可能

デプロイフェーズ

1. コアプラットフォームコンポーネントのインストール

Helm を使用してコアコンポーネントをインストールします:

helm install authlete-platform . -n authlete -f secret-values.yaml

インストールの確認:

# Pod のステータス確認
kubectl get pods -n authlete

期待される出力例:

NAME                       READY   STATUS    RESTARTS   AGE
api-6b78f87847-xxxxx       2/2     Running   0          2m
proxy-6c99bdc94b-xxxxx     1/1     Running   0          2m
redis-5f8f64df5d-xxxxx     1/1     Running   0          2m

注意:初回のデプロイにはイメージの取得とデータベース初期化のために最大 5 分程度かかることがあります。

2. オプションコンポーネントのインストール

要件に応じて、以下のコンポーネントは任意でインストールできます。

  • 管理コンソール: Authlete プラットフォームの主な設定 UI
  • IdP サーバー: ユーザー認証と管理のための OIDC 準拠 IdP

インストールコマンド:

helm upgrade authlete-platform . -f secret-values.yaml -n authlete

オプションコンポーネントの確認:

# 新しい Pod のステータス確認
kubectl get pods -n authlete

期待される出力例:

NAME                       READY   STATUS    RESTARTS   AGE
console-6b78f87847-xxxxx  1/1     Running   0          2m
idp-6c99bdc94b-xxxxx      2/2     Running   0          2m

3. ロードバランサーの構成

最後のステップとして、Authlete デプロイメントを外部に公開するためのロードバランサーサービスを構成します。

  1. まず、クラウドプロバイダーで静的外部 IP アドレスを予約します。

注意:以下のコマンドは GCP 専用です。他のクラウドプロバイダー(AWS、Azure など)を使用している場合は、各プロバイダーのドキュメントを参照して静的 IP アドレスを予約してください。
GCP では、GKE LoadBalancer サービスが同じリージョンに割り当てられた IP のみをサポートするため、リージョン固定の静的 IP を予約する必要があります。

# GCP 固有のコマンド
# 静的 IP アドレスを予約
gcloud compute addresses create authlete-ip --region=us-central1

# 予約済み IP アドレスを取得
gcloud compute addresses describe authlete-ip --region=us-central1
  1. 予約した IP を使用してロードバランサーサービスを作成します。以下の内容で proxy-lb-service.yaml というファイルを作成してください:
apiVersion: v1
kind: Service
metadata:
  labels:
    app: proxy
  name: proxy-lb
spec:
  externalTrafficPolicy: Local
  ports:
  - name: https
    port: 443
    protocol: TCP
    targetPort: 8443
  selector:
    app: proxy
  sessionAffinity: None
  type: LoadBalancer
  loadBalancerIP: #external_static_ip  # ここに予約済みの静的 IP を入力
  1. ロードバランサー設定を適用します:
kubectl apply -f proxy-lb-service.yaml -n authlete
  1. ロードバランサーの構成を確認します:
kubectl get service proxy-lb -n authlete

次のような出力が得られるはずです:

NAME       TYPE           CLUSTER-IP      EXTERNAL-IP          PORT(S)         AGE
proxy-lb   LoadBalancer   10.x.x.x        YOUR_STATIC_IP       443:32xxx/TCP   1m

EXTERNAL-IP に予約した IP アドレスが表示されれば、Authlete デプロイメントは HTTPS 経由でその IP を通じてアクセス可能になります。

4. ドメインとロードバランサーのマッピング

3 つのドメインすべてに対して、ロードバランサーの IP アドレスを指すように DNS レコードを作成してください:

# API サーバー
api.your-domain.com.     IN  A     YOUR_STATIC_IP

# IDP サーバー
login.your-domain.com.   IN  A     YOUR_STATIC_IP

# 管理コンソール
console.your-domain.com. IN  A     YOUR_STATIC_IP

DNS 設定の確認:

# DNS 設定のテスト
dig +short api.your-domain.com
dig +short login.your-domain.com
dig +short console.your-domain.com

# HTTPS エンドポイントのテスト
curl -I https://api.your-domain.com/api/info

すべてのドメインがロードバランサーの IP に解決され、エンドポイントにアクセス可能であれば、Authlete は利用準備が整っています。

次の手順で管理コンソールにアクセスできます:

  1. ブラウザで https://console.your-domain.com にアクセス
  2. secret-values.yaml に設定した管理者アカウントでログイン
  3. Authlete サービスの構成を開始

注意:コンソールにアクセスできない場合は、以下の項目を確認してください:

  • DNS レコードがすべてのネームサーバーに伝播されているか
  • ロードバランサーのヘルスチェックが成功しているか
  • TLS 証明書がすべてのドメインに対して有効であるか

Helmチャートチェンジログ

現在のHelmチャートバージョンは2.0.1です。

2025年09月アップデート

  • プライベート証明書認証局(CA)を通したTLS接続のサポートが実装されました
  • 不足していた内部接続向けのIPレンジが追加されました
  • map_hash_bucket_sizeおよびserver_names_hash_bucket_sizeパラメーターが、より大きな値を受け付けられるように拡張されました