Conjur Kubernetes Follower

This topic provides an overview of how to deploy the Conjur Kubernetes Follower in OpenShift and other supported Kubernetes environments. The Conjur Kubernetes Follower is a collection of microservices that run as separate containers within a Pod and, together, provide a scalable way to access the secrets stored in Conjur.

  • Unless specifically noted otherwise, all references to Kubernetes apply to Self-hosted Kubernetes as well as Red Hat OpenShift and other supported Kubernetes-based implementations.
  • All references to Kubernetes namespaces intentionally include the OpenShift concept of project.

Overview

Followers are read-only replicas of the Conjur Leader. They can be spun up as needed to handle the load from delivering secrets to a large number of applications. Because Followers are read-only, they can be terminated without concern for data loss.

The Conjur Kubernetes Follower is unique in that:

  • It is defined and configured as a Kubernetes API resource.

  • In OpenShift, the Conjur Kubernetes Follower can be deployed by the Conjur Follower Operator. The Operator can be installed using the OpenShift OLM (OpenShift only) or by manual deployment.

    In other Kubernetes environments, the Conjur Kubernetes Follower is deployed using a manually installed Operator.

  • It is a collection of microservices that run as separate containers within a Pod and, together, provide a scalable way to access the secrets stored in Conjur. Each Follower service is a separate microservice Pod provisioned within a Kubernetes Deployment. This allows Conjur Kubernetes Follower instances to be easily scaled up and down to match capacity with usage.

  • For compatibility with environments that impose security restrictions, such as OpenShift, each service container runs as an unprivileged (non-root) user.

Conjur Kubernetes Follower architecture

This section describes:

  • Architecture of the Conjur Kubernetes Follower

  • Kubernetes resources that exist at the namespace level, and through into the pod level.

Conjur Kubernetes Follower initialization and secret retrieval

This section describes the initialization process of the Conjur Kubernetes Follower after it has been deployed. Once it is initialized, the Conjur Kubernetes Follower can retrieve secrets for applications.

Initialization

After deployment, the Conjur Kubernetes Follower must be initialized before it can retrieve secrets.

The Conjur Kubernetes Follower is initialized using a seed file provided by an associated Leader. The seed file contains

  • certificates used to establish TLS connections with the Leader

  • an encryption key that the Conjur Kubernetes Follower uses to read encrypted data replicated from the Leader's database.

The following image shows the process of retrieving and unpacking the seed file and replicating the Leader database.

  1. On Pod startup, the Configurator init container authenticates to the Conjur Leader. It then uses the Seed Service API to retrieve a Conjur Kubernetes Follower seed that is used to initialize a Conjur Kubernetes Follower.

  2. The Configurator container unpacks the Conjur Kubernetes Follower seed and stores the relevant pieces in memory volumes that are shared with other containers. At this point, the Configurator container shuts down and the other containers in the Pod start up.

  3. The other containers in the Pod read the seed file it needs from the volumes that have been shared with them, and proceed to initialize themselves.

  4. The PostgreSQL container performs a replication against the Conjur Leader database.

Secret retrieval

This section describes the most common use-case for a Conjur Kubernetes Follower: an application retrieving a secret value. Let's assume the application has already authenticated to Conjur to receive an access token.

  1. An application makes a TLS request against the NGINX container to try and retrieve a secret from the Conjur Kubernetes Follower. It presents a valid Conjur access token obtained from an earlier authentication.

  2. The NGINX container decrypts the TLS request and forwards it to the Conjur container.

  3. Conjur reads the secret value from the PostgreSQL service.

  4. Conjur creates an audit event and writes it to syslog-ng through the audit socket memory volume. The syslog-ng container receives the event and forwards it to the Conjur Leader.

  5. Conjur verifies the access token, requests and retrieves the secret value from the PostgreSQL database, and packages it into a response.

Deploy the Conjur Kubernetes Follower

See Deploy Conjur Kubernetes Follower.