Выставить шлюз Kong API в личном домене / URL

Я настроил шлюз Kong API, следуя документации, здесь. С помощью приведенной ниже команды curl я могу подтвердить, что Kong активирован и отвечает через localhost.

curl -i http://localhost:8001/services
    
    HTTP/1.1 200 OK
    Date: Thu, 13 May 2021 15:39:32 GMT
    Content-Type: application/json; charset=utf-8
    Connection: keep-alive
    Access-Control-Allow-Origin: http://localhost:8002
    X-Kong-Admin-Request-ID: xeUkwshQPRXA5T9bPQmxsmPcspJCGU2L
    vary: Origin
    Access-Control-Allow-Credentials: true
    Content-Length: 23
    X-Kong-Admin-Latency: 5
    Server: kong/2.3.3.2-enterprise-edition

Мой вопрос для производства: как настроить Kong для ответа на DNS / URL?

Я настроил DNS-запись на AWS Route 53, чтобы направлять трафик на IP-адрес этого сервера, на котором развернут Kong. С автономным приложением - приложением Node / Express для exmaple, я бы настроил обратный прокси, то есть NGINX, для маршрутизации запросов, полученных на сервер, с URL-адреса и далее в приложение. Однако, поскольку Kong является шлюзом API, это не подходит.

Обобщить;

  • Я хочу сделать запрос API от клиента к шлюзу по адресу: http://my-gateway-url.com/service-name/route
  • Этот запрос должен обрабатываться Kong и обрабатываться настроенной службой. Как мне настроить Kong для прослушивания на http://my-gateway-url.com?

person Kuyashii    schedule 13.05.2021    source источник
comment
Kong прослушивает порт, затем kong может маршрутизировать в зависимости от домена. Что вы называете прослушиванием на хосте?   -  person Ôrel    schedule 13.05.2021
comment
Я не уверен, что понимаю. Скажем, у меня есть служба, стоящая за Kong, например / serviceA / pathA - как бы мне это вызвать от внешнего клиента?   -  person Kuyashii    schedule 13.05.2021
comment
upstream service в конгской терминологии docs.konghq.com/gateway-oss/2.4 .x / proxy / # терминология   -  person Ôrel    schedule 13.05.2021


Ответы (1)


Если вы хотите выполнять маршрутизацию на основе хоста, это классическая функция.

Сначала создайте службу (ваше приложение узла):

service create

Затем создайте маршрут:

создать маршрут

сведения о маршруте

Затем вы можете проверить соответствие маршрута

curl -i --header 'kong-debug: 1' http://my-gateway-url.com:8000

HTTP/1.1 502 Bad Gateway
Date: Fri, 14 May 2021 08:11:54 GMT
Content-Type: text/plain; charset=utf-8
Connection: keep-alive
Kong-Route-Id: 9f5584d7-4ac5-4720-a90c-f809c47faf8d
Kong-Route-Name: my_gw
Kong-Service-Id: 77443f69-80f4-49ea-b910-77eebdeb9385
Kong-Service-Name: node_app
Server: kong/2.0.3
Content-Length: 58

по сравнению с

curl -i --header 'kong-debug: 1' 0.0.0.0:8000
HTTP/1.1 404 Not Found
Date: Thu, 13 May 2021 20:11:23 GMT
Content-Type: application/json; charset=utf-8
Connection: keep-alive
Content-Length: 48

{"message":"no Route matched with those values"}

Еще нужно проверить, какой порт вы не можете открыть, 80 или 8000, и убедитесь, что маршрут открыт на вашем уровне безопасности (например, группа безопасности на AWS).

person Ôrel    schedule 13.05.2021
comment
Ваш подход устанавливает заголовки хоста и т. Д. В соответствии с этой сутью можно добавить DNS, чтобы клиенту нужно было только curl my-gateway-url.com для проксирования запроса через приложение узла, чего я пытаюсь достичь: gist.github.com/montanaflynn/a3a9336384d42188a45e - person Kuyashii; 13.05.2021
comment
См. Последний комментарий на странице, указанной выше - person Kuyashii; 13.05.2021
comment
Кроме того, в вашем примере вы вызываете шлюз API на localhost 0.0.0.0:8000 - я просто хочу знать, как вызвать шлюз API с внешнего клиента на localhost - person Kuyashii; 14.05.2021
comment
Я не устанавливал DNS и развернул локально, чтобы сделать снимок экрана. Цель - показать маршрутизацию по имени хоста. Обновлен с записью в DNS - person Ôrel; 14.05.2021
comment
Я ценю вашу помощь в этом вопросе, но позвольте мне пояснить это на примере. Клиент должен иметь возможность отправить запрос GET на my-gateway-url.com/serviceA/route и настроить прокси-сервер Kong для этого запроса на соответствующий восходящий serviceA / route, то есть на внутреннюю микросервису. У меня есть настройка записи DNS A, указывающая my-gateway-url.com → сервер моего сервера Kong. Как разрешить запросы к my-gateway-url.com через шлюз kong, работающий на localhost: 8000? - person Kuyashii; 14.05.2021
comment
Не уверен, в чем заключается ваша проблема, если разрешение DNS работает, в этой части нечего менять, ваша проблема связана с портом 8000? Просто настройте kong на прослушивание порта 80, а не порта 8000. docs. konghq.com/gateway-oss/2.4.x/configuration/#proxy_listen - person Ôrel; 14.05.2021
comment
DNS не работает, следующая команда просто зависает и не отвечает: (не работает) curl -i my- gateway-url.com:8000 Но, если я вызываю его с localhost, как вы описали ранее, он работает нормально, и я получаю ответ от восходящего потока: (работает) curl -i GET -H Host: my-gateway -url.com --header 'kong-debug: 1' 0.0.0.0:8000 Моя проблема заключается в том, как настроить, чтобы восходящий поток отвечал только на этот вызов: curl -i my-gateway-url.com:8000 - person Kuyashii; 14.05.2021
comment
Что вы получаете с nslookup my-gateway-url.com? Можешь попробовать с ip хоста curl -i GET -H "Host: my-gateway-url.com" --header 'kong-debug: 1' X.X.X.X:8000? Вы уверены, что ваш хост может получать запросы извне? - person Ôrel; 15.05.2021