AKS启用CSI密钥存储旋转后出现secrets-store-creds未找到告警
问题分析与解决方案
针对你遇到的MountRotationFailed错误,以下是逐步排查和修复建议:
1. 修复Helm命令的语法错误
你的启用旋转功能的Helm命令存在语法问题:-n istio-system--set中缺少空格,导致命名空间参数被错误解析。正确的命令应为:
helm upgrade csi-secrets-store-provider-azure csi-secrets-store-provider-azure/csi-secrets-store-provider-azure \ --set secrets-store-csi-driver.enableSecretRotation=true \ -n istio-system \ --set secrets-store-csi-driver.syncSecret.enabled=true
重新运行修正后的命令,确保旋转控制器组件被正确部署并配置。
2. 验证密钥的存在性与正确性
确认secrets-store-creds密钥确实存在于default命名空间,且名称完全匹配Deployment中的配置:
# 检查密钥是否存在 kubectl get secrets secrets-store-creds -n default # 查看密钥详情,确认包含Azure服务主体所需的字段 kubectl describe secret secrets-store-creds -n default
密钥必须包含以下字段(针对Azure服务主体认证):
azureclientidazureclientsecretazuretenantid
3. 检查旋转控制器的权限
旋转控制器运行在istio-system命名空间,需要具备跨命名空间读取密钥的权限。验证相关RBAC配置:
# 查看旋转控制器的ClusterRole权限 kubectl describe clusterrole secrets-store-csi-driver-rotation-clusterrole # 确认ClusterRoleBinding绑定到正确的服务账户 kubectl describe clusterrolebinding secrets-store-csi-driver-rotation-clusterrolebinding
确保ClusterRole包含以下规则:
rules: - apiGroups: [""] resources: ["secrets"] verbs: ["get", "list", "watch"]
4. 查看旋转控制器日志获取详细错误
获取旋转控制器Pod的日志,排查具体的访问问题:
# 获取旋转控制器Pod名称 ROTATION_POD=$(kubectl get pods -n istio-system | grep rotation | awk '{print $1}') # 查看日志 kubectl logs $ROTATION_POD -n istio-system
日志中可能包含更详细的上下文,比如是否是权限问题还是密钥确实无法被API服务器找到。
5. 验证控制器能否访问目标密钥
在旋转控制器Pod中直接调用K8s API,验证是否能读取default命名空间的密钥:
kubectl exec -it $ROTATION_POD -n istio-system -- sh # 在Pod内部执行API调用 TOKEN=$(cat /var/run/secrets/kubernetes.io/serviceaccount/token) curl -H "Authorization: Bearer $TOKEN" https://kubernetes.default.svc/api/v1/namespaces/default/secrets/secrets-store-creds
- 返回404:密钥确实不存在或名称有误
- 返回403:控制器服务账户缺少权限
- 返回200:密钥可正常访问,需排查其他问题
内容的提问来源于stack exchange,提问作者Nayden Van
相关产品推荐
相关产品推荐

