openshift - Spring Cloud Kubernetes 使用自定义 spring.servlet.context-path 获取 url

标签 openshift spring-boot-admin spring-cloud-kubernetes

我们目前正在使用 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"

我们如何自定义 managementUrlhealthUrl 以便我们的 Spring Boot 管理服务器可以使用正确的 URL 来监控此服务?

最佳答案

我也遇到了同样的问题。但用其他解决方案解决了:

  1. 我更改了 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/

    相关文章:

    java - Openshift 上带有 Strimzi 运算符的 Apache Kafka - 无法连接

    java - 如何在 spring-boot-admin 中显示日志文件?

    java - Spring 属性占位符默认值如何工作?

    spring-boot - Spring Boot 2.6.6 的 Spring Cloud Kubernetes 负载均衡器问题

    spring - Spring Boot Cloud Kubernetes配置不适用于多个Pod

    python - 在 openshift 上的 Bottle.py 应用程序中加载静态文件

    openshift 中的 Node.js 部署

    mysql - Openshift:如何通过 RHC 或 SSH 将数据库导入 MySQL?

    spring-boot - 使用 Eureka 客户端和自定义上下文路径的 Spring Boot 管理在健康状态上失败

    spring-boot - Spring Cloud Kubernetes : Timeout waiting for informers cache to be ready