helm upgrade --install kong-operator kong/kong-operator -n kong-system \
--create-namespace \
--set image.tag=2.3 \
--set env.ENABLE_CONTROLLER_KONNECT=true
kubectl -n kong-system wait --for=condition=Available=true --timeout=300s deployment/kong-operator-kong-operator-controller-managerEnable a plugin on a Route
You can associate plugins with an entity, like a Consumer or Gateway Service, in Konnect. To do this with KGO, you must create a KongPlugin and use KongPluginBinding to associate it with another entity.
Prerequisites
Kong Konnect
If you don’t have a Konnect account, you can get started quickly with our onboarding wizard.
- The following Konnect items are required to complete this tutorial:
- Personal access token (PAT): Create a new personal access token by opening the Konnect PAT page and selecting Generate Token.
-
Set the personal access token as an environment variable:
export KONNECT_TOKEN='YOUR KONNECT TOKEN'
Kong Operator running
If you want cert-manager to issue and rotate the admission and conversion webhook certificates, install cert-manager to your cluster and enable cert-manager integration by passing the following argument while installing, in the next step:
--set global.webhooks.options.certManager.enabled=trueIf you do not enable this, the chart will generate and inject self-signed certificates automatically. We recommend enabling cert-manager to manage the lifecycle of these certificates.
Kong Operator needs a certificate authority to sign the certificate for mTLS communication between the control plane and the data plane.
This is handled automatically by the Helm chart. If you need to provide a custom CA certificate, refer to the certificateAuthority section
in the values.yaml of the Helm chart to learn how to create and reference your own CA certificate.
Create a KonnectAPIAuthConfiguration resource
kubectl create namespace kong --dry-run=client -o yaml | kubectl apply -f -
echo '
kind: KonnectAPIAuthConfiguration
apiVersion: konnect.konghq.com/v1alpha1
metadata:
name: konnect-api-auth
namespace: kong
spec:
type: token
token: "'$KONNECT_TOKEN'"
serverURL: us.api.konghq.com
' | kubectl apply -f -Create a KonnectGatewayControlPlane resource
echo '
kind: KonnectGatewayControlPlane
apiVersion: konnect.konghq.com/v1alpha2
metadata:
name: gateway-control-plane
namespace: kong
spec:
createControlPlaneRequest:
name: gateway-control-plane
konnect:
authRef:
name: konnect-api-auth
' | kubectl apply -f -Create a KongService
In this tutorial, we’ll bind a plugin to Kong Gateway entities, like a Route, using the KongPluginBinding CRD.
First, create a Gateway Service in Konnect using the KongService CRD:
echo '
kind: KongService
apiVersion: configuration.konghq.com/v1alpha1
metadata:
name: example-service
namespace: kong
spec:
name: example-service
host: httpbin.konghq.com
protocol: http
controlPlaneRef:
type: konnectNamespacedRef
konnectNamespacedRef:
name: gateway-control-plane
' | kubectl apply -f -Create a KongRoute
To expose the Service, create a KongRoute associated with the KongService defined previously:
echo '
kind: KongRoute
apiVersion: configuration.konghq.com/v1alpha1
metadata:
name: example-route
namespace: kong
spec:
name: example-route
protocols:
- http
paths:
- "/anything"
serviceRef:
type: namespacedRef
namespacedRef:
name: example-service
' | kubectl apply -f -Enable a KongPlugin and create a KongPluginBinding
In this tutorial, you’ll enable a simple configuration of the Rate Limiting plugin.
First, enable the plugin:
echo '
kind: KongPlugin
apiVersion: configuration.konghq.com/v1
metadata:
name: rate-limiting-minute-5
namespace: kong
plugin: rate-limiting
config:
policy: local
minute: 5
hour: 1000
' | kubectl apply -f -Then, to bind the plugin to the Route, create a KongPluginBinding:
echo '
kind: KongPluginBinding
apiVersion: configuration.konghq.com/v1alpha1
metadata:
name: binding-route-example-rate-limiting
namespace: kong
spec:
pluginRef:
kind: KongPlugin
name: rate-limiting-minute-5
targets:
routeRef:
group: configuration.konghq.com
kind: KongRoute
name: example-route
controlPlaneRef:
type: konnectNamespacedRef
konnectNamespacedRef:
name: gateway-control-plane
' | kubectl apply -f -Validate
You can verify the KongPluginBinding was reconciled successfully by checking its Programmed condition.
kubectl get -n kong kongpluginbinding binding-route-example-rate-limiting \
-o=jsonpath='{.status.conditions[?(@.type=="Programmed")]}' | jqThe output should look similar to this:
{
"observedGeneration": 1,
"reason": "Programmed",
"status": "True",
"type": "Programmed"
}Cleanup
Delete the resources created in this guide
Deleting the KonnectGatewayControlPlane also deletes the control plane the Kong Operator created in Konnect:
kubectl delete -n kong --ignore-not-found \
kongpluginbinding/binding-route-example-rate-limiting \
kongplugin/rate-limiting-minute-5 \
kongroute/example-route \
kongservice/example-service \
konnectgatewaycontrolplane/gateway-control-plane \
konnectapiauthconfiguration/konnect-api-authDelete the namespaces
helm uninstall kong-operator -n kong-system
kubectl delete namespace kong kong-system