0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Kong GatewayをProxy経由で利用する

Last updated at Posted at 2024-08-22

Kong Gatewayを使う際、ネットワークの制約などでGatewayとエンドポイントのサービスを直接繋ぐ事ができないことがあると思う。
こういったネットワークの制約を解消するには一般的にはProxyを挟むことで解決するが、Kong Gatewayの場合でもEnterprise Editionを利用している場合はProxyを利用する事が出来る。
ここではForward Proxy Advancedプラグインを使って、Proxy経由でのアクセス方法を確認してみる。

今回検証する構成は以下のようにする。
20240822114258.png

Kong Gatewayを自PCに立てて、そこからEC2上に立てたProxy経由で奥にいるnginxにアクセスする。

準備

Kong Gatewayの用意

今回はEnterprise Editionで検証するため、最初にライセンスファイルを環境変数に格納する。

export KONG_LICENSE_DATA=$(cat license.json)

Kong Gatewayで利用するネットワークを作成する。

docker network create kong-net

Kong Gatewayで利用するDB(Postgres)を立てる。

docker run -d --name kong-database \
  --network=kong-net \
  -p 5432:5432 \
  -e "POSTGRES_USER=kong" \
  -e "POSTGRES_DB=kong" \
  -e "POSTGRES_PASSWORD=kongpass" \
  postgres:13

DBを初期化する。

docker run --rm --network=kong-net \
 -e "KONG_DATABASE=postgres" \
 -e "KONG_PG_HOST=kong-database" \
 -e "KONG_PG_PASSWORD=kongpass" \
 -e "KONG_PASSWORD=test" \
kong/kong-gateway:3.7.1.2 kong migrations bootstrap

Kong Gatewayを起動する。

docker run -d --name kong-gateway \
 --network=kong-net \
 -e "KONG_DATABASE=postgres" -e "KONG_PG_HOST=kong-database" \
 -e "KONG_PG_USER=kong" -e "KONG_PG_PASSWORD=kongpass" \
 -e "KONG_ADMIN_LISTEN=0.0.0.0:8001" \
 -e "KONG_ADMIN_GUI_URL=http://localhost:8002" \
 -e KONG_LICENSE_DATA \
 -p 8000:8000 \
 -p 8001:8001 \
 -p 8002:8002 \
 kong/kong-gateway:3.7.1.2

Proxyの用意

squidのコンテナを使ってサクッと立てる。
squidを起動するEC2のインスタンスにログインし、設定ファイルを作成する。

cat <<EOF > ./squid.conf
http_port 3128
http_access allow all
EOF

squidを起動する。

docker run -d --name squid \
  -v ./squid.conf:/etc/squid/squid.conf \
  -e TZ="Asia/Tokyo" -p 3128:3128 \
  ubuntu/squid

nginxの用意

こちらもコンテナでサクッと作成する。
nginxを起動するEC2のインスタンスにログインし、nginxを起動する。

docker run -d --name nginx -p 80:80 nginx

起動後、ローカルPCからProxy経由で接続できることを確認する。

NGINX_HOST=http://172.31.78.82
PROXY_HOST=xx.xx.xx.xx:3128
curl -k $NGINX_HOST -x $PROXY_HOST

問題なければnginxのHTMLが取得できる。

<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
:(省略)

検証

検証を行うにあたり、ServiceとRouteを作成する。
最初にServiceを作成する。宛先は先ほど作成したnginxを指定する。

curl -X POST http://localhost:8001/services/ \
  --data name=nginx-service \
  --data url=$NGINX_HOST

次にRouteを作成する。

curl -X POST http://localhost:8001/services/nginx-service/routes \
  --data name=nginx-route \
  --data 'paths[]=/nginx'

このタイミングではRouteに対してcurlを実行しても、nginxにアクセス出来ないためコマンドが帰ってこない。

$ curl localhost:8000/nginx

次にRouteに対してForward Proxy Advanced Pluginの設定を行う。
ここではKong Managerから設定する。
RouteからNew Pluginを選択し、Forward Proxyを選択する。
20240822140946.png
次に設定画面でProxyの設定を行う。
ここではHttp Proxy HostHttp Proxy Portのみ設定した。
20240822141158.png
HTTPSを使う場合はHttps部分の設定も併せて行う。
また、View Advanced Parametersの方にユーザ名とパスワードを入力するボックスも用意されているので、認証が必要な場合はそちらも併せて設定する。

設定後、Routeに対してアクセスしてみる。

$  curl localhost:8000/nginx
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
:(省略)

無事取得する事ができた。
以上より、アクセスにProxyが要求される環境でも、このプラグインを使えば簡単にKong Gatewayを利用できることが確認できた。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?