Сервис весенней загрузки в kubernetes всегда отвечает со статусом HTTP 400 - PullRequest
0 голосов
/ 25 июня 2018

У нас в Kubernetes запущена служба Spring Boot.
У этой службы есть конечная точка:
- GET / healthz

У нас есть датчик живучести, который использует эту конечную точку.Зонд работает успешно.
Это означает, что конечная точка доступна из служебного модуля (localhost).

Когда я запускаю в сервисном модуле: wget https://localhost:8080/healthz Я получаю ответ (ОК)

Когда я пытаюсь вызвать эту конечную точку за пределами модуля wget https://myhost:8080/healthz, я получаю ответ400 без тела .
Я не вижу никаких журналов Спринта.Кажется, что он не достигает Спринта.
Когда я добавил флаг -Djavax.net.debug=all, я вижу в журнале, что рукопожатие TLS закончено, а затем:

GET /healthz HTTP/1.1    
host: myhost:8080    
accept: application/json    
Connection: close     

и сразу

HTTP/1.1 400 
Transfer-Encoding: chunked
Date: Mon, 25 Jun 201 8 08:43:43 GMT
Connection: close

Когда я пытаюсь wget https://myhost:8080/blahblah (не существует конечной точки), я все равно получаю 400, а не 404!

Когда я пытаюсь wget https://myWronghost:8080/healthz (неправильный хост), я получаю ошибку Bad address.Это означает, что хост 'myhost' правильный (иначе я бы получил эту ошибку).

Файл Docker:

ОТ openjdk: 8-jdk-alpine
ОБЪЕМ / tmp
ARG JAR_FILE
COPY $ {JAR_FILE} app.jar
ENV JAVA_TOOL_OPTIONS -Dfile.encoding = UTF8
ENTRYPOINT ["java", "- Djavax.net.debug = all", "-Djava.security.egd = file: / dev /./ urandom", "- jar"," / app.jar "]
EXPOSE 8080

Суммирование:
Конечные точки службы доступны изнутри модуля обслуживания, но недоступны снаружи модуля.
Любая идея, почему?

Обновление:
Проблема была решена путем вызова службы с полным доменным именем : serviceName.namespaceName.svc.cluster.local
Tomcat не принимал звонки с коротким доменом serviceName.namespaceName , он ответил 400.

Ответы [ 4 ]

0 голосов
/ 11 июля 2018

Ваша проблема может быть вызвана https://github.com/spring-projects/spring-boot/issues/13205. Все, что вам нужно сделать, это обновить версию Tomcat до 8.5.32.Вы можете сделать это, добавив версию в файл pom.xml.

 <properties>
    <!-- your properties -->
    <tomcat.version>8.5.32</tomcat.version>
 </properties>
0 голосов
/ 27 июня 2018

Проблема была решена путем вызова службы с полным доменным именем:
service-name.namespace-name.svc.cluster.local
Служба не принимала вызовы с service-name.namespace-name , ответ 400.

0 голосов
/ 11 июля 2018

Если вы используете Spring boot 2, это может быть связано с ошибкой в Tomcat 8.5.31 , которая не допускает '-' в последней части полного доменного имени

Обновление Tomcat до8.5.32 исправляет это.

Ссылка:

0 голосов
/ 25 июня 2018

Не уверен, что это имеет какое-то влияние, но вы пытаетесь все с помощью https.Можете ли вы попробовать вместо http?Ваше весеннее приложение, вероятно, не поддерживает https для порта 8080.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...