Kong Konnectを使用してAmazon EKSにKong Gatewayを構築してみた

Kong Konnectを使用してAmazon EKSにKong Gatewayを構築してみた

Clock Icon2024.10.09

APIの管理を効率化したい えがわ です。
Kong Konnectを使用してEKSにKong Gatewayを構築していきます。

Kongの説明は以下の記事をご確認ください。
https://dev.classmethod.jp/articles/kong-konnect-api-management/

環境

  • Ubuntu 22.04.4 LTS(WSL2)
  • kubectl: v1.31.0
  • eksctl: 0.189.0

やってみる

基本的にKonnectに表示されている通りに進めることで構築可能です。

Kong Gateway作成画面に遷移

KonnectでKong Gatewayを作成していきます。

kong_gateway_eks_konnect_07

PlatformにはKubernetesを選択します。

kong_gateway_eks_konnect_06

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の画面に表示されている証明書情報を以下のファイル名でローカルに保存します。

kong_gateway_eks_konnect_05

  • 公開鍵を 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をローカルに作成し

kong_gateway_eks_konnect_08

デプロイします。

helm install my-kong kong/kong -n kong --values ./values.yaml

Data Plane Node has been FoundとなればKong gatewayの構築が完了となります。

kong_gateway_eks_konnect_01

動作確認

サービスとルートを設定して動作確認を行っていきます。
今回はリクエストパラメータをオウム返ししてくれるサービス「httpbin」を使用します。

サービスを追加

サービスを追加していきます。
Nameにサービス名を設定し、Upstream URLにURLを設定します。

kong_gateway_eks_konnect_02

ルートを作成

ルートを設定していきます。
Nameにルート名を設定し、pathにルートを設定します。

kong_gateway_eks_konnect_03

エンドポイントのURLを確認

Helmチャートをデプロイするとロードバランサーが作成されています。
AWSコンソールからロードバランサーのエンドポイントを確認します。

kong_gateway_eks_konnect_04

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を導入することができます。
この記事どなたかの参考になれば幸いです。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.