Skip to content

Implementation of Kubernetes PodPreset as an Admission Webhook.

Notifications You must be signed in to change notification settings

cr2121/podpreset-webhook

 
 

Repository files navigation

podpreset-webhook

Build Status Docker Repository on Quay

Implementation of Kubernetes PodPreset as an Admission Webhook.

Overview

Kubernetes features the ability to inject certain information into pods at creation time including secrets, volumes, volume mounts, and environment variables. Admission Webhooks are implemented as a webserver which receive requests from the Kubernetes API. A CustomResourceDefinition (CRD) called PodPreset in the redhatcop.redhat.io API group has an identical specification to the upstream API resource.

The following is an example of a PodPreset that injects an environment variable called FOO to pods with the label role: frontend

apiVersion: redhatcop.redhat.io/v1alpha1
kind: PodPreset
metadata:
  name: frontend
spec:
  env:
  - name: FOO
    value: bar
  selector:
    matchLabels:
      role: frontend

The goal is to be fully compatible with the existing Kubernetes resource.

Installation

The webserver supporting the webhook needs to be deployed to a namespace. By default, the example manifests expect this namespace to be called podpreset-webhook. Create a new namesapce called podpreset-webhook. You can choose to deploy the webserver in another namespace but you must be sure to update references in the manifests within the deploy folder.

Install the manifests to deploy the webhook webserver by executing the following commands:

$ kubectl apply -f deploy/crds/redhatcop_v1alpha1_podpreset_crd.yaml
$ kubectl apply -f deploy/service_account.yaml
$ kubectl apply -f deploy/clusterrole.yaml
$ kubectl apply -f deploy/cluster_role_binding.yaml
$ kubectl apply -f deploy/role.yaml
$ kubectl apply -f deploy/role_binding.yaml
$ kubectl apply -f deploy/secret.yaml
$ kubectl apply -f deploy/webhook.yaml

Example

Utilize the following steps to demonstrate the functionality of the PodPreset's in a cluster.

  1. Deploy any applications (as a DeploymentConfig or Deployment)
  2. Label the resource
kubectl patch dc/<name> -p '{"spec":{"template":{"metadata":{"labels":{"role":"frontend"}}}}}'
  1. Create the PodPreset
kubectl apply -f deploy/crds/redhatcop_v1alpha1_podpreset_cr.yaml

Verify the new pods have the environment variable FOO=bar

About

Implementation of Kubernetes PodPreset as an Admission Webhook.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Go 83.5%
  • Shell 8.1%
  • Makefile 7.3%
  • Dockerfile 1.1%