Конг не может найти контейнер с колбой для образца в руководстве - PullRequest
0 голосов
/ 08 мая 2019

Я начал следовать этому руководству по установке docker / KONG , где они создают сеть с именем "kong-net" и запускают контейнеры KONG и postgresql.

Затем я перешел на в этом руководстве по докеру / kong регистрируется контейнер контейнера с пробой в качестве API в KONG. .

Я не видел ничего тревожного при настройке контейнера KONG с помощью службы колбы и связанных маршрутов.

Кажется, что контейнер с флягой образца работает нормально:

curl http://localhost:5055/api/v1/test1
curl http://localhost:5055/api/v1/test2

Я получаю ожидаемый результат:

{"message":"first end point test1 is called","status_code":200}

Результаты этих команд выглядят хорошо: curl -i -XPOST --url http://localhost:8001/services/ --data 'name = testApi' --data 'url = http://localhost:5055' curl http://localhost:8001/routes |json_pp

Все прекрасно, пока я не получу эту команду для проверки KONG:

curl -i -X GET --url http://localhost:8000/api/v1/test1 --header 'Host: localhost'

Я думаю, что KONG должен переслать это в контейнер с колбой для образца.

Вместо этого явижу эту ошибку:

HTTP/1.1 502 Bad Gateway
Date: Wed, 08 May 2019 18:20:00 GMT
Content-Type: text/plain; charset=UTF-8
Transfer-Encoding: chunked
Connection: keep-alive
Server: kong/1.1.2
X-Kong-Upstream-Latency: 1
X-Kong-Proxy-Latency: 35
Via: kong/1.1.2

An invalid response was received from the upstream server

В журналах для контейнера KONG я вижу это:

2019/05/08 16:56:57 [error] 38#0: *167134 connect() failed (111: 
Connection refused) while connecting to upstream, client: 
172.19.0.1, server: kong, request: "GET /api/v1/test1 HTTP/1.1", 
upstream: "http://127.0.0.1:5055/api/v1/test1", host: "localhost"
172.19.0.1 - - [08/May/2019:16:56:57 +0000] "GET /api/v1/test1 
HTTP/1.1" 502 69 "-" "curl/7.59.0"

Похоже, KONG не может видеть localhost: 5055.

IЯ беспокоюсь о той сети, которую я создал в первом учебном пособии.

Я попытался остановить, перестроить и повторно запустить контейнер с колбой с помощью этой команды (поэтому колба также была частью сети):

docker run -d --name flask  --network=kong-net -p 5055:5055  flask:test

Увы, это не помогло.Та же ошибка!

Когда я набираю

docker network inspect kong-net

, я вижу, что контейнер с колбой является частью kong-net.Это необходимо?

Я попробовал эту команду, и она сработала:

docker exec -ti kong sh -c "curl http://172.19.0.4:5055/api/v1/test1 "
{"message":"first end point test1 is called","status_code":200}

Я делаю все это с Windows10 / cygwin-bash / docker18.09.2 с включенным docker / kubernetes.

Вопросы:

  1. Нужно ли приложению пробного колбы входить в сеть kong-net?
  2. Учебник, кажется, говорит, что конг должен видеть 127.0.0.1:5055.Это правильно?Учебное пособие неверно?
  3. Как заставить эту команду работать?

    curl -i -X ​​GET --url http://localhost:8000/api/v1/test1 --header 'Хост: localhost

Ответы [ 2 ]

0 голосов
/ 10 мая 2019

Когда Kong установлен в качестве док-контейнера, «localhost» означает адрес обратной связи контейнера Kong, а НЕ хоста. Конечные точки, зарегистрированные в Конге, должны разрешаться из контейнера Конга.

Таким образом, вы можете изменить свою регистрацию, чтобы использовать фактический IP-адрес и порт бэкэнд-сервиса как достижимый для контейнера Kong, поэтому, если ваш бэкэнд также является док-контейнером, а его порт 5055 сопоставлен с портом 15055 на хосте, то при регистрации в Конге следует использовать IP-адрес хоста и порт 15055.

0 голосов
/ 08 мая 2019

Вам необходимо зарегистрировать маршруты:

curl -i -X POST \
 --url http://localhost:8001/services/testApi/routes \
 --data 'hosts[]=localhost' \
 --data 'paths[]=/api/v1/test1' \
 --data 'strip_path=false' \
 --data 'methods[]=GET'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...