Как обслуживать API администратора через экспресс-шлюзы HTTPS? - PullRequest
0 голосов
/ 05 июня 2019

Я пытаюсь настроить свой экспресс-шлюз таким образом, чтобы API администратора обслуживался через собственные шлюзы экспресс-шлюзов как HTTPS как apiEndpoint / serviceEndpoint.

Ниже мой gateway-config.yml

Я следовал инструкциям, указанным в документации , как мог.

https:
  port: 8443
  tls:
    'default':
      key: /usr/local/share/ca-certificates/ssl.key
      cert: /usr/local/share/ca-certificates/ssl.crt
admin:
  port: 8442
  host: localhost
serviceEndpoints:
  someExampleBackend:
    url: https://some.example.com
  adminBackend:
    url: http://localhost:8442
policies:
  - proxy
pipelines:
  adminAPI:
    apiEndpoints:
      - admin
    policies:
      - proxy:
          - action:
              serviceEndpoint: adminBackend
  domeExampleAPI:
    apiEndpoints:
      - general
      - proxy:
          - action:
              serviceEndpoint: someExampleBackend
apiEndpoints:
  admin:
    host: localhost
  general:
    host: localhost
    methods:
      - GET
      - POST
      - PUT
      - DELETE
      - OPTIONS
    paths:
      - "/echo"

Я ожидал, что смогу использовать API администратора вот так:

https://localhost:8443/api-endpoints

И пример общей конечной точки, подобной этому одновременно:

https://localhost:8443/echo

Когда я это делаю, только API администратора работает как положено. Все остальные apiEndpoints возвращают 404 «Cannot GET / echo». Когда я удаляю все с помощью admin или меняю только хост, другие apiEndpoints работают правильно.

Как мне решить эту задачу?

1 Ответ

0 голосов
/ 05 июня 2019

Решено после еще одной попытки и ошибки.

Для всех остальных, кто борется с этим: Вы можете использовать политику перезаписи.

https:
  port: 8443
  tls:
    'default':
      key: /usr/local/share/ca-certificates/ssl.key
      cert: /usr/local/share/ca-certificates/ssl.crt
admin:
  port: 8442
  host: localhost
serviceEndpoints:
  someExampleBackend:
    url: https://some.example.com
  adminBackend:
    url: http://localhost:8442
policies:
  - proxy
pipelines:
  adminAPI:
    apiEndpoints:
      - admin
    policies:
      - rewrite:
          - condition:
              name: pathmatch
              match: /adminapi/:route*
            action:
              rewrite: /:route
      - proxy:
          - action:
              serviceEndpoint: adminBackend
  domeExampleAPI:
    apiEndpoints:
      - general
      - proxy:
          - action:
              serviceEndpoint: someExampleBackend
apiEndpoints:
  admin:
    host: localhost
    paths: "/adminapi/*"
  general:
    host: localhost
    methods:
      - GET
      - POST
      - PUT
      - DELETE
      - OPTIONS
    paths:
      - "/echo"
...