Skip to content

maxgio92/capsule-policy-vap

Repository files navigation

Capsule policy with Validating Admission Policy

IMPORTANT: this is a work in progress.

Quickstart

Create a local Kubernetes cluster with ValidatingAdmissionPolicy feature gate enabled, and admissionregistration.k8s.io/v1beta1 API enabled:

kind create cluster --config kind.yaml

Install Capsule CRDs:

kubectl apply -k ./crds

Create a Tenant and a Tenant owner:

kubectl apply -f ./oil-tenant.yaml
kubectl apply -f ./alice-tenant-owner-rolebinding.yaml

Install a Validating Admission Policy with Binding:

kubectl apply -f ./ingressclasses-validatingadmissionpolicy.yaml

As Tenant owner, create Ingress of denied class:

kubectl --as "alice" --as-group "capsule.clastix.io" apply -f ./ingress-silver.yaml

As Tenant owner, create Ingress of allowed class:

kubectl --as "alice" --as-group "capsule.clastix.io" apply -f ./ingress-bronze.yaml

End-to-end test

make e2e

Debug requests

Configure a MutatingAdmissionWebhookConfiguration (they're executed before validating webhooks) with an exposed web server like ngrok:

apiVersion: admissionregistration.k8s.io/v1
kind: MutatingWebhookConfiguration
metadata:
  name: aaa-ingressclass-validating-policy
webhooks:
- admissionReviewVersions:
  - v1
  clientConfig:
    url: <YOUR WEB SERVER URL HERE>
  name: ingresses.vap.capsule.clastix.io
  rules:
  - apiGroups: ["networking.k8s.io"]
    apiVersions: ["v1"]
    operations: ["CREATE", "UPDATE"]
    resources: ["ingresses"]
  sideEffects: None

You can run ngrok locally with ngrok http 8080.

Open your browser to http://localhost:4040 and make a request:

kubectl --as "alice" --as-group "capsule.clastix.io" create -f ./ingress-silver.yaml

You can analyse the request with the AdmissionReview sent by the API server. You can find example of a AdmissionReview of a request made impersonating Alice User and capsule.clastix.io Group, in this sample.

References

About

Capsule policy with Validating Admission Policy engine

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published