Reference

Reference document for Capsule Operator configuration

Custom Resource Definition

Capsule operator uses a Custom Resources Definition (CRD) for Tenants. Tenants are cluster wide resources, so you need cluster level permissions to work with tenants. You can learn about tenant CRDs in the following section

Capsule Configuration

The Capsule configuration can be piloted by a Custom Resource definition named CapsuleConfiguration.

apiVersion: capsule.clastix.io/v1alpha1
kind: CapsuleConfiguration
metadata:
  name: default
  annotations:
    capsule.clastix.io/ca-secret-name: "capsule-ca"
    capsule.clastix.io/tls-secret-name: "capsule-tls"
    capsule.clastix.io/mutating-webhook-configuration-name: "capsule-mutating-webhook-configuration"
    capsule.clastix.io/validating-webhook-configuration-name: "capsule-validating-webhook-configuration"
spec:
  userGroups: ["capsule.clastix.io"]
  forceTenantPrefix: false
  protectedNamespaceRegex: ""
Option Description Default
.spec.forceTenantPrefix Force the tenant name as prefix for namespaces: <tenant_name>-<namespace>. false
.spec.userGroups Array of Capsule groups to which all tenant owners must belong. [capsule.clastix.io]
.spec.protectedNamespaceRegex Disallows creation of namespaces matching the passed regexp. null
.metadata.annotations.capsule.clastix.io/ca-secret-name Set the Capsule Certificate Authority secret name capsule-ca
.metadata.annotations.capsule.clastic.io/tls-secret-name Set the Capsule TLS secret name capsule-tls
.metadata.annotations.capsule.clastix.io/mutating-webhook-configuration-name Set the MutatingWebhookConfiguration name mutating-webhook-configuration-name
.metadata.annotations.capsule.clastix.io/validating-webhook-configuration-name Set the ValidatingWebhookConfiguration name validating-webhook-configuration-name

Upon installation using Kustomize or Helm, a capsule-default resource will be created. The reference to this configuration is managed by the CLI flag --configuration-name.

Capsule Permissions

In the current implementation, the Capsule operator requires cluster admin permissions to fully operate. Make sure you deploy Capsule having access to the default cluster-admin ClusterRole.

Admission Controllers

Capsule implements Kubernetes multi-tenancy capabilities using a minimum set of standard Admission Controllers enabled on the Kubernetes APIs server.

Here the list of required Admission Controllers you have to enable to get full support from Capsule:

  • PodNodeSelector
  • LimitRanger
  • ResourceQuota
  • MutatingAdmissionWebhook
  • ValidatingAdmissionWebhook

In addition to the required controllers above, Capsule implements its own set through the Dynamic Admission Controller mechanism, providing callbacks to add further validation or resource patching.

To see Admission Controls installed by Capsule:

$ kubectl get ValidatingWebhookConfiguration
NAME                                       WEBHOOKS   AGE
capsule-validating-webhook-configuration   8          2h

$ kubectl get MutatingWebhookConfiguration
NAME                                       WEBHOOKS   AGE
capsule-mutating-webhook-configuration     1          2h

Command Options

The Capsule operator provides the following command options:

Option Description Default
--metrics-addr The address and port where /metrics are exposed. 127.0.0.1:8080
--enable-leader-election Start a leader election client and gain leadership before executing the main loop. true
--zap-log-level The log verbosity with a value from 1 to 10 or the basic keywords. 4
--zap-devel The flag to get the stack traces for deep debugging. null
--configuration-name The Capsule Configuration CRD name, default is installed automatically capsule-default

Created Resources

Once installed, the Capsule operator creates the following resources in your cluster:

NAMESPACE       RESOURCE
                namespace/capsule-system
                customresourcedefinition.apiextensions.k8s.io/tenants.capsule.clastix.io
                customresourcedefinition.apiextensions.k8s.io/capsuleconfigurations.capsule.clastix.io
                clusterrole.rbac.authorization.k8s.io/capsule-proxy-role
                clusterrole.rbac.authorization.k8s.io/capsule-metrics-reader
                capsuleconfiguration.capsule.clastix.io/capsule-default
                mutatingwebhookconfiguration.admissionregistration.k8s.io/capsule-mutating-webhook-configuration
                validatingwebhookconfiguration.admissionregistration.k8s.io/capsule-validating-webhook-configuration
capsule-system  clusterrolebinding.rbac.authorization.k8s.io/capsule-manager-rolebinding
capsule-system  clusterrolebinding.rbac.authorization.k8s.io/capsule-proxy-rolebinding
capsule-system  secret/capsule-ca
capsule-system  secret/capsule-tls
capsule-system  service/capsule-controller-manager-metrics-service
capsule-system  service/capsule-webhook-service
capsule-system  deployment.apps/capsule-controller-manager