Spring Cloud Gateway: отключить маршруты по умолчанию

Я использую весеннее облако для управления своими микросервисами.

По соображениям безопасности для одного конкретного микросервиса (назовите его ms_secure) я хочу использовать настраиваемый маршрут, выбирая конкретную версию микросервиса в зависимости от IP-адреса клиента.

Конфигурация моего шлюза выглядит так:

spring:
  cloud:
    gateway:
      discovery:
        locator:
          enabled: true
      routes:
        - id: ms_secure_v1
          uri: lb://ms_secure_v1
          predicates:
            - Path=/ms_secure/**
          filters:
            - RewritePath=/ms_secure/(?<segment>.*), /$\{segment}
            - name: <my filter>
              args:
                xForwardedForHeaderName: X-Forwarded-For
                hosts:
                  - <IP1>
                  - <IP2>

        - id: ms_secure
          uri: lb://ms_secure_v2
          predicates:
            - Path=/ms_secure/**
          filters:
            - RewritePath=/ms_secure/(?<segment>.*), /$\{segment}
            - name: <my filter>
              args:
                xForwardedForHeaderName: X-Forwarded-For
                hosts:
                  - <IP3>
                  - <IP4>

Когда при запросе / ms_secure:

  • IP1 и IP2 будут перенаправлены на ms_secure_v1
  • IP3 и IP4 будут перенаправлены на ms_secure_v2

Моя проблема в том, что все мои клиенты также смогут напрямую обращаться к ms_secure_v1 или ms_secure_v2, используя маршруты по умолчанию:

http: /// ms_secure_v1 / ...

http: /// ms_secure_v2 / ...

Я попытался отключить эти маршруты с помощью SetStatus GatewayFilter:

        - id: setstatusstring_route
          uri: lb://ms-gateway
          predicates:
            - Path=/ms_secure_v**
          filters:
          - SetStatus=403

Но этот маршрут не совпадает.

Есть ли способ отключить эти маршруты по умолчанию в Spring Gateway?


person jaudo    schedule 14.06.2019    source источник
comment
Почему ваш локатор обнаружения верен?   -  person spencergibb    schedule 14.06.2019
comment
@spencergibb Я думал, что установка для этого свойства значения false решит мою проблему, но, похоже, это ничего не меняет. Каково предназначение этой собственности?   -  person jaudo    schedule 14.06.2019
comment
Для динамического создания маршрутов на основе сервисов, зарегистрированных в обнаружении. В противном случае маршрутов по умолчанию не существует. Итак, глядя на ваши маршруты, предикаты одинаковы Path=/ms_secure/**. Так что он всегда будет соответствовать первому.   -  person spencergibb    schedule 14.06.2019
comment
Он не всегда будет соответствовать первому из-за фильтра, который выберет правильный маршрут в зависимости от IP-адреса источника. Насчет локатора обнаружения я не понимаю, потому что я отключил его, а маршруты по умолчанию все еще совпадают   -  person jaudo    schedule 15.06.2019
comment
Перед запуском фильтров предикаты должны соответствовать.   -  person spencergibb    schedule 15.06.2019
comment
Оба ms_secure_v1 и ms_secure_v2 должны соответствовать ms_secure_v **, но они не   -  person jaudo    schedule 15.06.2019
comment
Для меня это не имеет никакого смысла   -  person spencergibb    schedule 15.06.2019
comment
Во всяком случае, мой вопрос не о фильтрации, эта часть работает. У меня вопрос об отключении маршрутов по умолчанию. Первая часть просто объясняет, почему я хочу отключить маршруты по умолчанию.   -  person jaudo    schedule 15.06.2019
comment
Нет маршрутов по умолчанию, вот что я пытаюсь понять   -  person spencergibb    schedule 16.06.2019
comment
http: // ‹gateway› / ‹имя микросервиса› маршруты к микросервису, не объявив этот маршрут, поэтому я говорю о маршрутах по умолчанию, возможно, я использую не то слово. Я пытаюсь отключить эту маршрутизацию.   -  person jaudo    schedule 17.06.2019
comment
После некоторых тестов ваш первый ответ был правильным: установка для локатора обнаружения шлюза значения false решила проблему. Я использовал обновление привода для проверки изменений, но этого было недостаточно, и мне нужно было остановить и запустить шлюз. Отправьте это как ответ, и я приму.   -  person jaudo    schedule 17.06.2019


Ответы (1)


Следующее создает маршруты в шлюзе на основе зарегистрированных служб:

spring:
  cloud:
    gateway:
      discovery:
        locator:
          enabled: true

Установите значение false (по умолчанию), если вы этого не хотите.

person spencergibb    schedule 18.06.2019