12.2. ボリュームローテーションを使用したバインドされたサービスアカウントトークンの設定
ボリュームのデプロイメントを使用してバインドされたサービスアカウントのトークンを要求するように Pod を設定できます。
前提条件
-
dedicated-admin
ロールを持つユーザーとしてクラスターにアクセスできる。 -
サービスアカウントを作成している。この手順では、サービスアカウントの名前が
build-robot
であることを前提としています。
手順
ボリュームの展開を使用してバインドされたサービスアカウントのトークンを使用するように Pod を設定します。
以下の内容を含む
pod-projected-svc-token.yaml
ファイルを作成します。apiVersion: v1 kind: Pod metadata: name: nginx spec: securityContext: runAsNonRoot: true 1 seccompProfile: type: RuntimeDefault 2 containers: - image: nginx name: nginx volumeMounts: - mountPath: /var/run/secrets/tokens name: vault-token securityContext: allowPrivilegeEscalation: false capabilities: drop: [ALL] serviceAccountName: build-robot 3 volumes: - name: vault-token projected: sources: - serviceAccountToken: path: vault-token 4 expirationSeconds: 7200 5 audience: vault 6
- 1
- 侵害のリスクを最小限に抑えるために、コンテナーが root として実行されるのを防ぎます。
- 2
- リスクを軽減するために、必須のシステムコールに限定してデフォルトの seccomp プロファイルを設定します。
- 3
- 既存のサービスアカウントへの参照。
- 4
- トークンのデプロイメント先となるファイルのマウントポイントに対する相対パス。
- 5
- オプションで、サービスアカウントトークンの有効期限を秒単位で設定します。デフォルト値は 3600 秒 (1 時間) であり、この値は 600 秒 (10 分) 以上にする必要があります。トークンの有効期間がその 80% を過ぎている場合や、トークンの生成から 24 時間を経過している場合、kubelet はトークンのローテーションの試行を開始します。
- 6
- オプションで、トークンの意図された対象を設定します。トークンの受信側は、受信側のアイデンティティーがトークンの適切対象の要求と一致することを確認し、一致しない場合はトークンを拒否する必要があります。対象はデフォルトで API サーバーの識別子に設定されます。
注記予期しない障害を防ぐために、OpenShift Dedicated は
--service-account-extend-token-expiration
のデフォルトをtrue
にして、expirationSeconds
の値を最初のトークンの生成から 1 年になるようにオーバーライドします。この設定は変更できません。Pod を作成します。
$ oc create -f pod-projected-svc-token.yaml
kubelet は Pod に代わってトークンを要求し、保存し、トークンを設定可能なファイルパスで Pod に対して利用可能にし、有効期限に達するとトークンを更新します。
バインドされたトークンを使用するアプリケーションは、ローテーション時にトークンのリロードを処理する必要があります。
トークンの有効期間がその 80% を過ぎている場合や、トークンの生成から 24 時間を経過している場合、kubelet はトークンをローテーションします。