是否可以禁用 spring 云流入门应用程序的安全性?
Is it possible to disable security on spring cloud stream starter apps?
我正在玩 Spring 云数据流。我已经使用相关 documentation. When registering the 1.5.x based starter apps 在 Kubernetes 上成功部署了 SCDF,一切都按预期工作,在部署流定义期间不需要进一步配置入门应用程序。
使用 2.x based starter apps 时,切换到 Spring Boot 2.0 会引入一些变化,需要适应这些变化,例如执行器端点发生了变化。作为参考,以下是我在部署流期间提供的属性:
app.*.management.endpoints.web.exposure.include=health,info,binders
deployer.*.cpu=2
deployer.*.memory=4096
deployer.http.count=2
deployer.*.kubernetes.livenessProbePath=/actuator/health
deployer.*.kubernetes.readinessProbePath=/actuator/info
但是,就绪探测失败了,因为 health
和 info
端点现在似乎默认受到保护。因此,pods 最终陷入崩溃循环,因为从 Kubernetes 的角度来看,它们永远都没有准备好。
我按照我的流定义所依赖的 patching the starter apps 上的指南解决了这种情况(例如 throughput
接收器),如下所示:
@SpringBootApplication
@Import({org.springframework.cloud.stream.app.throughput.sink.ThroughputSinkConfiguration.class})
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
@Configuration
protected static class ThroughputSinkSecurityConfiguration extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.requestMatchers(EndpointRequest.to("health", "info")).permitAll();
}
}
}
有没有办法通过标志或属性指定这种安全配置?默认情况下不应该有这样的 WebSecurityConfigurerAdapter
以使 Kubernetes 可以访问 health
和 info
端点吗?
我建议从另一个角度审视情况,并提供来自 Kubernetes 的凭证以访问您的安全微服务。
目前所有资源都要保护的现状问题。
您可以生成自己的静态密码并将其存储在 application.properties
每次重新启动应用程序时不要重新配置 Kubernetes:https://docs.spring.io/spring-boot/docs/2.0.3.RELEASE/reference/htmlsingle/#boot-features-security
Artem 的回复非常相关。我还想分享一些其他特定于安全和 OOTB 应用程序的方法。
在 1.6 SNAPSHOT 中,我们最近通过 spring-cloud/spring-cloud-deployer-kubernetes#236 to plug basic-auth realm to interact with secured actuator endpoints. They are applicable to both liveness and readiness probes. Here's the commit/docs 添加了支持,供您参考。
如果您根本不需要安全性(虽然不推荐),您可以明确禁用安全配置。
dataflow:>stream create foo -- definition "http | throughput"
dataflow:>stream deploy foo --properties app.*.spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration"
(即 foo
流定义中的所有应用程序将以 SecurityAutoConfiguration
开头排除)
我正在玩 Spring 云数据流。我已经使用相关 documentation. When registering the 1.5.x based starter apps 在 Kubernetes 上成功部署了 SCDF,一切都按预期工作,在部署流定义期间不需要进一步配置入门应用程序。
使用 2.x based starter apps 时,切换到 Spring Boot 2.0 会引入一些变化,需要适应这些变化,例如执行器端点发生了变化。作为参考,以下是我在部署流期间提供的属性:
app.*.management.endpoints.web.exposure.include=health,info,binders
deployer.*.cpu=2
deployer.*.memory=4096
deployer.http.count=2
deployer.*.kubernetes.livenessProbePath=/actuator/health
deployer.*.kubernetes.readinessProbePath=/actuator/info
但是,就绪探测失败了,因为 health
和 info
端点现在似乎默认受到保护。因此,pods 最终陷入崩溃循环,因为从 Kubernetes 的角度来看,它们永远都没有准备好。
我按照我的流定义所依赖的 patching the starter apps 上的指南解决了这种情况(例如 throughput
接收器),如下所示:
@SpringBootApplication
@Import({org.springframework.cloud.stream.app.throughput.sink.ThroughputSinkConfiguration.class})
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
@Configuration
protected static class ThroughputSinkSecurityConfiguration extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.requestMatchers(EndpointRequest.to("health", "info")).permitAll();
}
}
}
有没有办法通过标志或属性指定这种安全配置?默认情况下不应该有这样的 WebSecurityConfigurerAdapter
以使 Kubernetes 可以访问 health
和 info
端点吗?
我建议从另一个角度审视情况,并提供来自 Kubernetes 的凭证以访问您的安全微服务。
目前所有资源都要保护的现状问题。
您可以生成自己的静态密码并将其存储在 application.properties
每次重新启动应用程序时不要重新配置 Kubernetes:https://docs.spring.io/spring-boot/docs/2.0.3.RELEASE/reference/htmlsingle/#boot-features-security
Artem 的回复非常相关。我还想分享一些其他特定于安全和 OOTB 应用程序的方法。
在 1.6 SNAPSHOT 中,我们最近通过 spring-cloud/spring-cloud-deployer-kubernetes#236 to plug basic-auth realm to interact with secured actuator endpoints. They are applicable to both liveness and readiness probes. Here's the commit/docs 添加了支持,供您参考。
如果您根本不需要安全性(虽然不推荐),您可以明确禁用安全配置。
dataflow:>stream create foo -- definition "http | throughput"
dataflow:>stream deploy foo --properties app.*.spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration"
(即 foo
流定义中的所有应用程序将以 SecurityAutoConfiguration
开头排除)