Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring boot kubernetes中的Spring引导服务总是以HTTP状态400响应_Spring Boot_Kubernetes_Kubernetes Ingress_Kubernetes Health Check_Kubernetes Security - Fatal编程技术网

Spring boot kubernetes中的Spring引导服务总是以HTTP状态400响应

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的任何日志。似乎还没有达到冲刺阶段。 当

我们在Kubernetes运行Spring引导服务。
此服务具有终结点:
-获得/健康

我们有使用此端点的活动性探测器。探测器成功运行。
这意味着可以从服务端(localhost)访问端点

当我在服务舱中运行时:
wgethttps://localhost:8080/healthz
我得到一个答案(好)

当我尝试在pod
wget外部调用此端点时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
      。http
      too也存在同样的问题,我们使用Spring 2.0.2.RELEASE,Tomcat嵌入其中,因此我们不指定其版本。我添加的属性是可选的,可以覆盖嵌入Tomcat的版本。