Pass Lua code as files and run in multiple phase
You can run the Pre-Function plugin in multiple phases.
For example, if you want to run code in the access
and header_filter
phases, configure both parameters,
pointing each parameter to your Lua code files or including the code directly. This example uses file syntax.
Using decK environment variables with Lua files
To pass the contents of a file to decK, pass it to an environment variable:
- Create your Lua script and save it in a file, for example,
access-function.lua
.- Load the content of the Lua script into an environment variable using the following command:
export DECK_ACCESS_FUNCTION=$(cat access-function.lua)
If you’re using the API, you can also pass each Lua file as a form parameter and a filename, for example:
--form "config.access=@access-function.lua" \
Environment variables
-
ACCESS_FUNCTION
: Lua code to run in the access phase. -
HEADER_FILTER_FUNCTION
: Lua code to run in the header filter phase.
Add this section to your declarative configuration file:
_format_version: "3.0"
plugins:
- name: pre-function
config:
access:
- ${{ env "DECK_ACCESS_FUNCTION" }}
header_filter:
- ${{ env "DECK_HEADER_FILTER_FUNCTION" }}
Make the following request:
curl -i -X POST http://localhost:8001/plugins/ \
--header "Accept: application/json" \
--header "Content-Type: application/json" \
--data '
{
"name": "pre-function",
"config": {
"access": [
"'$ACCESS_FUNCTION'"
],
"header_filter": [
"'$HEADER_FILTER_FUNCTION'"
]
}
}
'
Make the following request:
curl -X POST https://{region}.api.konghq.com/v2/control-planes/{controlPlaneId}/core-entities/plugins/ \
--header "accept: application/json" \
--header "Content-Type: application/json" \
--header "Authorization: Bearer $KONNECT_TOKEN" \
--data '
{
"name": "pre-function",
"config": {
"access": [
"'$ACCESS_FUNCTION'"
],
"header_filter": [
"'$HEADER_FILTER_FUNCTION'"
]
}
}
'
Make sure to replace the following placeholders with your own values:
-
region
: Geographic region where your Kong Konnect is hosted and operates. -
controlPlaneId
: Theid
of the control plane. -
KONNECT_TOKEN
: Your Personal Access Token (PAT) associated with your Konnect account.
See the Konnect API reference to learn about region-specific URLs and personal access tokens.
echo "
apiVersion: configuration.konghq.com/v1
kind: KongClusterPlugin
metadata:
name: pre-function
namespace: kong
annotations:
kubernetes.io/ingress.class: kong
labels:
global: 'true'
config:
access:
- '$ACCESS_FUNCTION'
header_filter:
- '$HEADER_FILTER_FUNCTION'
plugin: pre-function
" | kubectl apply -f -
Prerequisite: Configure your Personal Access Token
terraform {
required_providers {
konnect = {
source = "kong/konnect"
}
}
}
provider "konnect" {
personal_access_token = "$KONNECT_TOKEN"
server_url = "https://us.api.konghq.com/"
}
Add the following to your Terraform configuration to create a Konnect Gateway Plugin:
resource "konnect_gateway_plugin_pre_function" "my_pre_function" {
enabled = true
config = {
access = [var.access_function]
header_filter = [var.header_filter_function]
}
control_plane_id = konnect_gateway_control_plane.my_konnect_cp.id
}
This example requires the following variables to be added to your manifest. You can specify values at runtime by setting TF_VAR_name=value
.
variable "header_filter_function" {
type = string
}
Add this section to your declarative configuration file:
_format_version: "3.0"
plugins:
- name: pre-function
service: serviceName|Id
config:
access:
- ${{ env "DECK_ACCESS_FUNCTION" }}
header_filter:
- ${{ env "DECK_HEADER_FILTER_FUNCTION" }}
Make sure to replace the following placeholders with your own values:
-
serviceName|Id
: Theid
orname
of the service the plugin configuration will target.
Make the following request:
curl -i -X POST http://localhost:8001/services/{serviceName|Id}/plugins/ \
--header "Accept: application/json" \
--header "Content-Type: application/json" \
--data '
{
"name": "pre-function",
"config": {
"access": [
"'$ACCESS_FUNCTION'"
],
"header_filter": [
"'$HEADER_FILTER_FUNCTION'"
]
}
}
'
Make sure to replace the following placeholders with your own values:
-
serviceName|Id
: Theid
orname
of the service the plugin configuration will target.
Make the following request:
curl -X POST https://{region}.api.konghq.com/v2/control-planes/{controlPlaneId}/core-entities/services/{serviceId}/plugins/ \
--header "accept: application/json" \
--header "Content-Type: application/json" \
--header "Authorization: Bearer $KONNECT_TOKEN" \
--data '
{
"name": "pre-function",
"config": {
"access": [
"'$ACCESS_FUNCTION'"
],
"header_filter": [
"'$HEADER_FILTER_FUNCTION'"
]
}
}
'
Make sure to replace the following placeholders with your own values:
-
region
: Geographic region where your Kong Konnect is hosted and operates. -
controlPlaneId
: Theid
of the control plane. -
KONNECT_TOKEN
: Your Personal Access Token (PAT) associated with your Konnect account. -
serviceId
: Theid
of the service the plugin configuration will target.
See the Konnect API reference to learn about region-specific URLs and personal access tokens.
echo "
apiVersion: configuration.konghq.com/v1
kind: KongPlugin
metadata:
name: pre-function
namespace: kong
annotations:
kubernetes.io/ingress.class: kong
config:
access:
- '$ACCESS_FUNCTION'
header_filter:
- '$HEADER_FILTER_FUNCTION'
plugin: pre-function
" | kubectl apply -f -
Next, apply the KongPlugin
resource by annotating the service
resource:
kubectl annotate -n kong service SERVICE_NAME konghq.com/plugins=pre-function
Prerequisite: Configure your Personal Access Token
terraform {
required_providers {
konnect = {
source = "kong/konnect"
}
}
}
provider "konnect" {
personal_access_token = "$KONNECT_TOKEN"
server_url = "https://us.api.konghq.com/"
}
Add the following to your Terraform configuration to create a Konnect Gateway Plugin:
resource "konnect_gateway_plugin_pre_function" "my_pre_function" {
enabled = true
config = {
access = [var.access_function]
header_filter = [var.header_filter_function]
}
control_plane_id = konnect_gateway_control_plane.my_konnect_cp.id
service = {
id = konnect_gateway_service.my_service.id
}
}
This example requires the following variables to be added to your manifest. You can specify values at runtime by setting TF_VAR_name=value
.
variable "header_filter_function" {
type = string
}
Add this section to your declarative configuration file:
_format_version: "3.0"
plugins:
- name: pre-function
route: routeName|Id
config:
access:
- ${{ env "DECK_ACCESS_FUNCTION" }}
header_filter:
- ${{ env "DECK_HEADER_FILTER_FUNCTION" }}
Make sure to replace the following placeholders with your own values:
-
routeName|Id
: Theid
orname
of the route the plugin configuration will target.
Make the following request:
curl -i -X POST http://localhost:8001/routes/{routeName|Id}/plugins/ \
--header "Accept: application/json" \
--header "Content-Type: application/json" \
--data '
{
"name": "pre-function",
"config": {
"access": [
"'$ACCESS_FUNCTION'"
],
"header_filter": [
"'$HEADER_FILTER_FUNCTION'"
]
}
}
'
Make sure to replace the following placeholders with your own values:
-
routeName|Id
: Theid
orname
of the route the plugin configuration will target.
Make the following request:
curl -X POST https://{region}.api.konghq.com/v2/control-planes/{controlPlaneId}/core-entities/routes/{routeId}/plugins/ \
--header "accept: application/json" \
--header "Content-Type: application/json" \
--header "Authorization: Bearer $KONNECT_TOKEN" \
--data '
{
"name": "pre-function",
"config": {
"access": [
"'$ACCESS_FUNCTION'"
],
"header_filter": [
"'$HEADER_FILTER_FUNCTION'"
]
}
}
'
Make sure to replace the following placeholders with your own values:
-
region
: Geographic region where your Kong Konnect is hosted and operates. -
controlPlaneId
: Theid
of the control plane. -
KONNECT_TOKEN
: Your Personal Access Token (PAT) associated with your Konnect account. -
routeId
: Theid
of the route the plugin configuration will target.
See the Konnect API reference to learn about region-specific URLs and personal access tokens.
echo "
apiVersion: configuration.konghq.com/v1
kind: KongPlugin
metadata:
name: pre-function
namespace: kong
annotations:
kubernetes.io/ingress.class: kong
config:
access:
- '$ACCESS_FUNCTION'
header_filter:
- '$HEADER_FILTER_FUNCTION'
plugin: pre-function
" | kubectl apply -f -
Next, apply the KongPlugin
resource by annotating the httproute
or ingress
resource:
kubectl annotate -n kong httproute konghq.com/plugins=pre-function
kubectl annotate -n kong ingress konghq.com/plugins=pre-function
Prerequisite: Configure your Personal Access Token
terraform {
required_providers {
konnect = {
source = "kong/konnect"
}
}
}
provider "konnect" {
personal_access_token = "$KONNECT_TOKEN"
server_url = "https://us.api.konghq.com/"
}
Add the following to your Terraform configuration to create a Konnect Gateway Plugin:
resource "konnect_gateway_plugin_pre_function" "my_pre_function" {
enabled = true
config = {
access = [var.access_function]
header_filter = [var.header_filter_function]
}
control_plane_id = konnect_gateway_control_plane.my_konnect_cp.id
route = {
id = konnect_gateway_route.my_route.id
}
}
This example requires the following variables to be added to your manifest. You can specify values at runtime by setting TF_VAR_name=value
.
variable "header_filter_function" {
type = string
}