Kong Konnectを使用してAmazon EKSにKong Gatewayを構築してみた
APIの管理を効率化したい えがわ です。
Kong Konnectを使用してEKSにKong Gatewayを構築していきます。
Kongの説明は以下の記事をご確認ください。
環境
- Ubuntu 22.04.4 LTS(WSL2)
- kubectl: v1.31.0
- eksctl: 0.189.0
やってみる
基本的にKonnectに表示されている通りに進めることで構築可能です。
Kong Gateway作成画面に遷移
KonnectでKong Gateway
を作成していきます。
Platform
にはKubernetes
を選択します。
EKSクラスターを作成
eksctl
でEKSクラスターを作成していきます。
eksctl create cluster --name eks-kong-gateway-demo --region us-east-1
ノードタイプを指定する際は--node-type t3.medium
等で指定可能です。
名前空間を作成
kongの名前空間を作成しておきます。
kubectl create namespace kong
Helmリポジトリを追加
Helmで利用できるKongのチャートリポジトリを追加します。
チャートとは、アプリケーションパッケージを定義したものです。
helm repo add kong https://charts.konghq.com
リポジトリ情報を更新する
Helmリポジトリの情報を最新の状態に更新します。
helm repo update
Konnect用証明書の生成と設定
Konnectを利用するためには、証明書の設定が必要です。
証明書を生成
Konnectの画面に表示されている証明書情報を以下のファイル名でローカルに保存します。
- 公開鍵を tls.crt として保存
- 秘密鍵を tls.key として保存
Kubernetesシークレットを作成
生成した証明書を使用してKubernetesシークレットを作成します。
このシークレットは次の手順で作成するvalues.yaml
ファイル内で参照されます。
kubectl create secret tls kong-cluster-cert -n kong --cert=/{PATH_TO_FILE}/tls.crt --key=/{PATH_TO_FILE}/tls.key
{PATH_TO_FILE}
を置き換えて実行してください。
デプロイ
デプロイ用の設定ファイルを作成します。
設定ファイルにはHelmチャートをデプロイする際に必要なカスタマイズ情報が含まれています。
values.yaml
をローカルに作成し
デプロイします。
helm install my-kong kong/kong -n kong --values ./values.yaml
Data Plane Node has been Found
となればKong gateway
の構築が完了となります。
動作確認
サービスとルートを設定して動作確認を行っていきます。
今回はリクエストパラメータをオウム返ししてくれるサービス「httpbin」を使用します。
サービスを追加
サービスを追加していきます。
Name
にサービス名を設定し、Upstream URL
にURLを設定します。
ルートを作成
ルートを設定していきます。
Name
にルート名を設定し、path
にルートを設定します。
エンドポイントのURLを確認
Helmチャートをデプロイするとロードバランサーが作成されています。
AWSコンソールからロードバランサーのエンドポイントを確認します。
APIを実行
CURLで実行してみます。
ロードバランサーのエンドポイントに対してリクエストを行います。
egawa@HL01559:eks-kong-gateway-demo$ curl -G "http://xxx.us-east-1.elb.amazonaws.
com/echo"
{
"args": {},
"data": "",
"files": {},
"form": {},
"headers": {
"Accept": "*/*",
"Connection": "keep-alive",
"Host": "httpbin.apim.eu",
"User-Agent": "curl/7.81.0",
"X-Forwarded-Host": "httpbin.apim.eu",
"X-Forwarded-Path": "/anything",
"X-Kong-Request-Id": "99120d1dce6fde19041b75365a891446"
},
"json": null,
"method": "GET",
"origin": "192.168.53.123, 10.244.0.1",
"url": "http://httpbin.apim.eu/anything"
}
想定通りのレスポンスを得られました!
ルートを指定しない場合は以下のようにルートが設定されていないエラー返されます。
egawa@HL01559:eks-kong-gateway-demo$ curl -G "http://xxx.us-east-1.elb.amazonaws.com/"
{
"message":"no Route matched with those values",
"request_id":"76366b57ef05a365cdf8071598a76228"
}
さいごに
今回はKonnectを使用してEKSにKong Gatewayを構築してみました。
Konnectを使用することでEKSにも簡単にKong Gatewayを導入することができます。
この記事どなたかの参考になれば幸いです。