AWS Secrets Manager を Amazon EKS と統合する際の問題のトラブルシューティング方法を教えてください。

最終更新日: 2021 年 12 月 10 日

AWS Secrets Manager を Amazon Elastic Kubernetes Service (Amazon EKS) と統合しようとしていますが、エラーが発生します。

簡単な説明

AWS Secrets Manager を Amazon EKS と統合しているときに、ポッドが Running 状態にならなかった場合、エラーが発生することがあります。この問題を解決するには、Secrets Store Container Storage Interface (CSI) ドライバーポッドのログを調べて、実行されていないポッドがないか確認します。

解決方法

シークレットストア CSI ドライバーポッドを次のように表示します。

kubectl --namespace=kube-system get pods -l "app=secrets-store-csi-driver"

シークレットストア CSI ポッドからのログを表示します。

kubectl --namespace=kube-system logs -f -l "app=secrets-store-csi-driver"

次のログは、各ポッドのパフォーマンスが良好であることを示しています。

I1120 20:21:19.135834       1 secrets-store.go:74] Driver: secrets-store.csi.k8s.io
I1120 20:21:19.135857       1 secrets-store.go:75] Version: v0.2.0, BuildTime: 2021-08-12-18:55
I1120 20:21:19.135868       1 secrets-store.go:76] Provider Volume Path: /etc/kubernetes/secrets-store-csi-providers
I1120 20:21:19.135874       1 secrets-store.go:77] GRPC supported providers will be dynamically created
I1120 20:21:19.135895       1 driver.go:80] "Enabling controller service capability" capability="CREATE_DELETE_VOLUME"
I1120 20:21:19.135912       1 driver.go:90] "Enabling volume access mode" mode="SINGLE_NODE_READER_ONLY"
I1120 20:21:19.135922       1 driver.go:90] "Enabling volume access mode" mode="MULTI_NODE_READER_ONLY"
I1120 20:21:19.135938       1 main.go:172] starting manager
I1120 20:21:19.136210       1 server.go:111] Listening for connections on address: //csi/csi.sock
I1120 20:21:18.956092       1 exporter.go:33] metrics backend: prometheus

注: 同じアクションを実行するポッドは、重複するエントリとして表示されます。

volumeMountSecretProviderClass がポッドと同じ名前空間に存在しない場合、次のエラーを受け取ります。

* Warning  FailedMount  3s (x4 over 6s)  kubelet, kind-control-plane  MountVolume.SetUp failed for volume "secrets-store-inline" : rpc error: code = Unknown desc = failed to get secretproviderclass default/aws, error: secretproviderclasses.secrets-store.csi.x-k8s.io "aws" not found

SecretProviderClass はポッドと同じ名前空間に存在する必要があります。

シークレットストア CSI ドライバーはデーモンセットとしてデプロイされます。CSI ドライバーポッドがノードで実行されていない場合、次のエラーが表示されます。

* Warning  FailedMount  1s (x4 over 4s)  kubelet, kind-control-plane  MountVolume.SetUp failed for volume "secrets-store-inline" : kubernetes.io/csi: mounter.SetUpAt failed to get CSI client: driver name secrets-store.csi.k8s.io not found in the list of registered CSI drivers

ノードが汚染されている場合は、Secrets Store CSI ドライバーデーモンセットにテイントのトラレーションを追加します。

Secrets Store CSI ドライバーポッドをノードで実行できないようにするノードセレクターがないか確認します。

kubectl --namespace=kube-system describe pods -l "app=secrets-store-csi-driver" | grep Node-Selectors*

ポッド内のワーカーノードに関連付けられているラベルを取得します。

kubectl get node --selector=kubernetes.io/os=linux

前述のコマンドの出力を比較して、ラベルがノードセレクターの値と一致していることを確認します。

CSI ドライバーがクラスターにデプロイされたかどうかを確認します。すべてのポッドは Running 状態である必要があります。

次のコマンドを実行します。

kubectl get pods -l app=secrets-store-csi-driver -n kube-system

- または -

kubectl get daemonset csi-secrets-store-secrets-store-csi-driver -n kube-system

出力例:

kubectl get csidriver
NAME                       ATTACHREQUIRED   PODINFOONMOUNT   MODES       AGE
secrets-store.csi.k8s.io   false            true             Ephemeral   110m

上記の出力は、ドライバーがクラスターにデプロイされたことを示しています。secrets-store.csi.k8s.io が見つからない場合は、ドライバを再インストールしてください。

SecretProviderClass がプルしたファイルが 4 メガバイト (MiB) より大きい場合、grpc: received message larger than max (最大サイズよりも大きいメッセージを受信しました) というメッセージを含む FailedMount 警告が表示されることがあります。4 MiB を超える応答を受け入れるようにドライバーを設定できます。より大きな応答を受け入れるには、csi-secrets-store デーモンセットのシークレットストアコンテナに --max-call-recv-msg-size=size in bytes を指定します。

注: size in bytes は、ドライバーが許容するサイズに置き換えます。

それでも問題が解決しない場合は、ログイベントを時系列で確認し、他に障害が発生していないかどうかを確認します。

kubectl get events -n kube-system --sort-by='.metadata.creationTimestamp'

この記事はお役に立ちましたか?


請求に関するサポートまたは技術サポートが必要ですか?