Spring boot kubernetes中的Spring引导服务总是以HTTP状态400响应
我们在Kubernetes运行Spring引导服务。Spring boot kubernetes中的Spring引导服务总是以HTTP状态400响应,spring-boot,kubernetes,kubernetes-ingress,kubernetes-health-check,kubernetes-security,Spring Boot,Kubernetes,Kubernetes Ingress,Kubernetes Health Check,Kubernetes Security,我们在Kubernetes运行Spring引导服务。 此服务具有终结点: -获得/健康 我们有使用此端点的活动性探测器。探测器成功运行。 这意味着可以从服务端(localhost)访问端点 当我在服务舱中运行时: wgethttps://localhost:8080/healthz 我得到一个答案(好) 当我尝试在podwget外部调用此端点时https://myhost:8080/healthz,我在没有身体的情况下得到响应400 我没有看到Sprint的任何日志。似乎还没有达到冲刺阶段。 当
此服务具有终结点:
-获得/健康 我们有使用此端点的活动性探测器。探测器成功运行。
这意味着可以从服务端(localhost)访问端点 当我在服务舱中运行时:
wgethttps://localhost:8080/healthz
我得到一个答案(好)
当我尝试在podwget外部调用此端点时https://myhost:8080/healthz
,我在没有身体的情况下得到响应400我没有看到Sprint的任何日志。似乎还没有达到冲刺阶段。
当我添加flag
-Djavax.net.debug=all
时,我在日志中看到TLS握手完成,然后:
GET /healthz HTTP/1.1
host: myhost:8080
accept: application/json
Connection: close
马上
HTTP/1.1 400
Transfer-Encoding: chunked
Date: Mon, 25 Jun 201 8 08:43:43 GMT
Connection: close
当我尝试wget时https://myhost:8080/blahblah
(不存在端点),
我还是拿到400,不是404
当我尝试wget时https://myWronghost:8080/healthz
(错误的主机),我得到一个错误的地址。这意味着主机“myhost”是正确的(否则我会得到这个错误)
Docker文件:
来自openjdk:8-jdk-alpine音量/tmp
ARG JAR_文件
复制${JAR\u FILE}app.JAR
ENV JAVA_TOOL_OPTIONS-Dfile.encoding=UTF8
入口点[“java”、“-Djavax.net.debug=all”、“-Djava.security.egd=file:/dev//uradom”、“-jar”、“/app.jar”]
曝光8080 总结:
服务端点可以从服务盒内部访问,但不能从服务盒外部访问。
知道为什么吗 更新:
通过使用完全限定域名调用服务解决了此问题:serviceName.namespaceName.svc.cluster.local
Tomcat没有接受短域名serviceName.namespaceName的呼叫,它响应了400。不确定它在这里是否有任何影响,但您正在尝试使用
https
进行所有操作。你能改用http
吗?您的spring应用程序可能不支持端口8080上的https。通过使用完全限定的域名调用服务解决了问题:服务名称.命名空间名称.svc.集群.本地
该服务未接受带有服务名称的调用。命名空间名称,响应400。如果您使用的是Spring boot 2,这可能是由于Tomcat 8.5.31中的错误导致的,该错误不允许FQDN的最后部分使用“-” 将Tomcat更新为8.5.32修复了此问题 参考:
- 您的问题可能是由以下原因引起的。
您所要做的就是将Tomcat版本升级到8.5.32。您可以通过在pom.xml文件中添加版本来实现这一点
<properties>
<!-- your properties -->
<tomcat.version>8.5.32</tomcat.version>
</properties>
8.5.32
是的,我们正在使用端口8080,并且最近添加了tls支持,因此它是https
。httptoo也存在同样的问题,我们使用Spring 2.0.2.RELEASE,Tomcat嵌入其中,因此我们不指定其版本。我添加的属性是可选的,可以覆盖嵌入Tomcat的版本。