K8s部署Spring Boot Admin,Actuator监控(不使用主机名通信)

---------------- 特别感谢:wang dayu 同学整理 ----------------

集成说明

1.由于环境上部署无法访问pod地址,需要将client的客户端服务 url和管理网址进行转换覆盖pod的地址
2.插件需要严格遵守与springboot,springcloud版本兼容性,
具体对应关系请参考该地址:
https://blog.csdn.net/q283614346/article/details/121146721
以下集成案例以springboot 版本1.5.7.RELEASE,springcloud 版本Dalston.SR4 ,Springboot admin 1.5.5为准。
3.springboot1.5默认暴露所有端点。Springboot2.0需要添加以下配置暴露端点

management: 
  endpoints: 
    web: 
      exposure:
        include: "*"

4.相关几个参数差异比对
spring boot 1.5:

#要注册的服务端地址
spring.boot.admin.url
#client的客户端服务url
spring.boot.admin.client.service-url
#client的管理网址
spring.boot.admin.client.management-url

spring boot 2.0:

#要注册的服务端地址
spring.boot.admin.client.url
#client的客户端服务url
spring.boot.admin.client.instance.service-url
#client的管理网址
spring.boot.admin.client.instance.management-url

官网地址:
https://codecentric.github.io/spring-boot-admin/1.5.7/#_notifications
https://codecentric.github.io/spring-boot-admin/2.3.1/#_notifications

Spring boot Admin 1.5.5 集成案例

server端

  1. 添加依赖
	 <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-actuator</artifactId>
      <exclusions>
        <exclusion>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter</artifactId>
        </exclusion>
      </exclusions>
	</dependency>
	<dependency>
      <groupId>de.codecentric</groupId>
      <artifactId>spring-boot-admin-server</artifactId>
      <version>1.5.5</version>
    </dependency>
    <dependency>
      <groupId>de.codecentric</groupId>
      <artifactId>spring-boot-admin-server-ui</artifactId>
      <version>1.5.5</version>
    </dependency>
    <dependency>
      <groupId>de.codecentric</groupId>
      <artifactId>spring-boot-admin-starter-client</artifactId>
      <version>1.5.5</version>
    </dependency>

  1. 启动类添加注解
@EnableAdminServer
  1. 添加配置:
spring:
  boot:
   admin:
    url: http://xxxxx.com:8080/xxx #访问admin所在服务的地址
management:
  security:
    enabled: false   #关掉security验证
  health:
    redis:
      enabled: false #关掉redis健康检查 依赖中由redis依赖会自动检查 这里关掉

client端

  1. 添加依赖
	<dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-actuator</artifactId>
      <exclusions>
        <exclusion>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter</artifactId>
        </exclusion>
      </exclusions>
	</dependency>

	<dependency>
      <groupId>de.codecentric</groupId>
      <artifactId>spring-boot-admin-starter-client</artifactId>
      <version>1.5.5</version>
    </dependency>

  1. 添加配置:
#springboot admin注册中心 填写上面Server端的访问地址
spring.boot.admin.url=http://xxx.com:8080/xxx
#要注册的客户端服务 url,可以覆盖k8s pod的url 这里是本服务的地址
spring.boot.admin.client.management-url=http://aaaa.com:8080/bbb
#要注册的客户端健康 URL,可以覆盖k8s pod的url,在注册表中必须是唯一的。  这里是本服务的health check地址
spring.boot.admin.client.health-url=http:/aaaa.com:8080/bbb/health
#要注册的管理网址,可以覆盖k8s pod的url 这里是本服务的地址
spring.boot.admin.client.service-url=http:/aaaa.com:8080/bbb/
#关闭验证
management.security.enabled=false
#忽略redis健康检查
management.health.redis.enabled=false

坑点

  1. k8s如果服务之间只允许使用svc访问,不允许容器名访问,Admin就搜集不到除了本服务以外的其它服务的detail信息,注册可以看到
  2. 网上大部分K8s部署Spring Boot Admin教程都是开启了容器名访问或者有第三方的服务注册中心,或者使用K8s的服务注册中心,当注册中心没有时,就比较难受了
  3. K8s没有开启服务注册中心,不允许容器名访问,就要把下面的配置配好:
#要注册的客户端服务 url,可以覆盖k8s pod的url 这里是本服务的地址
spring.boot.admin.client.management-url=http://aaaa.com:8080/bbb
#要注册的客户端健康 URL,可以覆盖k8s pod的url,在注册表中必须是唯一的。  这里是本服务的health check地址
spring.boot.admin.client.health-url=http:/aaaa.com:8080/bbb/health
#要注册的管理网址,可以覆盖k8s pod的url 这里是本服务的地址
spring.boot.admin.client.service-url=http:/aaaa.com:8080/bbb/
  1. 中间还踩了一个坑:1.5.5版本的3中的配置比2.x版本的少一个instance
    网上好多都是2.0以后的Spring boot Admin组件的client配置,我看了下当前引入的client的配置源码,才知道1.x和2.x的区别——差一个instance
    1.x:
package de.codecentric.boot.admin.client.config;
//此处省略 import
@ConfigurationProperties(
    prefix = "spring.boot.admin.client"
)
public class AdminClientProperties {
    
    
    private String managementUrl;
    private String managementBaseUrl;
    private String serviceUrl;
    private String serviceBaseUrl;
    private String healthUrl;
    @Value("${spring.application.name:spring-boot-application}")
    private String name;
    private boolean preferIp = false;
    private Map<String, String> metadata = new HashMap();
}

2.x:(来自:https://codecentric.github.io/spring-boot-admin/2.4.3/#spring-boot-admin-client/
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/u013014691/article/details/123449717
今日推荐