Blog
  • AI Gateway
  • AI Security
  • AIOps
  • API Security
  • API Gateway
|
    • API Management
    • API Development
    • API Design
    • Automation
    • Service Mesh
    • Insomnia
    • View All Blogs
  1. Home
  2. Blog
  3. Engineering
  4. Developing a Kong Gateway Plugin With Go
Engineering
April 22, 2021
3 min read

Developing a Kong Gateway Plugin With Go

Mert Simsek

This tutorial shows you how to create a custom Kong Gateway plugin with Go programming language. The sample plugin I created adds an extra layer for security between consumers and producers. The way it works is it identifies consumers through a consumer-key from a query string. Without this parameter, they'll get an error message.

Creating a Consumer Key with Kong Gateway Go Plugin

About Kong Gateway Go Plugins

At Kong Summit 2019, Kong announced that users could develop plugins for Kong Gateway with Go programming language.

To dive deeper into how Kong supports Go programming, visit the Kong Gateway documentation.

Blog Post: Creating Your First Custom Lua Plugin for Kong Gateway >>

How I Built a Kong Gateway Go Plugin

I used declarative configuration (decK) to create my custom Go plugin for Kong Gateway.

In my file, I have services with routes and paths. It will redirect the https://reqres.in/api/users?page=2 URL.

At the same time, I have a custom plugin that will check the API key before the redirect occurs. It will run like a proxy service.

I'll start writing the plugin from my empty Go file called key-checker.go. I'll import the Go PDK file, which allows my Go plugin to access functionality provided by the Kong PDK. To use it, I'll add github.com/kong/go-pdk to the list of packages imported by my plugin.

Next, I'll create a struct for configuration to represent the config parameters in the config.yaml config file.

I need to add a function called "New." Doing this returns an interface.

After that, I'll create a func. In Go programming language, figure out the request and response handlers for the processing lifecycle. I'll make a func called "Access," which gets the requests and responds.

With Func (conf Config) Access(kong *pdk.PDK) type, I'm getting the key parameter from the URL, and I need the parameter in the config file. For example, apiKey := conf.Apikey. If there’s an error, the system will log it.

Docker File: Create a Builder Image and Copy

In the Docker file, I created a builder image and copied my local files into it.

After that, I got the files to build an image into the Kong image.

The Go plugin server's role is to dynamically load the Go plugins and execute their code on demand. Kong handles the go-pluginserver lifecycle. All it needs to know is where to find the go-pluginserver's executable.

In this case, I'll do this by running Docker images using the default path. Therefore, I don’t need an extra parameter. When you build a Kong plugin, you should use the same compiler version, configuration, environment variables, etc., with the Go plugin server. To guarantee consistency, I've built my custom Go plugin server in the same Docker image.

After that, copy the built files into the Kong image.

Run Related Comments on the Terminal

My plugin is ready to run as a container.

After that, I’m going to run the image as a container.

I’m defining some paths, such as plugins directory or configuration files directory. Now we can call our service, and we’ll get a response. It’s running as a container.

I'll call my proxy service. You should see that the proxy service didn’t work because there was an incorrect API key.

I'll try it with the actual API key.

Now you should have reached the correct JSON form of data.

This plugin works like middleware and tries to find the correct key for each request.

What Custom Plugins Will You Build With Go?

Kong Go plugins help enhance your API gateway. In my example, I've just begun to explore how plugins can allow Kong Gateway to gain expanded capabilities. If you'd like a more in-depth look at some of the things you can build, check out the following resources.

  • Kong Gateway documentation
  • Kong Plugin Development Kit – Go edition

Once you've successfully set up Kong Gateway plugins with Go, you may find these other tutorials helpful:

  • How to Use the Kong Gateway JWT Plugin for Service Authentication
  • 4 Steps to Authorizing Services With the Kong Gateway OAuth2 Plugin
  • Getting Started With Kuma Service Mesh

Have questions or want to stay in touch with the Kong community? Join us wherever you hang out:

⭐ Star us on GitHub

🐦 Follow us on Twitter

🌎 Join the Kong Community

🍻 Join our Meetups

❓ ️Ask and answer questions on Kong Nation

💯 Apply to become a Kong Champion

API GatewayAPI DevelopmentKong Gateway

More on this topic

Videos

Kong Builders Nov 16- Introducing Kong Gateway Operator

Videos

Kong Builders - July 22 - Running Kong Gateway on Red Hat OpenShift

See Kong in action

Accelerate deployments, reduce vulnerabilities, and gain real-time visibility. 

Get a Demo
Topics
API GatewayAPI DevelopmentKong Gateway
Share on Social
Mert Simsek

Recommended posts

Using Kong Gateway to Adapt SOAP Services to the JSON World

Kong Logo
EngineeringSeptember 6, 2023

While JSON-based APIs are ubiquitous in the API-centric world of today, many industries adapted internet-based protocols for automated information exchange way before REST and JSON became popular. One attempt to establish a standardized protocol sui

Hans Hübner

How to Set Up Kong Gateway

Kong Logo
EngineeringDecember 2, 2020

Read the latest version: Kong Gateway Tutorial: Up and Running With a GUI in <15 Minutes Archived post below. You've decided to install Kong Gateway. Congrats! You're almost ready to accelerate your microservices journey with the world's most popul

Kevin Chen

Supporting Legacy Web Services (SOAP) With Kong API Gateway

Kong Logo
EngineeringMarch 11, 2020

Let's admit it - web services (SOAP) are here to stay for a few more years, and maybe for a long time in some places where there is no business incentive to rebuild them. However, with a decline in new SOAP web services and most applications moving

Vikas Vijendra

Rewrite Published URLs with Kong API Gateway

Kong Logo
EngineeringFebruary 6, 2020

A common requirement for API gateways is to rewrite the published URL to a different URL for the upstream service’s endpoint. For example, due to legacy reasons, your upstream endpoint may have a base URI like /api/oilers/. However, you want your pub

Peter Kim

Announcing Standard Webhooks

Kong Logo
EngineeringDecember 13, 2023

We're pleased to announce the launch of Standard Webhooks!  Kong has been part of the Technical Committee of this standard with other great companies like Svix (the initiator of the project), Ngrok, Zapier, Twillio, Lob, Mux, and Supabase. This was

Vincent Le Goff

Kong Konnect EKS Marketplace Add-on for Kong Gateway Data Planes

Kong Logo
EngineeringDecember 7, 2023

Today, we’re excited to release the Kong Konnect EKS Marketplace add-on as a means to deploy your Kong Gateway dataplanes in AWS. The add-ons are a step forward in providing fully managed Kubernetes clusters. It is here to simplify the post-procurem

Danny Freese

Gateway API: From Early Years to GA

Kong Logo
EngineeringNovember 7, 2023

In the Kubernetes world, the Ingress API has been the longstanding staple for getting access to your Services from outside your cluster network. Ingress has served us well over the years and can be found present in several dozen different implementa

Shane Utt

Ready to see Kong in action?

Get a personalized walkthrough of Kong's platform tailored to your architecture, use cases, and scale requirements.

Get a Demo
Powering the API world

Increase developer productivity, security, and performance at scale with the unified platform for API management, AI gateways, service mesh, and ingress controller.

Sign up for Kong newsletter

    • Platform
    • Kong Konnect
    • Kong Gateway
    • Kong AI Gateway
    • Kong Insomnia
    • Developer Portal
    • Gateway Manager
    • Cloud Gateway
    • Get a Demo
    • Explore More
    • Open Banking API Solutions
    • API Governance Solutions
    • Istio API Gateway Integration
    • Kubernetes API Management
    • API Gateway: Build vs Buy
    • Kong vs Postman
    • Kong vs MuleSoft
    • Kong vs Apigee
    • Documentation
    • Kong Konnect Docs
    • Kong Gateway Docs
    • Kong Mesh Docs
    • Kong AI Gateway
    • Kong Insomnia Docs
    • Kong Plugin Hub
    • Open Source
    • Kong Gateway
    • Kuma
    • Insomnia
    • Kong Community
    • Company
    • About Kong
    • Customers
    • Careers
    • Press
    • Events
    • Contact
    • Pricing
  • Terms
  • Privacy
  • Trust and Compliance
  • © Kong Inc. 2025