9.4. Secrets PropertySource の使用

Kubernetes には、パスワードや OAuth トークンなどの機密データを格納するための シークレット という概念があります。Spring Cloud Kubernetes プラグインは Secrets とのインテグレーションを提供し、Spring Boot が Secret へアクセスできるようにします。

有効になっている Secrets プロパティーソースは、以下のソースから Kubernetes の Secrets を検索します。Secret が見つかった場合、アプリケーションはそのデータを利用できます。

  1. Secret マウントからの再帰的な読み取り
  2. アプリケーションにちなんだ名前の付与 (spring.application.name を参照)
  3. 一部のラベルとの一致

デフォルトでは、API 経由の Secret の消費 (上記の 2 および 3) は 有効になっていない ことに注意してください。

9.4.1. Secret の設定例

プロパティーを使用して ActiveMQ および PostreSQL 設定を読み取る demo という名前の Spring Boot アプリケーションがあるとします。

amq.username
amq.password
pg.username
pg.password

これらの Secret は YAML 形式で Secrets に対して外部化できます。

ActiveMQ の Secret
apiVersion: v1
kind: Secret
metadata:
  name: activemq-secrets
  labels:
    broker: activemq
type: Opaque
data:
  amq.username: bXl1c2VyCg==
  amq.password: MWYyZDFlMmU2N2Rm
PostreSQL の Secret
apiVersion: v1
kind: Secret
metadata:
  name: postgres-secrets
  labels:
    db: postgres
type: Opaque
data:
  pg.username: dXNlcgo=
  pg.password: cGdhZG1pbgo=

9.4.2. Secret の消費

消費する Secret を選択する方法は複数あります。

  • Secret がマップされたディレクトリーをリストする方法

    -Dspring.cloud.kubernetes.secrets.paths=/etc/secrets/activemq,etc/secrets/postgres

    すべての Secret が共通のルートにマップされている場合は、以下のように設定できます。

    -Dspring.cloud.kubernetes.secrets.paths=/etc/secrets
  • 名前付きの Secret を設定する方法

    -Dspring.cloud.kubernetes.secrets.name=postgres-secrets
  • ラベルのリストを定義する方法

    -Dspring.cloud.kubernetes.secrets.labels.broker=activemq
    -Dspring.cloud.kubernetes.secrets.labels.db=postgres

9.4.3. Secrets PropertySource の設定プロパティー

以下のプロパティーを使用して、Secrets プロパティーソースを設定できます。

spring.cloud.kubernetes.secrets.enabled
Secrets プロパティーソースを有効にします。型は Boolean で、デフォルトは true です。
spring.cloud.kubernetes.secrets.name
検索する Secret の名前を設定します。型は String で、デフォルトは ${spring.application.name} です。
spring.cloud.kubernetes.secrets.labels
Secret の検索に使用されるラベルを設定します。このプロパティーは マップベースのバインディング による定義どおりに動作します。型は java.util.Map で、デフォルトは null です。
spring.cloud.kubernetes.secrets.paths
Secret がマウントされるパスを設定します。このプロパティーは コレクションベースのバインディング による定義どおりに動作します。型は java.util.List で、デフォルトは null です。
spring.cloud.kubernetes.secrets.enableApi
API 経由で Secret の消費を有効または無効にします。型は Boolean で、デフォルトは false です。
注記

API 経由でシークレットにアクセスすることは、セキュリティー上の理由で制限されることがあります。シークレットを POD にマウントする方法が推奨されます。