При попытке сделать исходящий запрос на внешний 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)
Что-то мне не хватает?