当前位置: 首页 > 知识库问答 >
问题:

从运行SpringBoot应用程序的Pod向GC存储转换

郭璞
2023-03-14

然后我的豆荚都可以通过这个网关的虚拟服务到达,它工作得很好,因为它们上面有Istio-Car集装箱,然后我可以从外面到达它们。

因此,我在开发环境中配置了这个应用程序,以便从ENV值中获取凭据:

ENV GOOGLE_APPLICATION_CREDENTIALS="/app/service-account.json"

我知道这不安全,但我只想确定它是认证的。就像我从圆木里看到的那样,它是。

当我的代码操作存储时,需要一个这种类型的对象,我通过这样做得到一个对象:

this.storage = StorageOptions.getDefaultInstance().getService();
[2019-04-25T03:17:40.040Z] [org.apache.juli.logging.DirectJDKLog] [http-nio-8080-exec-1] [175] [ERROR] transactionId=d781f21a-b741-42f0-84e2-60d59b4e1f0a Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is com.google.cloud.storage.StorageException: Remote host closed connection during handshake] with root cause
java.io.EOFException: SSL peer shut down incorrectly
        at sun.security.ssl.InputRecord.read(InputRecord.java:505)
        at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:975)
        at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1367)
        at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1395)
        at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1379)
        at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:559)
...

Caused by: javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake
        at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:994)
        at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1367)
        at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1395)
        at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1379)
        at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:559)
        at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185)
        at sun.net.www.protocol.https.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:162)
        at com.google.api.client.http.javanet.NetHttpRequest.execute(NetHttpRequest.java:142)
        at com.google.api.client.http.javanet.NetHttpRequest.execute(NetHttpRequest.java:84)
        at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:1011)
        at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:499)
        at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:432)
        at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:549)
        at com.google.cloud.storage.spi.v1.HttpStorageRpc.list(HttpStorageRpc.java:358)
        ... 65 common frames omitted
Caused by: java.io.EOFException: SSL peer shut down incorrectly
        at sun.security.ssl.InputRecord.read(InputRecord.java:505)
        at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:975)

...

看起来,当我从Pod进行调用时,预计会有一些额外的Https配置。我不知道对不对。

所以我想知道的是:

>

  • 如果这是某种防火墙规则阻止从我的吊舱到“外部”的调用(奇怪的是,因为它们运行在同一个网络上,或者至少我认为是这样)。

    或者,如果我需要使用一些自定义HTTP配置来创建存储对象,请参见以下参考:https://googleapis.github.io/google-cloud-java/google-cloud-clients/apidocs/com/google/cloud/storageoptions.html#getDefaultthTtpTransportOptions--

    我对HTTPs和安全协议的了解不是很好,所以可能是我对这方面概念的缺乏使我无法看到一些明显的东西。

    如果有人对可能导致这种情况的原因有任何想法,我将非常感谢。

  • 共有1个答案

    何高旻
    2023-03-14

    解决了。真的是Istio。

    我不知道我们需要一个服务入口资源来定义网状网外的入站和出站调用。

    因此,即使GCS在GKE的同一个项目中,它们也被称为完全分离的服务。

    apiVersion: networking.istio.io/v1alpha3
    kind: ServiceEntry
    metadata:
      namespace: {{ cloud_app_namespace }}
      name: external-google-api
    spec:
      hosts:
      - "www.googleapis.com"
      - "metadata.google.internal"
      - "storage.googleapis.com"
      location: MESH_EXTERNAL
      ports:
      - number: 443
        name: https
        protocol: HTTPS
      - number: 80
        name: http
        protocol: HTTP
    
     类似资料:
    • 我试图在SpringMVC中运行SpringBoot应用程序,在SpringMVCPOM中添加SpringBoot应用程序依赖项,并扫描SpringBoot包,但我面临以下问题

    • 我有两个k8s吊舱在运行。每个吊舱内都有一个单独的容器。我的应用程序将在每个容器中运行。我想从Pod1中的应用程序直接向Pod2中的应用进行HTTP调用。 假设我在集群外部保存了某种持久性存储。所以我的逻辑是这样的。 如何从我的应用程序中获取此IP地址。我正在使用Java(播放框架)。

    • 问题内容: 我有Java应用程序,不幸的是,它在一段时间后开始消耗大量内存。使事情复杂化的是,它不仅是Java应用程序,还是JavaFX 2应用程序。 我怀疑可能存在一些内存泄漏,甚至在底层JavaFX调用和本机库中也是如此。 理想的解决方案是在某个时刻获取所有java对象的转储(及其内存使用情况),然后分析该转储。有什么办法可以做到这一点? 问题答案: 有很多方法可以获取堆转储,从简单的工具(例

    • 问题内容: 是否有可能仅从正在运行的nginx进程中获取nginx使用的配置? 获取conf文件路径。有时会显示出来,有时却不会。可能就像(与)一样 那么是唯一的解决方案吗? 从这个问题出发,是否可以直接从nginx进程中转储conf数据结构?或者至少转储conf文件路径? 问题答案: 从Nginx 1.9.2开始,您可以使用以下标志转储Nginx配置: —与相同,但另外将配置文件转储到标准输出(

    • 版本 openjdk版本“11.0.11”2021-04-20 如果可能的话,请不要告诉我像我以前看到其他人回答的那样“阅读基础知识”。我只是不确定为什么我的代码不能在我的最后一个项目中运行。 提前谢谢你!