Не удается сделать исходящий запрос из Google Cloud Run полностью управляемым - PullRequest
1 голос
/ 12 марта 2020

При попытке сделать исходящий запрос на внешний API из Google Cloud Run полностью управляемым, вызов http как-то застревает, или через некоторое время мы сталкиваемся с SSLHandshakeException Remote host terminated the handshake. Образ работает хорошо, когда выполняется локально, поэтому я предполагаю, что это происходит из изолированной облачной среды запуска.

Моя docker конфигурация:

FROM maven:3.6.3-jdk-11 as builder

WORKDIR /app
COPY pom.xml .
COPY src ./src

# Build a release artifact.
RUN mvn package -DskipTests

FROM openjdk:11-jdk

COPY --from=builder /app/target/poc-*.jar /poc.jar

# Run the service on container startup.
CMD ["java","-Djava.security.egd=file:/dev/./urandom","-Dserver.port=${PORT}","-jar","/poc.jar"]

Фрагмент застрявшего кода:

private HttpEntity<String> prepareSecuredRestCallToAJStage() {
    CredentialsDTO credentials = new CredentialsDTO(USERNAME, PASSWORD);
    // Getting stuck here
    TokenDTO response = restTemplate.postForObject(LOGIN_CHECK_URL, credentials, TokenDTO.class);
    // We never get the response
    String token = BEARER_TOKEN_PREFIX + Objects.requireNonNull(response).getToken();
}

Для информации, это приложение Spring Boot, и мы получаем эту трассировку при запуске:
Container Sandbox: Unsupported syscall setsockopt(0x9,0x6,0x6,0x3e7a3d678e2c,0x4,0xa)

Что-то мне не хватает?

Ответы [ 2 ]

0 голосов
/ 13 марта 2020

После погружения в документацию Google Cloud Run вычисление должно быть ограничено запросом. Мой процесс выполнял фоновое действие на этапе запуска / развертывания, выходя за рамки запроса. Кажется, в этом конкретном c случае выходной трафик c недоступен.

Чтобы исправить это, мы предоставляем конечную точку API, запускающую процесс. Таким образом, он работает.

В качестве примечания, проблема не связана с трассировкой журнала Unsupported syscall setsockopt, поскольку процесс выполняет только запрос POST.

0 голосов
/ 12 марта 2020

Это действительно ограничение песочницы Cloud Run. Проект gVisor (который использует Cloud Run) только частично поддерживает setsockopt.

...