This documentation is for a release that is no longer maintained
See documentation for the latest supported version 3 or the latest supported version 4.3.10. ビルドの概要
Secret
オブジェクトタイプはパスワード、OpenShift Container Platform クライアント設定ファイル、dockercfg
ファイル、プライベートソースリポジトリーの認証情報などの機密情報を保持するメカニズムを提供します。シークレットは機密内容を Pod から切り離します。シークレットはボリュームプラグインを使用してコンテナーにマウントすることも、システムが Pod の代わりにシークレットを使用して各種アクションを実行することもできます。
YAML シークレットオブジェクト定義
apiVersion: v1 kind: Secret metadata: name: test-secret namespace: my-namespace type: Opaque data: username: dmFsdWUtMQ0K password: dmFsdWUtMg0KDQo= stringData: hostname: myapp.mydomain.com
apiVersion: v1
kind: Secret
metadata:
name: test-secret
namespace: my-namespace
type: Opaque
data:
username: dmFsdWUtMQ0K
password: dmFsdWUtMg0KDQo=
stringData:
hostname: myapp.mydomain.com
- 1
- シークレットにキー名および値の構造を示しています。
- 2
data
フィールドでキーに使用できる形式は、Kubernetes identifiers glossary のDNS_SUBDOMAIN
値のガイドラインに従う必要があります。- 3
data
マップのキーに関連付けられる値は base64 でエンコーディングされている必要があります。- 4
stringData
マップのエントリーが base64 に変換され、このエントリーは自動的にdata
マップに移動します。このフィールドは書き込み専用です。この値はdata
フィールドでのみ返されます。- 5
stringData
マップのキーに関連付けられた値は単純なテキスト文字列で構成されます。
3.10.1. シークレットのプロパティー
キーのプロパティーには以下が含まれます。
- シークレットデータはその定義とは別に参照できます。
- シークレットデータのボリュームは一時ファイルストレージ機能 (tmpfs) でサポートされ、ノードで保存されることはありません。
- シークレットデータは namespace 内で共有できます。
3.10.2. シークレットの種類
type
フィールドの値で、シークレットのキー名と値の構造を指定します。このタイプを使用して、シークレットオブジェクトにユーザー名とキーの配置を実行できます。検証の必要がない場合には、デフォルト設定の opaque
タイプを使用してください。
以下のタイプから 1 つ指定して、サーバー側で最小限の検証をトリガーし、シークレットデータに固有のキー名が存在することを確認します。
-
kubernetes.io/service-account-token
。サービスアカウントトークンを使用します。 -
kubernetes.io/dockercfg
。必須の Docker 認証には .dockercfg ファイルを使用します。 -
kubernetes.io/dockerconfigjson
。必須の Docker 認証には .docker/config.json ファイルを使用します。 -
kubernetes.io/basic-auth
。Basic 認証で使用します。 -
kubernetes.io/ssh-auth
。SSH キー認証で使用します。 -
kubernetes.io/tls
。TLS 認証局で使用します。
検証の必要がない場合には type= Opaque
と指定します。これは、シークレットがキー名または値の規則に準拠しないという意味です。opaque
シークレットでは、任意の値を含む、体系化されていない key:value
ペアも利用できます。
example.com/my-secret-type
などの他の任意のタイプを指定できます。これらのタイプはサーバー側では実行されませんが、シークレットの作成者がその種類のキー/値の要件に従う意図があることを示します。
3.10.3. シークレットの更新
シークレットの値を変更する場合、値 (すでに実行されている Pod で使用される値) は動的に変更されません。シークレットを変更するには、元の Pod を削除してから新規の Pod を作成する必要があります (同じ PodSpec を使用する場合があります)。
シークレットの更新は、新規コンテナーイメージのデプロイと同じワークフローで実行されます。kubectl rolling-update
コマンドを使用できます。
シークレットの resourceVersion
値は参照時に指定されません。したがって、シークレットが Pod の起動と同じタイミングで更新される場合、Pod に使用されるシークレットのバージョンは定義されません。
現時点で、Pod の作成時に使用されるシークレットオブジェクトのリソースバージョンを確認することはできません。今後はコントローラーが古い resourceVersion
を使用して再起動できるよう Pod がこの情報を報告できるようにすることが予定されています。それまでは既存シークレットのデータを更新せずに別の名前で新規のシークレットを作成します。
3.10.4. シークレットの作成
シークレットに依存する Pod を作成する前に、シークレットを作成する必要があります。
シークレットの作成時に以下を実行します。
- シークレットデータでシークレットオブジェクトを作成します。
- Pod のサービスアカウントをシークレットの参照を許可するように更新します。
-
シークレットを環境変数またはファイルとして使用する Pod を作成します (
secret
ボリュームを使用)。
手順
作成コマンドを使用して JSON または YAML ファイルのシークレットオブジェクトを作成できます。
oc create -f <filename>
$ oc create -f <filename>
Copy to Clipboard Copied! たとえば、ローカルの .docker/config.json ファイルからシークレットを作成できます。
oc create secret generic dockerhub \ --from-file=.dockerconfigjson=<path/to/.docker/config.json> \ --type=kubernetes.io/dockerconfigjson
$ oc create secret generic dockerhub \ --from-file=.dockerconfigjson=<path/to/.docker/config.json> \ --type=kubernetes.io/dockerconfigjson
Copy to Clipboard Copied! このコマンドにより、
dockerhub
という名前のシークレットの JSON 仕様が生成され、オブジェクトが作成されます。apiVersion: v1 kind: Secret metadata: name: mysecret type: Opaque data: username: dXNlci1uYW1l password: cGFzc3dvcmQ=
apiVersion: v1 kind: Secret metadata: name: mysecret type: Opaque
1 data: username: dXNlci1uYW1l password: cGFzc3dvcmQ=
Copy to Clipboard Copied! - 1
- opaque シークレットを指定します。
apiVersion: v1 kind: Secret metadata: name: aregistrykey namespace: myapps type: kubernetes.io/dockerconfigjson data: .dockerconfigjson:bm5ubm5ubm5ubm5ubm5ubm5ubm5ubmdnZ2dnZ2dnZ2dnZ2dnZ2dnZ2cgYXV0aCBrZXlzCg==
apiVersion: v1 kind: Secret metadata: name: aregistrykey namespace: myapps type: kubernetes.io/dockerconfigjson
1 data: .dockerconfigjson:bm5ubm5ubm5ubm5ubm5ubm5ubm5ubmdnZ2dnZ2dnZ2dnZ2dnZ2dnZ2cgYXV0aCBrZXlzCg==
2 Copy to Clipboard Copied!
3.10.4.1. シークレットの使用
シークレットの作成後に、Pod を作成してシークレットを参照し、ログを取得し、Pod を削除することができます。
手順
シークレットを参照する Pod を作成します。
oc create -f <your_yaml_file>.yaml
$ oc create -f <your_yaml_file>.yaml
Copy to Clipboard Copied! ログを取得します。
oc logs secret-example-pod
$ oc logs secret-example-pod
Copy to Clipboard Copied! Pod を削除します。
oc delete pod secret-example-pod
$ oc delete pod secret-example-pod
Copy to Clipboard Copied!
追加リソース
シークレットデータを含む YAML ファイルのサンプル
4 つのファイルを作成する YAML シークレット
apiVersion: v1 kind: Secret metadata: name: test-secret data: username: dmFsdWUtMQ0K password: dmFsdWUtMQ0KDQo= stringData: hostname: myapp.mydomain.com secret.properties: |- property1=valueA property2=valueB
apiVersion: v1 kind: Secret metadata: name: test-secret data: username: dmFsdWUtMQ0K
1 password: dmFsdWUtMQ0KDQo=
2 stringData: hostname: myapp.mydomain.com
3 secret.properties: |-
4 property1=valueA property2=valueB
Copy to Clipboard Copied! シークレットデータと共にボリュームのファイルが設定された Pod の YAML
apiVersion: v1 kind: Pod metadata: name: secret-example-pod spec: containers: - name: secret-test-container image: busybox command: [ "/bin/sh", "-c", "cat /etc/secret-volume/*" ] volumeMounts: # name must match the volume name below - name: secret-volume mountPath: /etc/secret-volume readOnly: true volumes: - name: secret-volume secret: secretName: test-secret restartPolicy: Never
apiVersion: v1 kind: Pod metadata: name: secret-example-pod spec: containers: - name: secret-test-container image: busybox command: [ "/bin/sh", "-c", "cat /etc/secret-volume/*" ] volumeMounts: # name must match the volume name below - name: secret-volume mountPath: /etc/secret-volume readOnly: true volumes: - name: secret-volume secret: secretName: test-secret restartPolicy: Never
Copy to Clipboard Copied! シークレットデータと共に環境変数が設定された Pod の YAML
apiVersion: v1 kind: Pod metadata: name: secret-example-pod spec: containers: - name: secret-test-container image: busybox command: [ "/bin/sh", "-c", "export" ] env: - name: TEST_SECRET_USERNAME_ENV_VAR valueFrom: secretKeyRef: name: test-secret key: username restartPolicy: Never
apiVersion: v1 kind: Pod metadata: name: secret-example-pod spec: containers: - name: secret-test-container image: busybox command: [ "/bin/sh", "-c", "export" ] env: - name: TEST_SECRET_USERNAME_ENV_VAR valueFrom: secretKeyRef: name: test-secret key: username restartPolicy: Never
Copy to Clipboard Copied! シークレットデータと環境変数が投入されたビルド設定の YAML
apiVersion: v1 kind: BuildConfig metadata: name: secret-example-bc spec: strategy: sourceStrategy: env: - name: TEST_SECRET_USERNAME_ENV_VAR valueFrom: secretKeyRef: name: test-secret key: username
apiVersion: v1 kind: BuildConfig metadata: name: secret-example-bc spec: strategy: sourceStrategy: env: - name: TEST_SECRET_USERNAME_ENV_VAR valueFrom: secretKeyRef: name: test-secret key: username
Copy to Clipboard Copied!