2017-04-19 2 views
0

Ich bin neu in Kong und versuche mit Kong meine Hände schmutzig zu machen. Ich habe eine Umgebung, in der kong (0.10) und Cassandra (neueste) auf separaten Docker-Containern ausgeführt werden. Mein Betriebssystem ist macOS -Sierra 10.12.4.Kong (0.10) API-Setup und Verwendung

Cassandra in Docker:

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

Kong in Docker:

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 

Gemäß der Kong documentation, habe ich meine erste API (um die IP zu erhalten) über 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"]} 

Wenn ich den folgenden Befehl ausführen, um es zu testen,

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

ich das bekommen,

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> 

Allerdings, wenn ich direkt curl http://httpbin.org/ip, erhalte ich meine IP.

Wie konfiguriere ich Kong, um das gleiche Ergebnis zu erhalten?

Antwort

0

Versuchen Sie, die upstream_url zu http://httpbin.org und dann der folgenden curl Anfrage zu ändern:

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

Ich habe die gleiche Botschaft heute und fand heraus, dass es nicht funktioniert, wenn Sie einen Schrägstrich am Ende haben. Vielleicht gibt es etwas, das dies erzeugt, wenn Sie die API mit dieser upstream_url hinzufügen.

Edit: Mit der Config, vielleicht sollte die Anfrage wie folgt aussehen:

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

Bitte entfernt Strich am Ende der URL beachten. Vielleicht führt dies zu diesen Fehler und Sie können das Problem beheben, ohne dass Sie Ihre API Config :)

0

Ihre api Sie einen Namen hinzugefügt bearbeiten hat (Beispiel-api), die Sie nicht in den Test-URL angegeben haben

so es sollte wie folgt sein:

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

+0

ich erinnere mich nicht die Notwendigkeit, den API-Namen explizit in der Anforderungs-URL angeben –

+0

Matthias S, also wie weiß der kong-proxy zu welcher API um deinen anruf umzuleiten? :) –

+0

Ich dachte, der Host-Header ist für diesen Zweck gedacht. Oder gab es in v10.x einige Änderungen? Ich kann Anfragen über Kong senden, ohne die genaue API in der Anfrage-URL anzugeben. Nun, zumindest mit 0.9.x. Auch die Quick Start Guide verweist nicht auf dieses Verhalten –

Verwandte Themen