Kubernetes部署的Spring Boot Admin证书错误排查求助
Spring Boot Admin在Kubernetes中的服务发现机制与证书错误排查
一、Spring Boot Admin在K8s中获取待监控应用的方式
- 命名空间访问逻辑:默认情况下,Spring Boot Admin会访问当前Pod所在的命名空间;若配置了
spring.boot.admin.discovery.kubernetes.namespaces参数,则会扫描指定的多个命名空间;未配置该参数且拥有集群级权限时,会扫描所有命名空间。 - 服务发现流程:
- 通过fabric8 Kubernetes Client调用K8s API Server,执行Service资源的List操作(对应报错中的
Operation: [list] for kind: [Service]) - 筛选带有指定标签的Service(默认标签为
spring.boot.admin.enabled=true,可通过spring.boot.admin.discovery.kubernetes.service-labels自定义) - 解析Service关联的Pod,提取应用的Actuator端点地址,完成监控目标的注册
- 通过fabric8 Kubernetes Client调用K8s API Server,执行Service资源的List操作(对应报错中的
二、证书错误的排查与解决
报错根源是访问K8s API Server时SSL握手失败,无法验证服务器证书,按以下步骤排查:
- 确认访问目标:Spring Boot Admin使用的fabric8 Client默认读取Pod内的
/var/run/secrets/kubernetes.io/serviceaccount/下的token和ca.crt,访问地址来自环境变量KUBERNETES_SERVICE_HOST和KUBERNETES_SERVICE_PORT指向的K8s API Server。 - 问题排查点:
- Pod内的
ca.crt文件是否存在、是否过期或被篡改 - 自定义K8s API Server证书时,Spring Boot Admin的JVM信任库未包含该根证书
- ServiceAccount权限变更,导致无法读取
ca.crt文件
- Pod内的
- 解决步骤:
- 进入Spring Boot Admin Pod,检查
ca.crt的有效性:# 查看证书内容 cat /var/run/secrets/kubernetes.io/serviceaccount/ca.crt # 验证证书有效期 openssl x509 -in /var/run/secrets/kubernetes.io/serviceaccount/ca.crt -text -noout - 测试API Server证书信任:
curl --cacert /var/run/secrets/kubernetes.io/serviceaccount/ca.crt https://${KUBERNETES_SERVICE_HOST}:${KUBERNETES_SERVICE_PORT} - 若使用自定义证书,将根证书导入JVM信任库:
或通过启动参数指定自定义信任库:keytool -importcert -file /path/to/custom-root-ca.crt -alias k8s-api-ca -keystore $JAVA_HOME/lib/security/cacerts -storepass changeit -nopromptjava -Djavax.net.ssl.trustStore=/opt/app/truststore.jks -Djavax.net.ssl.trustStorePassword=your-password -jar spring-boot-admin.jar - 验证ServiceAccount权限,确保拥有Service的List权限:
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: spring-boot-admin-cluster-role rules: - apiGroups: [""] resources: ["services", "pods"] verbs: ["list", "watch"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: spring-boot-admin-binding subjects: - kind: ServiceAccount name: spring-boot-admin-sa namespace: your-namespace roleRef: kind: ClusterRole name: spring-boot-admin-cluster-role apiGroup: rbac.authorization.k8s.io
- 进入Spring Boot Admin Pod,检查
内容的提问来源于stack exchange,提问作者spq838
相关产品推荐
相关产品推荐

