次の方法で共有


トラブルシューティング

SSE は、クラスター内のシークレットのストレージを管理するコントローラーと、Azure Key Vault (AKV) からシークレットにアクセスするプロバイダーの 2 つのコンテナーを含むポッドを含む Kubernetes デプロイです。 SSE は、 SecretSync および SecretProviderClass リソースを使用して構成されます。 構成パラメーターに加えて、 SecretSync クラスは、必要に応じてエラー メッセージを含む同期操作の状態で SSE コントローラーによって更新されます。

SecretSync の状態の確認

SSE に関する最も一般的な問題は、関連する SecretSync オブジェクトの状態を確認することで調査できます。 kubectl describe ... コマンドを使用して、同期オブジェクトの状態を表示します。 全体的な構成に加えて、出力には、シークレットの作成タイムスタンプ、シークレットのバージョン、各同期イベントの詳細なステータス メッセージが含まれます。 この出力を使用して、接続または構成エラーを診断し、シークレット値がいつ変化するかを確認できます。

kubectl describe secretsync <secret-sync-name> -n ${KUBERNETES_NAMESPACE}

SecretSync の状態の理由

次の表に、エラーを解決するための一般的な状態の理由、その意味、および潜在的なトラブルシューティング手順を示します。

SecretSync の状態の理由 詳細 さらに修正/調査する手順
UpdateNoValueChangeSucceeded Kubernetes のシークレットは、AKV バージョンに対して完全に最新の状態です。 最新のチェック中に変更は必要ありませんでした。 n/a
UpdateValueChangeOrForceUpdateSucceeded Kubernetes のシークレット全体が、最新のチェック中に AKV バージョンに正常に更新されました。 n/a
PartialSync シークレット内の一部の項目を更新できませんでした。 status.conditions.message オブジェクトのSecretSync フィールドを調べることで、さらに調査します。 このフィールドには、シークレット内の各項目の成功または失敗の文字列化された json の概要が含まれています。
ProviderError プロバイダー (Azure Key Vault への接続) に問題があるため、シークレットの作成に失敗しました。 この失敗は、インターネット接続、ID 同期シークレットのアクセス許可の不足、SecretProviderClass の構成の誤り、その他の問題が原因である可能性があります。 PartialSyncと同様に最初に調査し、次に次のコマンドを使用してプロバイダーのログを確認します。
kubectl get pods -n azure-secret-store
kubectl logs <secret-sync-controller-pod-name> -n azure-secret-store --container='provider-azure-installer'
InvalidClusterSecretLabelError
InvalidClusterSecretAnnotationError
SSE が管理していないこの名前のシークレットが既に存在します。 シークレットを削除して、SSE がシークレットを再作成できるようにします。 kubectl delete secret <secret-name>
SSE で、構成された回転ポーリング間隔よりも速くシークレットを再作成するように強制するには、SecretSync オブジェクト (kubectl delete secretsync <secret-name>) を削除し、シークレット同期クラス (kubectl apply -f <path_to_secret_sync>) を再適用します。
UserInputValidationFailed シークレット同期クラスが正しく構成されていない (無効なシークレットの種類など) ため、シークレットの更新に失敗しました。 シークレット同期クラスの定義を確認し、エラーを修正します。 次に、SecretSync オブジェクト (kubectl delete secretsync <secret-name>) を削除し、シークレット同期クラス (kubectl delete -f <path_to_secret_sync>) を削除し、シークレット同期クラス (kubectl apply -f <path_to_secret_sync>) を再適用します。
ControllerSpcError SSE がプロバイダー クラスを取得できなかったか、プロバイダー クラスが正しく構成されていないため、シークレットの更新に失敗しました。 プロバイダー クラスを確認し、エラーを修正します。 次に、SecretSync オブジェクト (kubectl delete secretsync <secret-name>) を削除し、プロバイダー クラス (kubectl delete -f <path_to_provider>) を削除し、プロバイダー クラス (kubectl apply -f <path_to_provider>) を再適用します。
ControllerInternalError
ValidatingAdmissionPolicyCheckFailed
ControllerSyncFailed
SSE で内部エラーが発生したため、シークレットの更新に失敗しました。 詳細については、SSE のログまたはイベントを確認してください。
kubectl get pods -n azure-secret-store
kubectl logs <secret-sync-controller-pod-name> -n azure-secret-store --container='manager'
UnknownError Kubernetes シークレット値のファイルの部分置換の適用中にシークレットの更新に失敗しました。 このエラーは、SSE 以外のユーザーがシークレットを変更した場合、または SSE の更新中に問題が発生した場合に発生する可能性があります。 シークレットと SecretSync オブジェクトを削除してから、 SecretSync オブジェクトを再適用して SSE でシークレットを再作成します。
kubectl delete secret <secret-name>
kubectl delete secretsync <secret-name>
kubectl apply -f <path_to_secret_sync>
これが役に立たない場合は、手順に従って、 ControllerInternalErrorと同様にログを検査します。

ネットワーク アクセスの問題

タイムアウト、またはキー コンテナー (<vault_name>.vault.azure.net) に到達できないことを示すメッセージを含む ProviderError 状態理由が表示された場合は、解決しなければならないネットワーク アクセスの問題が発生している可能性があります。 考えられるネットワーク アクセスの問題は次のとおりです。

Azure Key Vault ファイアウォールの構成

既定では、Azure Key Vault には制限の緩いファイアウォール構成があり、パブリック インターネット経由でアクセスできますが、Azure Key Vault へのネットワーク アクセスを制限することをお勧めします。 キー コンテナーのファイアウォール構成でクラスターへのアクセスが許可されていることを再確認します。 Azure Key Vault のネットワーク セキュリティに関するページを参照してください

Azure Arc Gateway (プレビュー)

Azure Arc ゲートウェイ (プレビュー) では、Azure Key Vault へのネットワーク接続は提供されません。 SSE がシークレットを同期できるように、 <vault_name>.vault.azure.net へのネットワーク アクセスを個別に許可する必要があります。 関連する Arc ゲートウェイAzure Key Vaultのドキュメントを参照。

Azure Arc Private Link を使用している場合: DNS とネットワークで、Arc に接続されたクラスターが Key Vault のプライベート エンドポイントに到達できることを確認します。 コンテナー名の DNS 解決がプライベート IP を返し、プライベート リンク IP がクラスターから正しくルーティングされていることを確認します。 Azure Key Vault でのプライベート リンク構成の問題の診断に関するページを参照してください。

遅いまたは不足している更新

シークレット ストア拡張機能は、Azure Key Vault で更新プログラムを確認するまで、設定された間隔を待機します。 AKV でシークレットが更新されると、その間隔の有効期限が切れ、SSE が再度確認されたときにのみ、クラスターにダウンロードされます。 既定の間隔は 1 時間 (3,600 秒) です。これは、構成設定 rotationPollIntervalInSecondsによって設定されます。 構成リファレンスを参照してください

SSE がシークレットを直ちに更新するように強制するには、spec リソース内の SecretSync フィールドの任意の部分を更新します。 forceSynchronization特別なフィールドは、構成に影響を与えないspec内で設定できます。forceSynchronizationの値が変更された場合、SSE はシークレットを直ちに更新します。 例については、 SecretSync リファレンス) を参照してください。