如何解决使用 Kubernetes 服务发现从 Spring Boot Admin 访问安全执行器
我有一个 Spring Boot Admin 应用程序,它使用 Kubernetes 服务发现来获取 Spring Boot 客户端应用程序。
spring:
cloud:
kubernetes:
discovery:
all-namespaces: true
service-labels:
springbootadmin: true
reload:
enabled: true
period: 60s
strategy: refresh
如果没有安全的执行器端点,这可以正常工作。
但是一旦客户端执行器端点受到基本身份验证的保护,这将不再起作用。 Spring Boot Admin Documentation 描述了如何将身份验证数据添加到 Spring Boot Admin Server 位,但没有描述在通过 Kubernetes 发现服务时如何提供。
我已经尝试过这些配置。但它们不起作用:
-
Spring Boot Admin Docs:
spring.boot.admin.instance-auth.default-user-name
+password
-
Spring Boot Admin Tutorial
spring.boot.admin.client.instance.metadata.user.name
+password
我还找到了一个描述如何configure the credentials in the Kubernetes annotations的答案。这可行,但我更愿意在 Spring Boot Admin 配置(我可以在其中使用 Secrets)中配置凭据,而不是将 Kubernetes 配置中的每个服务单独配置为不安全标签。
我想我必须在服务发现元数据中注入凭据。但是如何?
编辑
我检查了服务发现,没有发现可以提供的身份验证配置选项:
- 类 KubernetesDiscoveryProperties.Metadata
- class de.codecentric.boot.admin.server.cloud.discovery.DefaultServiceInstanceConverter
解决方法
可以选择向 SBA 发送给客户端的请求添加自定义标头:
@Bean
public HttpHeadersProvider customHttpHeadersProvider() {
return (instance) -> {
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.add("Authorization","Basic bXlTcGVjaWFsVXNlcm5hbWU6bXlTcGVjaWFsUGFzc3dvcmQ=");
return httpHeaders;
};
}
,
可以通过以下设置来设置身份验证:
spring:
boot:
admin:
instance-auth:
default-user-name: user
default-password: pw
这些设置由实例化 bean AdminServerInstanceWebClientConfiguration
的配置类 basicAuthHttpHeadersProvider
读取。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。