Spring Cloud Gateway в CloudFoundry

Я пытался запустить свои приложения после отправки их в экземпляр CloudFoundry. Экземпляр, который я использую, не позволяет выполнять запросы с использованием http (они просто истекают по таймауту), поэтому мне нужно направлять все запросы на https.

Я использую следующие компоненты / версии:

  • Java 10
  • Spring Boot 2.0.4.RELEASE / Spring Cloud Finchley.SR1
  • весна-облако-шлюз
  • Весна-облако-конфигурация-сервер
  • Весна-облако-Starter-Netflix-Eureka

Неудачная конфигурация

EurekaClient Config (в шлюзе и бэкэнде, куда должен маршрутизироваться gw)

eureka:
  client:
    serviceUrl:
      defaultZone: ${DISCOVERY_SERVICE_URL:http://localhost:8061}/eureka/
  instance:
    hostname: ${vcap.application.uris[0]:localhost}
    nonSecurePortEnabled: false
    securePortEnabled: true
    securePort: ${server.port}
    statusPageUrl: https://${eureka.instance.hostname}/actuator/info
    healthCheckUrl: https://${eureka.instance.hostname}/actuator/health
    homePageUrl: https://${eureka.instance.hostname}/
    secure-virtual-host-name: https://${vcap.application.application_uris[0]}

Конфигурация шлюза

spring:
  cloud:
    gateway:
      discovery:
        locator:
          enabled: true
      routes:
      - id: user-service
        uri: lb://user-service
        predicates:
        - Path=/user/**
        filters:
        - RewritePath=/user/(?<segment>.*), /$\{segment}

То, что я уже пробовал:

  • Использование lb:https://user-service, как описано в документах -> Насколько я понимаю, эффекта не будет
  • Используйте реальные URL-адреса приложений (uri: https://user-service.cf-instance.io) -> Маршрутизация работает должным образом.

Но я не хочу определять URL-адреса в своей конфигурации, они должны возвращаться eureka и правильно создаваться шлюзом.

заранее спасибо

Редактировать:

Вот результат /eureka/apps https://pastebin.com/WP3b6PQG

В настоящее время я работаю над добавлением текущего кода в GitHub. Я отредактирую этот пост, когда найду время, чтобы получить ясное состояние.

Изменить 2:

Вы можете найти полный пример (с SpringCloudGateway, Eureka, ...) по адресу мой GitHub Это работающий пример, применяемая конфигурация не будет использовать Eureka. Чтобы использовать Eureka, необходимо использовать gateway-service-cloud.yml в службе конфигурации.

- id: user-service uri: lb://user-service

Не обращайте внимания на службу документации, это пока не сработает, сначала мне нужно переписать путь.


person Konrad Grüner    schedule 18.08.2018    source источник
comment
Есть ли сервисы, зарегистрированные с безопасным портом в eureka?   -  person spencergibb    schedule 19.08.2018
comment
Да, сервисы правильно зарегистрированы на панели управления eureka. Когда я щелкаю идентификатор на панели управления, я перенаправляюсь на конечную точку работоспособности службы. Также ответ шлюзу содержит правильный uri, но без самой схемы. Поэтому я думаю, что в конфигурации шлюза чего-то не хватает, что схема может / будет установлена ​​на https.   -  person Konrad Grüner    schedule 19.08.2018
comment
Можете ли вы показать результат <eurekaserver>/eureka/apps?   -  person spencergibb    schedule 20.08.2018
comment
Я отредактировал сообщение, чтобы добавить запрашиваемую вами информацию. Сегодня сделал еще один тест. Я развернул приложения с двумя разными конфигурациями. Первый был с фиксированными URL-адресами https, а второй - с конфигурацией lb. Сгенерированный xml для /eureka/apps точно такой же (кроме ip, временных меток и id).   -  person Konrad Grüner    schedule 26.08.2018


Ответы (1)


Хорошо, я нашел решение во время устранения проблемы "маршрутизации" с моим documentation-service.

Моя проблема заключалась в установке свойства eureka.instance.securePort на ${server.port}. Это свойство должно быть установлено в 443 (значение по умолчанию 443 не применяется, если ничего не установлено). При добавлении этого в мои конфигурации все работает, как ожидалось, после нажатия моего приложения.

person Konrad Grüner    schedule 26.08.2018
comment
Привет @Konrad, я столкнулся с той же проблемой. Не могли бы вы сказать мне, в какой службе вы установили eureka.instance.securePort на 443 ? Служба шлюза или другие микросервисы? - person jackfr0st; 19.08.2019
comment
Привет @ jackfr0st. Загляните в мою историю коммитов. Я установил для всех securePorts значение 443. githifub.com/konraifru главная / домашний монитор-aio / совершить / - person Konrad Grüner; 19.08.2019