Apicurio Registry Operator configuration reference
This chapter provides a complete reference for configuring Apicurio Registry instances using the ApicurioRegistry3
custom resource.
ApicurioRegistry3 custom resource structure
The ApicurioRegistry3 custom resource defines the desired state of a Apicurio Registry instance. The resource is
organized into two main sections under spec:
apiVersion: registry.apicur.io/v1
kind: ApicurioRegistry3
metadata:
name: example-registry
spec:
app:
# Configuration for the Apicurio Registry backend (REST API) component.
ui:
# Configuration for the Apicurio Registry web console component.
Apicurio Registry backend (REST API) component configuration reference
The spec.app section configures the backend component, which provides the REST API.
Common component fields
The following fields are available for both spec.app and spec.ui components:
| Field | Description | Type | Default |
|---|---|---|---|
|
Number of pod replicas for the component |
Integer |
|
|
List of environment variables to pass to the component’s container |
Array of EnvVar |
|
|
Ingress configuration for the component |
||
|
Custom PodTemplateSpec for advanced pod configuration |
PodTemplateSpec |
Operator-generated defaults |
|
PodDisruptionBudget configuration |
PodDisruptionSpec |
|
|
NetworkPolicy configuration |
NetworkPolicySpec |
|
|
Use |
String |
|
Application-specific fields
The following fields are specific to spec.app:
| Field | Description | Type | Default |
|---|---|---|---|
|
Storage configuration for the backend |
||
|
Feature flags for the backend |
See below |
|
|
Authentication and authorization configuration |
See Authentication and authorization configuration reference |
|
|
TLS configuration for the application |
See below |
AppFeaturesSpec
Configure optional features for Apicurio Registry:
| Field | Description | Type | Default |
|---|---|---|---|
|
Allow deletion of groups, artifacts, and artifact versions. By default, resources in Apicurio Registry are immutable. |
Boolean |
|
|
Allow artifact versions in DRAFT state to be mutable. Enabling this also unlocks Studio functionality in the UI. |
Boolean |
|
Example:
spec:
app:
features:
resourceDeleteEnabled: true
versionMutabilityEnabled: true
TLSSpec
Configure TLS certificates for the application:
| Field | Description | Type | Default |
|---|---|---|---|
|
Reference to a Secret containing the keystore (PKCS12 format). Default key: |
None |
|
|
Reference to a Secret containing the keystore password. Default key: |
None |
Example:
spec:
app:
tls:
keystoreSecretRef:
name: registry-tls
key: keystore.p12
keystorePasswordSecretRef:
name: registry-tls
key: keystore.password
UI component configuration reference
The spec.ui section configures the Apicurio Registry web console component.
UI-specific fields
| Field | Description | Type | Default |
|---|---|---|---|
|
Whether the operator should deploy the UI component |
Boolean |
|
The UI component also supports all common component fields listed in Apicurio Registry backend (REST API) component configuration reference.
Example:
spec:
ui:
enabled: true
replicas: 2
env:
- name: REGISTRY_API_URL
value: https://registry-api.example.com/apis/registry/v3
ingress:
host: registry-ui.example.com
Storage configuration reference
The spec.app.storage section configures the storage backend for Apicurio Registry.
StorageSpec
| Field | Description | Type | Default |
|---|---|---|---|
|
Storage type: |
String |
|
|
SQL database configuration. Required when |
None |
|
|
KafkaSQL storage configuration. Required when |
None |
| The default in-memory storage is not suitable for production environments. |
SqlSpec
Configure SQL database storage (PostgreSQL or MySQL):
| Field | Description | Type |
|---|---|---|
|
Data source configuration |
DataSourceSpec
| Field | Description | Type | Default |
|---|---|---|---|
|
JDBC connection URL. Example: |
String |
None |
|
Database username |
String |
None |
|
Reference to a Secret containing the database password. Default key: |
None |
Example for PostgreSQL:
spec:
app:
storage:
type: postgresql
sql:
dataSource:
url: jdbc:postgresql://postgresql.my-project.svc:5432/registry
username: registry_user
password:
name: postgresql-credentials
key: password
Example for MySQL:
spec:
app:
storage:
type: mysql
sql:
dataSource:
url: jdbc:mysql://mysql.my-project.svc:3306/registry
username: registry_user
password:
name: mysql-credentials
key: password
KafkaSqlSpec
Configure KafkaSQL storage:
| Field | Description | Type | Default |
|---|---|---|---|
|
Kafka bootstrap servers address. Required for KafkaSQL storage. |
String |
None |
|
TLS configuration for connecting to Kafka |
None |
|
|
Authentication configuration for connecting to Kafka |
None |
Example:
spec:
app:
storage:
type: kafkasql
kafkasql:
bootstrapServers: my-cluster-kafka-bootstrap.my-project.svc:9092
KafkaSqlTLSSpec
Configure TLS for KafkaSQL storage:
| Field | Description | Type | Default |
|---|---|---|---|
|
Reference to a Secret containing the TLS truststore (PKCS12 format). Default key: |
None |
|
|
Reference to a Secret containing the truststore password. Default key: |
None |
Example:
spec:
app:
storage:
type: kafkasql
kafkasql:
bootstrapServers: my-cluster-kafka-bootstrap.my-project.svc:9093
tls:
truststoreSecretRef:
name: kafka-cluster-ca-cert
key: ca.p12
truststorePasswordSecretRef:
name: kafka-cluster-ca-cert
key: ca.password
KafkaSqlAuthSpec
Configure SASL authentication for KafkaSQL storage:
| Field | Description | Type | Default |
|---|---|---|---|
|
SASL mechanism. Examples: |
String |
None |
|
Reference to a Secret containing the username. Default key: |
None |
|
|
Reference to a Secret containing the password. Default key: |
None |
|
|
Reference to a Secret containing the OAuth client ID (for OAUTHBEARER). Default key: |
None |
|
|
Reference to a Secret containing the OAuth client secret (for OAUTHBEARER). Default key: |
None |
|
|
OAuth token endpoint URI (for OAUTHBEARER) |
String |
None |
Example with SCRAM-SHA-512:
spec:
app:
storage:
type: kafkasql
kafkasql:
bootstrapServers: my-cluster-kafka-bootstrap.my-project.svc:9093
auth:
mechanism: SCRAM-SHA-512
usernameSecretRef:
name: kafka-credentials
key: username
passwordSecretRef:
name: kafka-credentials
key: password
Authentication and authorization configuration reference
The spec.app.auth section configures OIDC authentication and role-based authorization.
AuthSpec
| Field | Description | Type | Default |
|---|---|---|---|
|
Enable authentication |
Boolean |
|
|
OIDC client ID for the backend application |
String |
None |
|
OIDC client ID for the UI application |
String |
None |
|
URL of the identity server (OIDC issuer) |
String |
None |
|
Redirect URI after successful authentication |
String |
None |
|
Redirect URI after logout |
String |
None |
|
Allow anonymous users to make read-only calls to the REST API |
Boolean |
|
|
Authorization configuration |
See below |
|
|
Client credentials basic authentication configuration |
See below |
|
|
TLS configuration for OIDC connections |
See below |
Example:
spec:
app:
auth:
enabled: true
appClientId: registry-client-api
uiClientId: registry-client-ui
authServerUrl: https://keycloak.example.com/realms/registry
redirectUri: https://registry-ui.example.com
logoutUrl: https://registry-ui.example.com
anonymousReadsEnabled: false
AuthzSpec
Configure role-based authorization:
| Field | Description | Type | Default |
|---|---|---|---|
|
Enable role-based authorization |
Boolean |
|
|
When enabled, only the user who created an artifact can modify or delete it |
Boolean |
|
|
When enabled with owner-only authorization, only the user who created an artifact group has write access |
Boolean |
|
|
When enabled, grants at least read-only access to all authenticated users in the organization |
Boolean |
|
|
Role configuration |
See below |
|
|
Admin override configuration |
See below |
Example:
spec:
app:
auth:
authz:
enabled: true
ownerOnlyEnabled: true
groupAccessEnabled: false
readAccessEnabled: true
roles:
source: token
admin: sr-admin
developer: sr-developer
readOnly: sr-readonly
AuthzRolesSpec
Configure authorization roles:
| Field | Description | Type | Default |
|---|---|---|---|
|
Role source. Use |
String |
None |
|
Name of the admin role |
String |
None |
|
Name of the developer role |
String |
None |
|
Name of the read-only role |
String |
None |
AdminOverrideSpec
Configure admin override functionality:
| Field | Description | Type | Default |
|---|---|---|---|
|
Enable admin override |
Boolean |
|
|
Where to look for admin override information. Only |
String |
None |
|
Type of information used to determine admin status: |
String |
None |
|
Name of the role that indicates admin status (when |
String |
None |
|
Name of the JWT claim to use for admin override (when |
String |
None |
|
Required value of the JWT claim (when |
String |
None |
Example using role-based admin override:
spec:
app:
auth:
authz:
enabled: true
adminOverride:
enabled: true
from: token
type: role
role: sr-admin
Example using claim-based admin override:
spec:
app:
auth:
authz:
enabled: true
adminOverride:
enabled: true
from: token
type: claim
claimName: org-admin
claimValue: "true"
BasicAuthSpec
Configure basic authentication for client credentials:
| Field | Description | Type | Default |
|---|---|---|---|
|
Enable client credentials basic authentication |
Boolean |
|
|
Token cache expiration time (e.g., |
String |
None |
Example:
spec:
app:
auth:
basicAuth:
enabled: true
cacheExpiration: 25m
AuthTLSSpec
Configure TLS for OIDC connections:
| Field | Description | Type | Default |
|---|---|---|---|
|
TLS verification type: |
String |
|
|
Reference to a Secret containing the TLS truststore (PKCS12 format). Default key: |
None |
|
|
Reference to a Secret containing the truststore password. Default key: |
None |
Example:
spec:
app:
auth:
tls:
tlsVerificationType: all
truststoreSecretRef:
name: keycloak-ca-cert
key: ca.p12
truststorePasswordSecretRef:
name: keycloak-ca-cert
key: ca.password
Ingress configuration reference
The ingress section is available for both spec.app and spec.ui components.
IngressSpec
| Field | Description | Type | Default |
|---|---|---|---|
|
Whether the operator should manage an Ingress resource. Set to |
Boolean |
|
|
Hostname for the Ingress. If empty, the operator will not create an Ingress resource |
String |
|
|
IngressClass to use for the Ingress resource |
String |
None |
|
Additional annotations for the Ingress resource |
Map[String]String |
|
Example:
spec:
app:
ingress:
host: registry-api.example.com
ingressClassName: nginx
annotations:
nginx.org/proxy-connect-timeout: "30s"
ui:
ingress:
host: registry-ui.example.com
ingressClassName: nginx
annotations:
nginx.org/proxy-connect-timeout: "30s"
SecretKeyRef
Many configuration fields use SecretKeyRef to reference Kubernetes Secrets:
| Field | Description | Type | Default |
|---|---|---|---|
|
Name of the Secret |
String |
Required |
|
Key within the Secret containing the target data |
String |
Field-specific default (e.g., |
Example:
password:
name: db-credentials
key: db-password
For Developers
Java model classes for the ApicurioRegistry3 custom resource are available as a Maven artifact:
<dependency>
<groupId>io.apicurio</groupId>
<artifactId>apicurio-registry-operator-model</artifactId>
<version>3.1.0</version>
</dependency>
and can be used with the Fabric8 Kubernetes Client library to programmatically create and manage Apicurio Registry Operator resources.
-
For deployment examples, see Deploying Apicurio Registry using the Operator.
-
For Kubernetes PodTemplateSpec documentation, see https://kubernetes.io/docs/reference/kubernetes-api/workload-resources/pod-template-v1/#PodTemplateSpec
-
For Kubernetes EnvVar documentation, see https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#envvar-v1-core
-
You can also explore the Apicurio Registry Operator Java model source code in GitHub
