Использование x-google-endpoints Расширение OpenAPI с несколькими версиями API в облачных конечных точках - PullRequest
0 голосов
/ 21 октября 2019

Я пытаюсь развернуть две версии API на конечных точках Google Cloud, но в процессе развертывания сталкиваюсь с проблемами конфигурации.

Определение API api-1.yaml выглядит следующим образом:

swagger: "2.0"
info:
  description: "API"
  title: "API"
  version: "1.0.0"
host: "api.endpoints.GCP_PROJECT.cloud.goog"
basePath: "/v1"
x-google-api-name: v1
x-google-endpoints:
- name: "api.endpoints.GCP_PROJECT.cloud.goog"
  target: "IP_ADDRESS"
...

Это работает очень хорошо, если развернуто в одиночку. Однако, если добавлено api-2.yaml:

swagger: "2.0"
info:
  description: "API"
  title: "API"
  version: "2.0.0"
host: "api.endpoints.GCP_PROJECT.cloud.goog"
basePath: "/v2"
x-google-api-name: v2
x-google-endpoints:
- name: "api.endpoints.GCP_PROJECT.cloud.goog"
  target: "IP_ADDRESS"
...

Это приводит к ошибке развертывания: OpenAPI spec is invalid. Multiple endpoint entries are defined in the extension \'x-google-endpoints\'. At most one entry is allowed.

Удаление расширения x-google-endpoints из одного файла yaml работает, но оставляет другой yaml файл является неполным и, следовательно, не оптимальным решением.

Может ли возникнуть проблема с объединением / проверкой файлов yaml во время развертывания? Можно ли использовать расширение x-google-endpoints для определения домена .cloud.goog для версий API?

Ответы [ 2 ]

0 голосов
/ 24 октября 2019

Вы используете два прокси ESP как: v1_esp -> v1, v2_esp -> v2. Каждый прокси имеет свой IP-адрес, и вы пытаетесь привязать доменное имя к двум IP-адресам. Это не поддерживается

Я предлагаю использовать один ESP в качестве esp -> v1 + v2 с помощью x-google-backend. 1) В openApi.yaml

paths: / v1 / path1: ... x-google-backend: address: v1_host # сделать выше для всех ваших путей / методов

/ v2:... x-google-backend: address: v2_host # сделать выше для всех ваших путей / методов

x-google-endpoints: - name: "api.endpoints.GCP_PROJECT.cloud.goog" target: "IP_ADDRESS "

2) добавить --enable_backend_routing и --rewrite для удаления префикса / v1 и / v2 перед отправкой запроса в ваши бэкэнды.

Мы не тестировали такое развертывание, но вы можетепопробуй.

0 голосов
/ 22 октября 2019

Есть два способа сделать это:

1) версия находится в доменном имени, например v1-api.endpoints.GCP_PROJECT.cloud.goog. Вы определяете и развертываете две службы;один для v1 и другой для v2. У каждого есть свой IP-адрес, собственное имя сервиса и собственный бэкэнд. Это наиболее простой способ и легкий подход.

2) версия находится в пути, например, api.endpoints.GCP_PROJECT.cloud.goog/v1. Вы можете определить и развернуть только один сервис. Но у вас есть два бэкэнда. Это хитрый. Вы можете использовать расширение x-google-backend в спецификации OpenApi и развернуть одну службу Cloud Endpoint.

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