我们目前正在使用 Spring Boot Admin 来监控 OpenShift 集群内的微服务。
Spring Boot 管理应用程序使用 spring-cloud-starter-kubernetes 依赖项从 Openshift 的服务发现中获取有关服务的信息。
一切都很好,直到我们使用自定义server.servlet.context-path部署应用程序。
例如,我们的微服务有server.servlet.context-path=/dictionary。但是,Spring Boot 管理员从 OpenShift 的发现中获取以下信息:
{
"registration": {
"name": "dictionary-service",
"managementUrl": "http://10.130.1.169:8080/actuator",
"healthUrl": "http://10.130.1.169:8080/actuator/health",
"serviceUrl": "http://10.130.1.169:8080/",
"source": "discovery",
"metadata": {
"app": "dictionary-service",
...
}
}
}
因此,Spring Boot Admin 期望执行器在 "http://10.130.1.169:8080/actuator"
上工作但它实际上正在工作 "http://10.130.1.169:8080/dictionary/actuator"
我们如何自定义 managementUrl 和 healthUrl 以便我们的 Spring Boot 管理服务器可以使用正确的 URL 来监控此服务?
最佳答案
我也遇到了同样的问题。但用其他解决方案解决了:
- 我更改了 Spring Boot 应用程序上的管理端口
management.server.port=8090
server.port=8080
现在管理端点(/actuator、/actuator/health)不受“server.servlet.context-path”的影响。
- 我打开了 k8s 部署上的端口
apiVersion: apps/v1
kind: Deployment
metadata:
name: app
spec:
replicas: 1
template:
spec:
containers:
- name: app
image: ${docker_image}
ports:
- containerPort: 8080
- containerPort: 8090
- 我在 k8s 服务上使用名称声明了端口
kind: Service
apiVersion: v1
metadata:
name: app-service
spec:
selector:
app: app
ports:
- protocol: TCP
port: 8080
targetPort: 8080
name: api
- protocol: TCP
port: 8090
targetPort: 8090
name: management
- 我对 Spring Boot Admin 说了要使用的端口名称
spring.cloud.kubernetes.discovery.primary-port-name=management
关于openshift - Spring Cloud Kubernetes 使用自定义 spring.servlet.context-path 获取 url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60736910/