Skip to main content

Whitelist Allowed Registries

Updated Mar 11, 2022 ·

Overview

To control image source security, we can leverage various options to restrict users from pulling images from unapproved registries.

  • Deploy an Admission Webhook Server to validate image names.
  • Use an OPA service with policies that enforce registry restrictions.
  • Enable the Image Policy Webhook admission controller.

Admission Webhook Server

An Admission Webhook Server can enforce custom policies to block or allow images based on registry sources. By setting up a webhook server:

  • Each image name is inspected.
  • Trusted registries are specified.
  • Users are prevented from pulling unapproved images.

In the kubeconfig file, define the webhook configuration to validate image policies:

## /etc/kubernetes/admission-config.yaml
apiVersion: apiserver.config.k8s.io/v1
kind: AdmissionConfiguration
plugins:
- name: ImagePolicyWebhook
configuration:
imagePolicy:
kubeConfigFile: /path/to/config/file
allowTTL: 50
denyTTL: 50
retryBackoff: 500
defaultAllow: true

This config enforces registry restrictions during the admission process.

Open Policy Agent (OPA) for Registry Control

OPA allows you to enforce custom policies for image sources. By writing rules, you can ensure that images come only from trusted registries.

  • Create flexible policies for registry restrictions.
  • Configure as admission controller to enforce the rules.

An OPA policy could restrict images to specific registries:

package kubernetes.admission

default allow = false

allow {
input.review.object.spec.containers[_].image == "trusted-registry.io/*"
}

For more information, please see OPA.

Built-In Image Policy Webhook

Kubernetes provides an Image Policy Webhook as a built-in admission controller that allows you to enforce registry controls without external dependencies.

To use the Image Policy Webhook, first enable it in the kube-apiserver configuration:

  • Add ImagePolicyWebhook to the manifest or service file.

    # In kube-apiserver manifest or service file
    --enable-admission-plugins=...,ImagePolicyWebhook,...
  • Restart the kube-apiserver to apply changes.

    sudo systemctl restart kube-apiserver

Create an admission config file to specify registry policies and link it in the kube-apiserver configuration:

# Image Policy Webhook config
apiVersion: apiserver.config.k8s.io/v1
kind: AdmissionConfiguration
plugins:
- name: ImagePolicyWebhook
configuration:
imagePolicy:
kubeConfigFile: /path/to/config/file
defaultAllow: true