news 2026/9/13 10:41:14

Dapr Sidecar 注入器在测试集群报 “bad certificate“ 错误怎么恢复?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Dapr Sidecar 注入器在测试集群报 “bad certificate“ 错误怎么恢复?

Dapr Sidecar 注入器在测试集群报 "bad certificate" 错误怎么恢复?

【免费下载链接】daprDapr is a portable runtime for building distributed applications across cloud and edge, combining event-driven architecture with workflow orchestration.项目地址: https://gitcode.com/GitHub_Trending/da/dapr

在 Dapr 的 Kubernetes 测试集群(minikube 或自建的 E2E 测试环境)里跑端到端测试时,如果你曾经“直接删掉测试命名空间、再重装 Dapr 控制面”,sidecar 注入器(sidecar injector)就会失效,报出bad certificate错误。这篇文章讲清楚这个错误的触发条件,以及怎么用文档给出的命令把它恢复到可用状态。

适用前提:你在本地按 Dapr 的 E2E 测试流程部署过控制面(sentry、injector、daprd 等),并准备在当前集群上重新构建、部署和运行 E2E 测试。恢复过程从 Dapr 源码仓库的工作目录执行,命令连接的是当前 kubeconfig 指向的测试集群。

什么情况下会出现 "bad certificate"

文档给出的成因是一条明确的顺序问题:

在删除 dapr 测试命名空间之前,必须先执行helm uninstall。如果你在没有执行helm uninstall的情况下直接删掉 dapr 测试命名空间,随后又重新安装了 dapr 控制面,dapr sidecar 注入器将无法工作并报bad certificate

换句话说,这个错误通常出现在下面这条操作链上:

  1. 直接make delete-test-namespace(或kubectl delete namespace)删掉了测试命名空间;
  2. 但没有先跑helm uninstall卸载 Dapr 控制面;
  3. 之后又重装了控制面。

结果是命名空间里残留了旧的发布/证书状态,重装后的 sidecar 注入器无法正常工作。

恢复前的检查

在执行恢复命令前,先确认环境,避免删错命名空间:

  • 当前终端能访问目标测试集群(kubectl指向正确的 context)。
  • 环境变量DAPR_NAMESPACE已正确设置(通常是你部署 Dapr 时用的命名空间,如dapr-tests)。文档特别强调:执行卸载前务必确认DAPR_NAMESPACE已正确设置

如果走一键恢复(见下节第 3 步make e2e-build-deploy-run),还需要按 tests/docs/running-e2e-test.md “Prerequisites” 一节设置好DAPR_REGISTRYDAPR_TAG等 E2E 测试环境变量,因为它会重新构建并推送镜像。

恢复步骤

下面这条路径来自文档 Option 1(从干净状态构建、部署并运行测试),它正是处理该问题的推荐顺序:helm uninstall,再删命名空间,最后完整重建部署

副作用提示:下面第 1、2 步会卸载当前命名空间下的 Dapr 及相关发布、删除测试命名空间,属于破坏性操作,执行前确认DAPR_NAMESPACE无误且集群确实是你的测试集群。

  1. 卸载 Dapr 控制面及相关发布(daprdapr-kafkadapr-redisdapr-postgres):

    helm uninstall dapr dapr-kafka dapr-redis dapr-postgres -n $DAPR_NAMESPACE

    如果之前只部署过dapr本身,执行helm uninstall dapr -n $DAPR_NAMESPACE即可。文档明确说“你可以用helm uninstall命令来恢复”。

  2. 删除测试命名空间(在helm uninstall之后):

    make delete-test-namespace

    注意顺序:文档强调必须先helm uninstall再删命名空间,反过来正是导致bad certificate的操作。

  3. 从构建、部署到运行测试一步到位:

    make e2e-build-deploy-run

    该目标在 tests/dapr_tests.mk 中定义为:

    e2e-build-deploy-run: init-build-deploy setup-test-components build-e2e-app-all push-e2e-app-all test-e2e-all

    也就是重建命名空间、初始化第三方依赖、构建并推送镜像、部署控制面,然后运行 E2E 测试。如果你只想逐步执行、加快迭代,可按文档 Option 2 分别跑make create-test-namespacemake setup-helm-initmake setup-test-env-redis/setup-test-env-kafka/setup-test-env-postgresmake build-linuxmake docker-buildmake docker-pushmake docker-deploy-k8s,最后make test-e2e-all

验证恢复是否成功

部署阶段是第一个硬性检查点。make docker-deploy-k8s底层执行的是(见 Makefile 第 299–307 行):

helm upgrade --install \ dapr --namespace=$(DAPR_NAMESPACE) --wait --timeout 5m0s \ --set global.tag=... --set global.registry=$(DAPR_REGISTRY) ...

其中--wait --timeout 5m0s会让helm upgrade --install阻塞,直到控制面资源就绪才继续,或在 5 分钟超时前失败。这一步正常返回,说明控制面(含 sidecar 注入器相关资源)已按新发布重新拉起。

接着e2e-build-deploy-run会进入test-e2e-all,把 E2E 测试跑起来;sidecar 注入恢复后,测试应用部署时的 sidecar 注入才会正常进行。若你只想单独验证测试,可在完成部署后运行make test-e2e-all

避免再次踩坑

文档给出的预防规则就是顺序约束:任何要删除 dapr 测试命名空间的操作,前面都要先执行helm uninstall。文档 “Cleanup local environment” 一节给出的清理顺序正是这个原则的体现:

# Uninstall dapr, dapr-kafka, dapr-redis, dapr-postgres, then remove dapr-zipkin helm uninstall dapr -n $DAPR_NAMESPACE || true helm uninstall dapr-kafka -n $DAPR_NAMESPACE || true helm uninstall dapr-redis -n $DAPR_NAMESPACE || true helm uninstall dapr-postgres -n $DAPR_NAMESPACE || true kubectl delete deployment dapr-zipkin -n $DAPR_NAMESPACE || true # Remove the test namespace make delete-test-namespace

helm uninstall放在make delete-test-namespace之前,就能避免重装控制面后 sidecar 注入器报bad certificate。更多完整的 E2E 部署与清理流程见 tests/docs/running-e2e-test.md。

【免费下载链接】daprDapr is a portable runtime for building distributed applications across cloud and edge, combining event-driven architecture with workflow orchestration.项目地址: https://gitcode.com/GitHub_Trending/da/dapr

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/13 10:40:44

Python实现轻量级日志实时监控与告警系统

1. 项目概述在服务器运维和系统管理中,日志监控是最基础也最重要的环节之一。传统的日志检查方式需要人工定期查看日志文件,不仅效率低下,而且无法及时发现突发问题。我在管理十几台生产服务器时,就曾因为未能及时发现磁盘爆满的警…

作者头像 李华
网站建设 2026/9/13 10:40:31

JDK 17 HttpClient 批量并行请求实战指南

从JDK 9开始,Java官方终于带来了一个像样的HTTP客户端——java.net.http.HttpClient,到了JDK 17,这个模块已经相当成熟,接口稳定,性能也够看。我这两年用它在生产环境处理批量数据同步、批量状态查询这类场景&#xff…

作者头像 李华
网站建设 2026/9/13 10:39:31

PythonRobotics 如何用时空 A* 在动态障碍物环境中规划时间最优路径

PythonRobotics 如何用时空 A* 在动态障碍物环境中规划时间最优路径 【免费下载链接】PythonRobotics Python sample codes and textbook for robotics algorithms. 项目地址: https://gitcode.com/GitHub_Trending/py/PythonRobotics 在带动态障碍物的栅格环境中做路径…

作者头像 李华
网站建设 2026/9/13 10:35:43

如何彻底清除 Windows AI:禁用 Copilot 与移除 Recall 完整指南

如何彻底清除 Windows AI:禁用 Copilot 与移除 Recall 完整指南 【免费下载链接】RemoveWindowsAI Force Remove Copilot, Recall and More in Windows 11 项目地址: https://gitcode.com/GitHub_Trending/re/RemoveWindowsAI RemoveWindowsAI 是一款开源 Po…

作者头像 李华