Skip to content
Kong Docs are moving soon! Our docs are migrating to a new home. You'll be automatically redirected to the new site in the future. In the meantime, view this page on the new site!
Kong Logo | Kong Docs Logo
  • Docs
    • Explore the API Specs
      View all API Specs View all API Specs View all API Specs arrow image
    • Documentation
      API Specs
      Kong Gateway
      Lightweight, fast, and flexible cloud-native API gateway
      Kong Konnect
      Single platform for SaaS end-to-end connectivity
      Kong AI Gateway
      Multi-LLM AI Gateway for GenAI infrastructure
      Kong Mesh
      Enterprise service mesh based on Kuma and Envoy
      decK
      Helps manage Kong’s configuration in a declarative fashion
      Kong Ingress Controller
      Works inside a Kubernetes cluster and configures Kong to proxy traffic
      Kong Gateway Operator
      Manage your Kong deployments on Kubernetes using YAML Manifests
      Insomnia
      Collaborative API development platform
  • Plugin Hub
    • Explore the Plugin Hub
      View all plugins View all plugins View all plugins arrow image
    • Functionality View all View all arrow image
      View all plugins
      AI's icon
      AI
      Govern, secure, and control AI traffic with multi-LLM AI Gateway plugins
      Authentication's icon
      Authentication
      Protect your services with an authentication layer
      Security's icon
      Security
      Protect your services with additional security layer
      Traffic Control's icon
      Traffic Control
      Manage, throttle and restrict inbound and outbound API traffic
      Serverless's icon
      Serverless
      Invoke serverless functions in combination with other plugins
      Analytics & Monitoring's icon
      Analytics & Monitoring
      Visualize, inspect and monitor APIs and microservices traffic
      Transformations's icon
      Transformations
      Transform request and responses on the fly on Kong
      Logging's icon
      Logging
      Log request and response data using the best transport for your infrastructure
  • Support
  • Community
  • Kong Academy
Get a Demo Start Free Trial
Kong Ingress Controller
2.6.x
  • Home icon
  • Kong Ingress Controller
  • Deployment
  • Enable the Validating Admission Webhook
github-edit-pageEdit this page
report-issueReport an issue
  • Kong Gateway
  • Kong Konnect
  • Kong Mesh
  • Kong AI Gateway
  • Plugin Hub
  • decK
  • Kong Ingress Controller
  • Kong Gateway Operator
  • Insomnia
  • Kuma

  • Docs contribution guidelines
  • unreleased
  • 3.4.x (latest) (LTS)
  • 3.3.x
  • 3.2.x
  • 3.1.x
  • 3.0.x
  • 2.12.x (LTS)
  • 2.11.x
  • 2.10.x
  • 2.9.x
  • 2.8.x
  • 2.7.x
  • 2.6.x
  • 2.5.x (LTS)
  • Introduction
    • FAQ
    • Version Support Policy
    • Stages of Software Availability
    • Changelog
  • Concepts
    • Architecture
    • Custom Resources
    • Deployment Methods
    • Kong for Kubernetes with Kong Gateway Enterprise
    • High-Availability and Scaling
    • Resource Classes
    • Security
    • Ingress Resource API Versions
    • Gateway API
  • Deployment
    • Kong Ingress on Minikube
    • Kong for Kubernetes
    • Kong Enterprise for Kubernetes (DB-less)
    • Kong Enterprise for Kubernetes (DB-backed)
    • Kong Ingress on AKS
    • Kong Ingress on EKS
    • Kong Ingress on GKE
    • Admission Controller
    • Installing Gateway APIs
  • Guides
    • Getting Started with KIC
    • Upgrading from previous versions
    • Upgrading to Kong 3.x
    • Using Kong Gateway Enterprise
    • Getting Started using Istio
    • Using Custom Resources
      • Using the Kong(Cluster)Plugin Resource
      • Using the KongIngress Resource
      • Using KongConsumer and Credential Resources
      • Using the TCPIngress Resource
      • Using the UDPIngress Resource
    • Using the ACL and JWT Plugins
    • Using cert-manager with Kong
    • Configuring a Fallback Service
    • Using an External Service
    • Configuring HTTPS Redirects for Services
    • Using Redis for Rate Limiting
    • Integrate KIC with Prometheus/Grafana
    • Configuring Circuit-Breaker and Health-Checking
    • Setting up a Custom Plugin
    • Using Ingress with gRPC
    • Setting up Upstream mTLS
    • Exposing a TCP-based Service
    • Exposing a UDP-based Service
    • Using the mTLS Auth Plugin
    • Using the OpenID Connect Plugin
    • Rewriting Hosts and Paths
    • Preserving Client IP Address
    • Using Gateway API
    • Using Kong with Knative
  • References
    • KIC Annotations
    • CLI Arguments
    • Custom Resource Definitions
    • Plugin Compatibility
    • Version Compatibility
    • Troubleshooting
    • Prometheus Metrics
    • Feature Gates
    • Gateway API Support
    • File Permissions Reference
enterprise-switcher-icon Switch to OSS
On this pageOn this page
  • Enable the webhook
  • Test the configuration
    • Verify duplicate KongConsumers
    • Verify incorrect KongPlugins
    • Verify incorrect credential secrets
You are browsing documentation for an older version. See the latest documentation here.

Enable the Validating Admission Webhook

The Kong Ingress Controller ships with an admission webhook for KongPlugin and KongConsumer resources in the configuration.konghq.com API group. You can generate TLS certificate and key pair that you need for admission webhook.

Enable the webhook

You can enable webhook using Helm chart, with a script, or manually.

Helm chart
Script
Manual

If you are using the Helm chart, you can enable the webhook by setting ingressController.admissionWebhook.enabled=true in your values.yaml. It is set to true by default as of chart version 2.16.

The chart generates a self-signed certificate by default. The ingressController.admissionWebhook.certificate is set to use a user-provided certificate instead.

If you are using the stock YAML manifests to install and setup Kong for Kubernetes, then you can set up the admission webhook using a script. You need kubectl and openssl installed on your workstation for the script to work.

curl -sL https://raw.githubusercontent.com/Kong/kubernetes-ingress-controller/main/hack/deploy-admission-controller.sh | bash

The results should look like this:

Generating a 2048 bit RSA private key
.......+++
.......................................................................+++
writing new private key to '/var/folders/h2/chkzcfsn4sl3nn99tk5551tc0000gp/T/tmp.SX3eOgD0/tls.key'
-----
secret/kong-validation-webhook created
deployment.apps/ingress-kong patched
validatingwebhookconfiguration.admissionregistration.k8s.io/kong-validations created

Kubernetes API-server makes an HTTPS call to the admission webhook to verify if the custom resource is valid or not. For this to work, Kubernetes API-server needs to trust the CA certificate that is used to sign the admission webhook’s TLS certificate.

  1. Generate a certificate for admission webhook.

    You can either use a self-signed certificate or a Kubernetes CA. The CN field of the x509 certificate takes the form <validation-service-name>.<ingress-controller-namespace>.svc, which in the default case is kong-validation-webhook.kong.svc.

    • self-signed certificate

      Use openssl to generate a self-signed certificate:

      openssl req -x509 -newkey rsa:2048 -keyout tls.key -out tls.crt -days 365  \
      -nodes -subj "/CN=kong-validation-webhook.kong.svc" \
      -extensions EXT -config <( \
       printf "[dn]\nCN=kong-validation-webhook.kong.svc\n[req]\ndistinguished_name = dn\n[EXT]\nsubjectAltName=DNS:kong-validation-webhook.kong.svc\nkeyUsage=digitalSignature\nextendedKeyUsage=serverAuth")
      

      The results should look like this:

      Generating a 2048 bit RSA private key
      ..........................................................+++
      .............+++
      writing new private key to 'key.pem'
      
    • In-built Kubernetes CA Kubernetes comes with an in-built CA which can be used to provision a certificate for the admission webhook. For more information about generating a certificate using the in-built CA, see Managing TLS in a cluster.

  2. Create a Kubernetes secret object based on the key and certificate. The PEM-encoded certificate is stored in a file named tls.crt and private key is stored in tls.key.

    kubectl create secret tls kong-validation-webhook -n kong \
     --key tls.key --cert tls.crt
    

    The results should look like this:

    secret/kong-validation-webhook created
    
  3. Update the Ingress Controller deployment. Use this command to patch the Kong Ingress Controller deployment to mount the certificate and key pair and also enable the admission webhook.

     kubectl patch deploy -n kong ingress-kong \
     -p '{"spec":{"template":{"spec":{"containers":[{"name":"ingress-controller","env":[{"name":"CONTROLLER_ADMISSION_WEBHOOK_LISTEN","value":":8080"}],"volumeMounts":[{"name":"validation-webhook","mountPath":"/admission-webhook"}]}],"volumes":[{"secret":{"secretName":"kong-validation-webhook"},"name":"validation-webhook"}]}}}}'
    

    The results should look like this:

     deployment.extensions/ingress-kong patched
    

    If you are using the Helm chart, run helm upgrade -f <path to values.yamvl> <release name> kong/kong after enabling the webhook or updating the certificate configuration. Note that chart versions 2.16 and later enable the webhook by default.

  4. Enable the validating admission.

    If you are using Kubernetes CA to generate the certificate, you don’t need to supply a CA certificate (in the caBundle parameter) as part of the Validation Webhook configuration as the API-server already trusts the internal CA.

     readonly CABUNDLE=$(base64 < ./tls.crt)
     echo "apiVersion: admissionregistration.k8s.io/v1
     kind: ValidatingWebhookConfiguration
     metadata:
       name: kong-validations
     webhooks:
     - name: validations.kong.konghq.com
       objectSelector:
         matchExpressions:
         - key: owner
           operator: NotIn
           values:
           - helm
       failurePolicy: Ignore
       sideEffects: None
       admissionReviewVersions: [\"v1\", \"v1beta1\"]
       rules:
       - apiGroups:
         - configuration.konghq.com
         apiVersions:
         - '*'
         operations:
         - CREATE
         - UPDATE
         resources:
         - kongconsumers
         - kongconsumergroups
         - kongplugins
         - kongclusterplugins
         - kongingresses
       - apiGroups:
         - ''
         apiVersions:
         - 'v1'
         operations:
         - UPDATE
         resources:
         - secrets
       - apiGroups:
         - networking.k8s.io
         apiVersions:
           - 'v1'
         operations:
         - CREATE
         - UPDATE
         resources:
         - ingresses
       - apiGroups:
         - gateway.networking.k8s.io
         apiVersions:
         - 'v1alpha2'
         - 'v1beta1'
         operations:
         - CREATE
         - UPDATE
         resources:
         - gateways
         - httproutes
       clientConfig:
         service:
          namespace: kong
          name: kong-validation-webhook
        caBundle: ${CABUNDLE}" | kubectl apply -f -
    

    The results should look like this:

     validatingwebhookconfiguration.admissionregistration.k8s.io/kong-validations configured
    

Test the configuration

You can test if the admission webhook is enabled for duplicate KongConsumers, incorrect KongPlugins, incorrect credential secrets, and incorrect routes.

Verify duplicate KongConsumers

  1. Create a KongConsumer with username as alice:

     echo "apiVersion: configuration.konghq.com/v1
     kind: KongConsumer
     metadata:
       name: alice
       annotations:
         kubernetes.io/ingress.class: kong
     username: alice" | kubectl apply -f -
    

    The results should look like this:

     kongconsumer.configuration.konghq.com/alice created
    
  2. Create another KongConsumer with the same username:

     echo "apiVersion: configuration.konghq.com/v1
     kind: KongConsumer
     metadata:
       name: alice2
       annotations:
         kubernetes.io/ingress.class: kong
     username: alice" | kubectl apply -f -
    

    The results should look like this:

     Error from server: error when creating "STDIN": admission webhook "validations.kong.konghq.com" denied the request: consumer already exists
    

The validation webhook rejected the KongConsumer resource as there already exists a consumer in Kong with the same username.

Verify incorrect KongPlugins

Try to create the following KongPlugin resource. The foo config property does not exist in the configuration definition and hence the admission webhook returns back an error. If you remove the foo: bar configuration line, the plugin will be created successfully.

echo "
apiVersion: configuration.konghq.com/v1
kind: KongPlugin
metadata:
  name: request-id
config:
  foo: bar
  header_name: my-request-id
plugin: correlation-id
" | kubectl apply -f -

The results should look like this:

Error from server: error when creating "STDIN": admission webhook "validations.kong.konghq.com" denied the request: 400 Bad Request {"fields":{"config":{"foo":"unknown field"}},"name":"schema violation","code":2,"message":"schema violation (config.foo: unknown field)"}

Verify incorrect credential secrets

With 0.7 and later versions of Kong Ingress Controller, validations also take place for incorrect secret types and wrong parameters to the secrets.

kubectl create secret generic missing-password-credential \
  --from-literal=kongCredType=basic-auth \
  --from-literal=username=foo

The results should look like this:

Error from server: admission webhook "validations.kong.konghq.com" denied the request: missing required field(s): password
kubectl create secret generic wrong-cred-credential \
  --from-literal=kongCredType=wrong-auth \
  --from-literal=sdfkey=my-sooper-secret-key

The results should look like this:

Error from server: admission webhook "validations.kong.konghq.com" denied the request: invalid credential type: wrong-auth
Thank you for your feedback.
Was this page useful?
Too much on your plate? close cta icon
More features, less infrastructure with Kong Konnect. 1M requests per month for free.
Try it for Free
  • Kong
    Powering the API world

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

    • Products
      • Kong Konnect
      • Kong Gateway Enterprise
      • Kong Gateway
      • Kong Mesh
      • Kong Ingress Controller
      • Kong Insomnia
      • Product Updates
      • Get Started
    • Documentation
      • Kong Konnect Docs
      • Kong Gateway Docs
      • Kong Mesh Docs
      • Kong Insomnia Docs
      • Kong Konnect Plugin Hub
    • Open Source
      • Kong Gateway
      • Kuma
      • Insomnia
      • Kong Community
    • Company
      • About Kong
      • Customers
      • Careers
      • Press
      • Events
      • Contact
  • Terms• Privacy• Trust and Compliance
© Kong Inc. 2025