2
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?

kongctlの基本的な使い方

2
Last updated at Posted at 2026-11-05

この記事について

本記事は、kongctlについて解説するものです。kongctlは、Kong Konnectを操作・管理できるコマンドラインツールです。

本記事では以下のことを説明します。

  • Kong Konnectについて
  • kongctlについて
  • kongctlの設定方法について
  • 具体的なコード例と使い方について

想定読者は以下のような人です

  • Kong Konnectを使用している人
  • Kong Konnect、Kong Gatewayについてある程度の知識がある人

今回作成したコードは、以下のリポジトリで公開しています。

Kong Konnectについて

Kong Konnectは、API、LLM、イベント、マイクロサービスを一元的に管理できる統合APIプラットフォームです。
本記事ではAPI GatewayのControl Plane(以下、CP)にしか触れませんが、他の要素については公式ドキュメントをご参照ください。

今回の環境

  • decK 1.69.0
  • kongctl 1.21.0
  • Kong Konnect
  • Ubuntu 24.04.5(WSL)

kongctlについて

kongctl is a command line tool that enables you to manage Konnect resources programmatically.

kongctlは、Konnect上のリソースをプログラムで管理できるようにする、ステートレスのコマンドラインツールです。

kongctlはKonnect上のリソースを管理し、その中でdecKを呼び出すことで、GatewayのEntityを操作することができます。2つのツールを連携させて使うことで、統括的な管理が可能になります。
kongctl and decK

どのような場面でkongctlを使うと便利なのか

複数のCPをKonnect上で管理する場合に、共通設定と個別設定を管理・適用させたい場合に有用です。

共通の設定をcommon.ymlに切り出し、個別の設定はcp1.yml cp2.ymlなどとして分割しておくことが可能です。

kongctlの設定方法について

公式ドキュメントを参照し、インストールを行います。今回はmiseを使用してインストールを行いました。

mise use -g github:Kong/kongctl@latest

インストールが完了したら、kongctl loginで認証を行います。
私の経験則にはなりますが、もしすでにKonnectのタブを開いている場合は、閉じてから認証を進めることをおすすめします。

kongctlがdecKを呼ぶため、decKも同様にインストールし、PATHで呼べるように設定する必要があります。

実行モードについて

apply,sync,deleteの3種類の実行モードがあります。

  • apply⇒リソースの作成・更新のみ行い、削除をしない
  • sync⇒作成・更新・削除を行い、設定ファイルの状態に完全同期する
  • delete⇒入力設定ファイルに定義されたリソースをすべて削除する

今回はsyncのみを使っています。syncを使用する場合は意図しないdeleteが発生しないようにdiffで実行前の確認をすることをおすすめします。

具体的なコード例と使い方について

今回は一例として、Konnect上にCPを2つ作成し、それぞれに共通のPlugin(key-auth)と別個のService、Pluginを設定します。

今回使用するディレクトリ構造は以下となります。

.
├ gateway/            # CP内設定
│ └ common.yml       # 共通設定
│ └ cp1.yml          # CP1用設定
│ └ cp2.yml          # CP2用設定
├ platform_cp1.yml    # CP1作成用
└ platform_cp2.yml    # CP2作成用

platform_cp1.yml、platform_cp2.ymlでKonnect上にCPを作成した後、その中の設定をdecKで流し込むことになります。
common.ymlには、共通で反映させるGlobalのkey-authの記述を行います。
そのほかのGateway ServiceやPluginは、それぞれcp1.yml、cp2.ymlで設定します。

platform_cp1.yml

platform_cp1.yml
_defaults:
  kongctl:
    namespace: default

control_planes:
  - ref: cp1 
    name: "fuka-test-cp1"            # Konnect上に表示される名前
    _deck:
      files:
        - "gateway/common.yml"      # 共通設定
        - "gateway/cp1.yml"         # CP1 固有設定

platform_cp2.yml

platform_cp2.yml
_defaults:
  kongctl:
    namespace: fuka-test

control_planes:
  - ref: cp2
    name: "fuka-test-cp2"          # Konnect上に表示される名前
    kongctl:
      namespace: fuka-test
    _deck:
      files:
        - "gateway/common.yml"    # 共通設定(同じファイルを参照)
        - "gateway/cp2.yml"       # CP2 固有設定


common.yml

common.yml
_format_version: "3.0"
_info:
  select_tags:
    - platform-team

plugins:
  - name: key-auth
    tags:
      - platform-team

cp1.yml

cp1.yml
_format_version: "3.0"
_info:
  select_tags:
    - platform-team

services:
  - name: test-service1
    url: https://backend.internal-1
    tags:
      - platform-team
    routes:
      - name: test-route1
        paths:
          - /route1
        tags:
          - platform-team

plugins:
  - name: rate-limiting-advanced
    service: test-service1
    config:
      limit:
        - 500
      window_size:
        - 3600
      window_type: sliding
      disable_penalty: false
      namespace: platform-team
      strategy: local
    tags:
      - platform-team

cp2.yml

cp2.yml
_format_version: "3.0"
_info:
  select_tags:
    - platform-team

services:
  - name: test-service2
    url: https://backend.internal-2
    tags:
      - platform-team
    routes:
      - name: test-route2
        paths:
          - /route2
        tags:
          - platform-team
  
  - name: test-service3
    url: https://backend.internal-3
    tags:
      - platform-team
    routes:
      - name: test-route3
        paths:
          - /route3
        tags:
          - platform-team

plugins:
  - name: service-protection
    service: test-service2
    config:
      window_size:
        - 60
      limit:
        - 10
      namespace: platform-team
    tags: 
      - platform-team

設定反映の方法

今回はCPごとにplatform.ymlを分けて作成したため、2回設定反映を行います。

kongctlはplanで実行用のjsonファイルを作成し、それをもとに実行します。planを作成するときの--modeと、反映の時のモードは一致している必要があります。applyで作成したplanは、applyでしか実行できません。

CP1を反映

この時に参照されるファイルは、platform_cp1.yml、common.yml、cp1.ymlの3つです。

kongctl plan --mode sync -f platform_cp1.yml --output-file plan_cp1.json # json作成
kongctl diff --plan plan_cp1.json  # 差分確認
kongctl sync --plan plan_cp1.json  # 反映

CP2を反映

この時に参照されるファイルは、platform_cp2.yml、common.yml、cp2.ymlの3つです。

kongctl plan --mode sync -f platform_cp2.yml --output-file plan_cp2.json # json作成
kongctl diff --plan plan_cp2.json  # 差分確認
kongctl sync --plan plan_cp2.json  # 反映

結果確認

Konnect上にアクセスし、以下のことを確認できます。

  • CPが2つできていること
    CP2台.png

  • 両方のCPに同じ設定でkey-authが適用されていること

  • CP1の中にはGateway Serviceが1つ、ServiceにRate limiting Advancedが設定されていること
    cp1-service.png
    cp1-plugin.png

  • CP2の中にはGateway Serviceが2つ、Serviceには片方にだけService Protectionが設定されていること
    cp2-service.png
    cp2-plugin.png
    cp2-service2.png
    cp2-service3.png

今後の進展について

今回は記事の長さの都合上取り入れませんでしたが、namespaceやtagでkongctlとdecKが管理できる範囲を制限することが可能になります。次の記事ではこのあたりについてさらに詳しく書くことができればと考えています。

最後に・所感

便利なツールには学習コストがつきものではありますが、このツールはdecKやほかのIaCツールを使ったことがあれば思っているより簡単に習得することが出来そうです。

参考情報

2
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
2
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?