Fabric8 kubernetes 客户端和观察程序的 java.net.SocketException

标签 java kubernetes fabric8

我收到 java.net.SocketException: Socket Closed 异常,并带有 fabric8 kubernerties client版本 4.10.2 和 Watcher .

代码如下:

KubernetesClient client = createClient();
client.pods().watch(createLogWatcher("pod"));
client.apps().deployments().watch(createLogWatcher("deployment"));
client.services().watch(createLogWatcher("service"));
client.extensions().ingresses().watch(createLogWatcher("ingress"));

// do stuff with client

当我的应用程序关闭时,我收到以下异常

08:10:37.180 [OkHttp https://test-api.ib.dnsbego.de:6443/...] WARN  i.f.k.c.d.i.WatchConnectionManager - Exec Failure
javax.net.ssl.SSLException: Socket closed
    at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:127)
    at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:320)
    at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:263)
    at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:258)
    at java.base/sun.security.ssl.SSLSocketImpl.handleException(SSLSocketImpl.java:1315)
    at java.base/sun.security.ssl.SSLSocketImpl$AppInputStream.read(SSLSocketImpl.java:839)
    at okio.Okio$2.read(Okio.java:140)
    at okio.AsyncTimeout$2.read(AsyncTimeout.java:237)
    at okio.RealBufferedSource.request(RealBufferedSource.java:72)
    at okio.RealBufferedSource.require(RealBufferedSource.java:65)
    at okio.RealBufferedSource.readByte(RealBufferedSource.java:78)
    at okhttp3.internal.ws.WebSocketReader.readHeader(WebSocketReader.java:117)
    at okhttp3.internal.ws.WebSocketReader.processNextFrame(WebSocketReader.java:101)
    at okhttp3.internal.ws.RealWebSocket.loopReader(RealWebSocket.java:273)
    at okhttp3.internal.ws.RealWebSocket$1.onResponse(RealWebSocket.java:209)
    at okhttp3.RealCall$AsyncCall.execute(RealCall.java:174)
    at okhttp3.internal.NamedRunnable.run(NamedRunnable.java:32)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
    at java.base/java.lang.Thread.run(Thread.java:834)
    Suppressed: java.net.SocketException: Socket closed
        at java.base/java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:113)
        at java.base/java.net.SocketOutputStream.write(SocketOutputStream.java:150)
        at java.base/sun.security.ssl.SSLSocketOutputRecord.encodeAlert(SSLSocketOutputRecord.java:81)
        at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:351)
        ... 18 common frames omitted
Caused by: java.net.SocketException: Socket closed
    at java.base/java.net.SocketInputStream.socketRead0(Native Method)
    at java.base/java.net.SocketInputStream.socketRead(SocketInputStream.java:115)
    at java.base/java.net.SocketInputStream.read(SocketInputStream.java:168)
    at java.base/java.net.SocketInputStream.read(SocketInputStream.java:140)
    at java.base/sun.security.ssl.SSLSocketInputRecord.read(SSLSocketInputRecord.java:448)
    at java.base/sun.security.ssl.SSLSocketInputRecord.bytesInCompletePacket(SSLSocketInputRecord.java:68)
    at java.base/sun.security.ssl.SSLSocketImpl.readApplicationRecord(SSLSocketImpl.java:1104)
    at java.base/sun.security.ssl.SSLSocketImpl$AppInputStream.read(SSLSocketImpl.java:823)
    ... 14 common frames omitted

最佳答案

我自己解决了这个问题,但我想我应该为下一个人发帖,因为我找不到任何关于此问题的讨论。

每个 watcher(...) 调用都会返回一个可以关闭的 Watch 实例,因此我通过以下方式解决了这个问题:

KubernetesClient client = createClient();
List<Watch> watches = new ArrayList<>();
watches.add(client.pods().watch(createLogWatcher("pod")));
watches.add(client.apps().deployments().watch(createLogWatcher("deployment")));
watches.add(client.services().watch(createLogWatcher("service")));
watches.add(client.extensions().ingresses().watch(createLogWatcher("ingress")));
try {
   // do stuff
} finally {
   watches.forEach(Watch::close);
}

关于Fabric8 kubernetes 客户端和观察程序的 java.net.SocketException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62590035/

相关文章:

kubernetes - 在 NixOS 上设置 Kubernetes

kubernetes - 同一个 Pod 中的每个容器是否都有独立的文件系统?

eclipse - 如何在 Eclipse 的 JAVA_OPTS 中禁用 SSL?

java - 是否可以使用 Spring Boot 进行微服务

amazon-ecs - 如何使用授权的 io.fabric8 maven 插件将 docker 镜像推送到 Amazon ECR

java - 为什么使用方法引用会在字节码中生成内部类?

java - Jersey/JAX-RS 中的嵌套内部类

java - 在android中将字符串转换为日期 "2016-01-28T12:08:47.676706-05:00"

azure - 我是否无法在 Azure 上编辑 AKS 群集?

java - jna getDesktop bringWindowToTop