11.4. Secrets PropertySource の使用
Kubernetes には、パスワードや OAuth トークンなどの機密データを格納するための シークレット という概念があります。Spring Cloud Kubernetes プラグインは Secrets
とのインテグレーションを提供し、Spring Boot が Secret へアクセスできるようにします。
有効になっている Secrets
プロパティーソースは、以下のソースから Kubernetes の Secrets
を検索します。Secret が見つかった場合、アプリケーションはそのデータを利用できます。
- Secret マウントからの再帰的な読み取り
-
アプリケーションにちなんだ名前の付与 (
spring.application.name
を参照) - 一部のラベルとの一致
デフォルトでは、API 経由の Secret の消費 (上記の 2 および 3) は 有効になっていない ことに注意してください。
11.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=
11.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
11.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 にマウントする方法が推奨されます。