Kubernetes サービスアカウント
Kubernetes サービスアカウントは、pod で実行されるプロセスのアイデンティティを提供します。詳細については、「Kubernetes ドキュメント」の「サービスアカウントの管理
サービスアカウントトークン
Kubernetes バージョン 1.21
以降では、BoundServiceAccountTokenVolume
Go バージョン
0.15.7
以降Python - バージョン
12.0.0
以降Java バージョン
9.0.0
以降JavaScript バージョン
0.10.3
以降Ruby
master
ブランチHaskell バージョン
0.3.0.0
C# バージョン
7.0.5
以降
ワークロードで古いバージョンのクライアントを使用している場合は、更新する必要があります。有効期限付きの新しいサービスアカウントトークンにクライアントがスムーズに移行できるようにするには、Kubernetes バージョン 1.21
でデフォルトの 1 時間を超えてサービスアカウントトークンの有効期限を延長します。Amazon EKS クラスターの場合、延長できる有効期限は 90 日です。Amazon EKS クラスターの Kubernetes API サーバーでは、90 日を超えるトークンのリクエストは拒否されます。アプリケーションとその依存関係を確認し、Kubernetes クライアント SDK が前記のバージョンと同じかそれ以降であることを確認することをお勧めします。
API サーバーが 1 時間を超える古いトークンによるリクエストを受信すると、API 監査ログイベントに annotations.authentication.k8s.io/stale-token
で注釈を付けます。注釈の値は次の例のようになります。
subject: system:serviceaccount:common:fluent-bit, seconds after warning threshold: 4185802.
クラスターでコントロールプレーンのログ記録が有効になっている場合、注釈は監査ログに記録されます。以下の CloudWatch Log Insights クエリを使用すると、Amazon EKS クラスター内で古いトークンを使っているすべての pods を特定できます。
fields @timestamp | filter @logStream like /kube-apiserver-audit/ | filter @message like /seconds after warning threshold/ | parse @message "subject: *, seconds after warning threshold:*\"" as subject, elapsedtime
subject
は、pod が使用したサービスアカウントを示します。elapsedtime
は、最新のトークンを読み込んでからの経過時間 (秒単位) を示します。elapsedtime
が 90 日を超えると、API サーバーへのリクエストは拒否されます。トークンの自動更新を行う前記のバージョンのいずれかを使用するよう、アプリケーションの Kubernetes クライアント SDK をプロアクティブに更新する必要があります。使用しているサービスアカウントトークンが 90 日に近く、かつトークンの有効期限が切れる前にクライアント SDK のバージョンを更新するために十分な時間がない場合、既存の pods を終了して新しいものを作成できます。サービスアカウントトークンが再フェッチされるので、クライアントバージョン SDK を更新するのに 90 日が追加されたことになります。
pod がデプロイの一部である場合、高可用性を維持しながら pods を終了する方法として、次のコマンドによるロールアウトの実行をお勧めします。
をデプロイの名前で置き換えます。my-deployment
kubectl rollout restart deployment/
my-deployment
クラスターアドオン
以下のクラスターアドオンが更新され、サービスアカウントトークンを自動的に再フェッチする Kubernetes クライアント SDK が使用できるようになりました。リストされているバージョン、またはそれ以降のバージョンを、1.21
以降のクラスターにインストールすることをお勧めします。
-
Amazon VPC CNI および CNI メトリクスヘルパーのプラグインのバージョン
1.8.0
以降。現在のバージョンを確認したり、更新したりするには、「Amazon VPC CNI plugin for Kubernetes Amazon EKS アドオンの使用」および「Amazon VPC CNI plugin for Kubernetes メトリクスヘルパーアドオンのインストールまたは更新」を参照してください。 -
CoreDNS バージョン
1.8.4
以降。現在のバージョンを確認したり、更新したりするには、「CoreDNS のセルフマネージド型アドオンを更新する」を参照してください。 -
AWS Load Balancer Controller バージョン
2.0.0
以降。現在のバージョンを確認したり、更新したりするには、「AWS Load Balancer Controller アドオンのインストール」を参照してください。 -
kube-proxy
バージョン1.21.2-eksbuild.2
以降。現在のバージョンを確認したり、更新したりするには、「Kubernetes kube-proxy のセルフマネージド型アドオンの更新」を参照してください。 AWS for Fluent Bit バージョン
2.25.0
以降。現在のバージョンを更新するには、GitHub で「Releases」(リリース) を参照してください。 Fluentd イメージバージョン 1.14.6-1.2
以降、および Kubernetes メタデータバージョン 2.11.1 以降用の Fluentd フィルタープラグイン。