Menu Close

11.2.3. Secret の設定

このクイックスタートの Kubernetes Secret は、必要な 1 つの追加ステップ以外は標準の方法でセットアップされています。追加ステップとして、Spring Cloud Kubernetes プラグインを Secret のマウントパスで設定し、起動時に Secret が読み取れるようにする必要があります。Secret を設定するには、以下を行います。

  1. サンプル Secret オブジェクトの作成
  2. Secret のボリュームマウントの設定
  3. Secret プロパティーを読み取るため spring-cloud-kubernetes を設定

サンプル Secret オブジェクト

クイックスタートプロジェクトによって、以下のようなサンプル Secret sample-secret.yml が提供されます。Secret オブジェクトのプロパティー値は常に base64 でエンコードされます (base64 コマンドラインユーティリティーを使用)。Secret が Pod のファイルシステムにマウントされると、値は自動的に元のプレーンテキストにデコードされます。

sample-secret.yml ファイル

apiVersion: v1
kind: Secret
metadata: 1
  name: camel-config
type: Opaque
data:
  # The username is 'myuser'
  quickstart.queue-username: bXl1c2VyCg== 2
  quickstart.queue-password: MWYyZDFlMmU2N2Rm 3

1
metadata.name: Secret を識別します。OpenShift システムの他の部分はこの識別子を使用して Secret を参照します。
2
quickstart.queue-username: quickstartConfiguration Bean の queueUsername プロパティーにインジェクトすることを目的とします。値は base64 でエンコードする 必要 があります。
3
quickstart.queue-password: quickstartConfiguration Bean の queuePassword プロパティーにインジェクトすることを目的とします。値は base64 でエンコードする 必要 があります。
注記

Kubernetes では、プロパティー名を CamelCase で定義できません (プロパティー名をすべて小文字にする必要があります)。この制限を回避するには、ハイフンを使用した形式 queue-username を使用します。Spring はこれを queueUsername と一致します。これは、外部化設定に対して Spring Boot の リラックスバインディングルールを利用します。

Secret のボリュームマウントの設定

Secret をボリュームマウントとして設定し、起動時に Secret がロードされるようにアプリケーションを設定する必要があります。アプリケーションの起動後、Secret プロパティーはファイルシステムの指定の場所で利用可能になります。アプリケーションの deployment.yml ファイルは、Secret のボリュームマウントを定義する src/main/fabric8/ ディレクトリー下にあります。

deployment.yml ファイル

spec:
  template:
    spec:
      serviceAccountName: "qs-camel-config"
      volumes: 1
        - name: "camel-config"
          secret:
            # The secret must be created before deploying this application
            secretName: "camel-config"
      containers:
        -
          volumeMounts: 2
            - name: "camel-config"
              readOnly: true
              # Mount the secret where spring-cloud-kubernetes is configured to read it
              # see src/main/resources/bootstrap.yml
              mountPath: "/etc/secrets/camel-config"
          resources:
#            requests:
#              cpu: "0.2"
#              memory: 256Mi
#            limits:
#              cpu: "1.0"
#              memory: 256Mi
             env:
              - name: SPRING_APPLICATION_JSON
               value: '{"server":{"undertow":{"io-threads":1, "worker-threads":2 }}}'

1
デプロイメントは volumes セクションで、camel-config という名前の Secret を参照する camel-config という名前の新しいボリュームを宣言します。
2
デプロイメントは volumeMounts セクションで、新しいボリュームマウントを宣言します。これは、camel-config ボリュームを参照し、Secret ボリュームが Pod のファイルシステムの /etc/secrets/camel-config パスにマウントする必要があることを指定します。

Secret プロパティーを読み取るため spring-cloud-kubernetes を設定

Secret を Spring Boot の外部化設定と統合するには、Spring Cloud Kubernetes プラグインを Secret のマウントパスで設定する必要があります。Spring Cloud Kubernetes は指定の場所から Secret を読み取り、Spring Boot はそれをプロパティーソースとして利用できるようになります。Spring Cloud Kubernetes プラグインを設定するには、クイックスタートプロジェクトの src/main/resources 下にある bootstrap.yml ファイルを設定します。

bootstrap.yml ファイル

# Startup configuration of Spring-cloud-kubernetes
spring:
  application:
    name: camel-config
  cloud:
    kubernetes:
      reload:
        # Enable live reload on ConfigMap change (disabled for Secrets by default)
        enabled: true
      secrets:
        paths: /etc/secrets/camel-config

spring.cloud.kubernetes.secrets.paths プロパティーは、Pod の Secret ボリュームマウントのパスリストを指定します。

注記

bootstrap.properties ファイル (または bootstrap.yml ファイル) は、application.properties ファイルと同様に動作しますが、アプリケーションの起動時により前の段階でロードされます。bootstrap.properties ファイルの Spring Cloud Kubernetes プラグインに関連するプロパティーを設定した方が信頼性が高くなります。