如何通过快速网关 HTTPS 为管理员 API 提供服务?

How to serve admin API over express gateways HTTPS?

我尝试设置我的快速网关,以便管理员 API 通过快速网关自己的 HTTPS 作为 apiEndpoint / serviceEndpoint 提供服务。

下面是我的网关-config.yml

我已尽我所能按照 documentation 中的说明进行操作。

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 return 404 "Cannot GET /echo"。 当我使用管理员删除所有内容或仅更改主机时,其他 apiEndpoints 可以正常工作。

我该如何解决这个任务?

经过多次尝试和错误后解决。

对于所有其他为此苦苦挣扎的人:您可以使用重写策略。

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"