【发布时间】:2022-01-09 14:27:27
【问题描述】:
我的设置是在 kubernetes pod 中运行的 spring-boot 服务。我已将 terminationGracePeriodSeconds 设置为 30 秒,并将我的 Spring Boot 服务中的正常关机时间配置为 spring.lifecycle.timeout-per-shutdown-phase: 30。
我正在尝试使用以下测试控制器 -
@GetMapping("/hello")
public String hello(@RequestParam("time") long time) throws InterruptedException, IOException {
System.out.println("Sleeping for " + time + " milliseconds...");
Thread.sleep(time);
System.out.println("Done Sleeping");
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url("http://www.google.com")//My server address will go here
.build();
Response response = client.newCall(request).execute();
System.out.println("*********************** " + response.code());
return "Hello World";
}
我尝试了两种方案
-
本地运行的 spring boot 服务。命中以上端点并使用 -
kill pid(SIGTERM) 停止服务器。我可以访问 google.com 端点并获得回复。 -
在 K8 pod 上部署了这些更改。点击上面的端点并使用 -
kubectl delete pod my-pod -n my-namespace删除 pod。在这种情况下,我成功获得了“完成睡眠”日志,但是一旦它尝试调用 google.com,它就会失败并显示 -
SEVERE: Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception
java.net.ConnectException: Failed to connect to www.google.com/172.217.27.196:80
at okhttp3.internal.connection.RealConnection.connectSocket(RealConnection.java:265)
at okhttp3.internal.connection.RealConnection.connect(RealConnection.java:183)
at okhttp3.internal.connection.ExchangeFinder.findConnection(ExchangeFinder.java:224)
at okhttp3.internal.connection.ExchangeFinder.findHealthyConnection(ExchangeFinder.java:108)
at okhttp3.internal.connection.ExchangeFinder.find(ExchangeFinder.java:88)
at okhttp3.internal.connection.Transmitter.newExchange(Transmitter.java:169)
at
......
......
Caused by: java.net.ConnectException: Connection refused (Connection refused)
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:607)
at okhttp3.internal.platform.Platform.connectSocket(Platform.java:130)
at okhttp3.internal.connection.RealConnection.connectSocket(RealConnection.java:263)
... 116 more
看起来在 kubernetes 正常关闭期间,我们无法访问外部端点。我在它周围找不到任何文档。这是正确的吗?
【问题讨论】:
标签: java spring-boot kubernetes