Kong (0.10) настройка и использование API

Я новичок в Конге и пытаюсь запачкать руки с Конгом. У меня есть среда, в которой kong (0.10) и Cassandra (последняя версия) работают в отдельных контейнерах докеров. Моя ОС - macOS -Sierra 10.12.4.

Кассандра в докере:

docker run -d --name kong-database -p 9042:9042 cassandra:latest

Конг в докере:

 docker run -d --name kong \
   --link kong-database:kong-database \
   -e "KONG_DATABASE=cassandra" \
   -e "KONG_CASSANDRA_CONTACT_POINTS=kong-database" \
   -e "KONG_PG_HOST=kong-database" \
   -p 8000:8000 \
   -p 8443:8443 \
   -p 8001:8001 \
   -p 7946:7946 \
   -p 7946:7946/udp \
   kong

Согласно документации Kong, я добавил свой первый API (для получения IP) через Kong Admin API.

curl -i -X POST \
  --url http://localhost:8001/apis/ \
  --data 'name=example-api' \
  --data 'hosts=example.com' \
  --data 'upstream_url=http://httpbin.org/ip'
HTTP/1.1 201 Created
Date: Wed, 19 Apr 2017 23:39:13 GMT
Content-Type: application/json; charset=utf-8
Transfer-Encoding: chunked
Connection: keep-alive
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: false
Server: kong/0.10.1

{"http_if_terminated":true,"id":"9bab7ba9-f1f2-4b4d-aa9d-9966da17f94b","retries":5,"preserve_host":false,"created_at":1492645153409,"upstream_connect_timeout":60000,"upstream_url":"http:\/\/httpbin.org\/ip","upstream_send_timeout":60000,"https_only":false,"upstream_read_timeout":60000,"strip_uri":true,"name":"example-api","hosts":["example.com"]}

Когда я выполняю следующую команду для проверки,

curl -i -X GET --url http://localhost:8000/ --header 'Host: example.com'

Я понял

    HTTP/1.1 404 NOT FOUND
Date: Wed, 19 Apr 2017 23:40:48 GMT
Content-Type: text/html; charset=UTF-8
Content-Length: 233
Connection: keep-alive
Server: gunicorn/19.7.1
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true
Via: kong/0.10.1
X-Kong-Upstream-Latency: 590
X-Kong-Proxy-Latency: 93

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<title>404 Not Found</title>
<h1>Not Found</h1>
<p>The requested URL was not found on the server.  If you entered the URL manually please check your spelling and try again.</p>

Однако когда я напрямую curl http://httpbin.org/ip, я получаю свой IP.

Как настроить Kong для получения того же результата?


person bluelabel    schedule 19.04.2017    source источник


Ответы (2)


Попробуйте изменить upstream_url на http://httpbin.org, а затем следующий запрос curl:

curl -i -X GET --url http://localhost:8000/ip --header 'Host: example.com'

Я получил такое же сообщение сегодня и обнаружил, что это не работает, когда у вас есть косая черта в конце. Возможно, есть что-то, что вызывает это, когда вы добавляете API с этим upstream_url.

Изменить: с вашей конфигурацией, возможно, запрос должен выглядеть так:

curl -i -X GET --url http://localhost:8000 --header 'Host: example.com'

Обратите внимание на удаленную косую черту в конце URL-адреса. Возможно, это вызывает эту ошибку, и вы можете исправить ее, не редактируя конфигурацию API :)

person Matthias Seifert    schedule 21.04.2017

ваш добавленный вами api имеет имя (example-api), которое вы не указали в тестовом URL-адресе

так должно получиться примерно так:

curl -i -X ​​GET --url http://localhost:8000/example-api - заголовок Host: example.com

person Ovi    schedule 29.04.2017
comment
Я не помню о необходимости явно указывать имя API в URL-адресе запроса. - person Matthias Seifert; 17.05.2017
comment
Маттиас С., а как прокси-сервер kong знает, на какой API перенаправить ваш вызов? :) - person Ovi; 18.05.2017
comment
Я думал, что заголовок хоста предназначен для этой цели. Или в v10.x были какие-то критические изменения? Я могу отправлять запросы через Kong, не указывая точный api в URL-адресе запроса. Ну хоть с 0.9.х. Также в Кратком руководстве это поведение не упоминается. - person Matthias Seifert; 18.05.2017
comment
ах да, вы также можете использовать заголовок хоста - person Ovi; 21.05.2017
comment
Ну, и я не знал, что могу указать api в URL-адресе запроса, теперь мы оба кое-что узнали :-D - person Matthias Seifert; 22.05.2017