Version 10.x.x of the Data Space Connector contains a major change to the Keycloak deployment and to the OID4VCI realm model. They will be listed below, together with required actions for migration.
The two drivers of this release are:
- The Bitnami Keycloak Helm chart was withdrawn, so the umbrella now depends on the CloudPirates Keycloak chart. The CloudPirates chart targets the upstream Quarkus image (
quay.io/keycloak/keycloak) and exposes a differentvalues.yamlshape than Bitnami's, so the entirekeycloak:configuration block must be rewritten. - Keycloak 26.4 redesigned OID4VCI (keycloak/keycloak#39768). The realm-attribute scheme
vc.<name>.*and thecomponents.CredentialBuilderblock are gone; per-credential configuration moved toClientScopeattributes on scopes withprotocol: "oid4vc", and several mapper config keys were renamed or removed. The DSC chart'srealm.verifiableCredentialsAPI has been adjusted accordingly.
| Removed (9.x) | New (10.x) |
|---|---|
Chart oci://registry-1.docker.io/bitnamicharts/keycloak 25.2.0 |
Chart oci://registry-1.docker.io/cloudpirates/keycloak 0.21.4 |
Image bitnamilegacy/keycloak |
Image quay.io/keycloak/keycloak:26.6.2 (upstream Quarkus) |
Realm import path /opt/bitnami/keycloak/data/import |
Realm import path /opt/keycloak/data/import |
Bitnami helper env vars (KEYCLOAK_EXTRA_ARGS, …) |
Native CLI flags via keycloak.extraArgs and feature flags |
The CloudPirates chart does not honour any Bitnami-only key. Apply the renames in the next section to your keycloak: value override and remove the keys listed afterwards.
| Removed (9.x) | New location (10.x) |
|---|---|
keycloak.auth.adminUser |
keycloak.keycloak.adminUser |
keycloak.auth.existingSecret |
keycloak.keycloak.existingSecret |
keycloak.auth.passwordSecretKey |
keycloak.keycloak.secretKeys.adminPasswordKey |
keycloak.proxyHeaders |
keycloak.keycloak.proxyHeaders |
keycloak.service.ports.http |
keycloak.service.httpPort |
keycloak.postgresql.enabled |
keycloak.postgres.enabled |
keycloak.externalDatabase.host |
keycloak.database.host |
keycloak.externalDatabase.database |
keycloak.database.name |
keycloak.externalDatabase.user |
keycloak.database.username |
keycloak.externalDatabase.existingSecret |
keycloak.database.existingSecret |
keycloak.externalDatabase.existingSecretPasswordKey |
keycloak.database.secretKeys.passwordKey |
keycloak.initContainers |
keycloak.extraInitContainers |
keycloak.ingress.hostname |
keycloak.ingress.hosts[0].host |
keycloak.ingress.extraTls |
merged into keycloak.ingress.tls (single list) |
keycloak.ingress.pathType |
keycloak.ingress.hosts[0].paths[0].pathType |
If your external Postgres secret carries the username under a key other than db-username (for instance the Zalando postgres-operator writes username), you also need:
keycloak:
database:
secretKeys:
usernameKey: usernameThe following keys are no longer valid and must be removed:
keycloak.kubeVersion
keycloak.global.security.allowInsecureImages
keycloak.image.repository # default is keycloak/keycloak; override only if you really need a custom image
keycloak.containerSecurityContext.enabled
keycloak.proxy # use keycloak.keycloak.proxyHeaders + TLS terminated at the ingress
keycloak.service.extraPorts # the management/health port is exposed via metrics.enabled (see below)
keycloak.extraEnvVars:
- KEYCLOAK_EXTRA_ARGS # Bitnami-only; the umbrella adds --import-realm via realm.import: true
- KC_FEATURES # use keycloak.features.enabled instead
- KC_HEALTH_ENABLED # auto-enabled by any active probe
- KC_ADMIN_PASSWORD # handled by keycloak.keycloak.existingSecret
The CloudPirates chart does not expose port 9000 on the main Service. With metrics.enabled: true (the umbrella default in 10.x) it is published on a separate Service named <release>-keycloak-metrics:9000.
If you maintain a wait-for-keycloak initContainer or any custom probe targeting <release>-keycloak:9000/health/ready, change the host to <release>-keycloak-metrics:9000.
KC 26.4+ rejects calls to /protocol/oid4vc/create-credential-offer whose bearer token is issued to a client without oid4vci.enabled=true. Many wallet flows authenticate the user via the built-in account-console client; the umbrella therefore declares the attribute on that client by default:
keycloak:
realm:
defaultClients:
account-console:
attributes:
oid4vci.enabled: "true"If you override defaultClients, preserve this attribute.
The realm-attribute scheme realm.attributes vc.<name>.* and the components.CredentialBuilder block are no longer recognised by KC 26.4+. Per-credential configuration is now declared once in realm.verifiableCredentials.<name>; the DSC chart renders one ClientScope per entry with protocol: "oid4vc" and the attributes attached to the scope itself.
Before (9.x):
keycloak:
realm:
attributes: |
"vc.user-credential.format": "jwt_vc",
"vc.user-credential.scope": "UserCredential",
"vc.user-credential.vct": "UserCredential",
"vc.user-credential.credential_signing_alg_values_supported": "ES256"
credentialBuilder:
jwt-vc-builder:
id: jwt-vc-builder
name: jwt_vcAfter (10.x):
keycloak:
realm:
verifiableCredentials:
user-credential:
attributes:
format: "jwt_vc_json"
verifiable_credential_type: "UserCredential"
credential_signing_alg: "ES256"
credential_build_config.token_jws_type: "JWT"
protocolMappers:
- name: context-mapper
protocol: oid4vc
protocolMapper: oid4vc-context-mapper
config:
context: https://www.w3.org/2018/credentials/v1
- name: email-mapper
protocol: oid4vc
protocolMapper: oid4vc-user-attribute-mapper
config:
claim.name: email
userAttribute: emailThe key under verifiableCredentials (user-credential above) is the ClientScope name — i.e. the value the wallet sends as credential_configuration_id. The realm-level realm.credentialBuilder: block is removed entirely (in KC 26.4+ credential builders are loaded via SPI service-loader, not declared per realm).
| Format | 9.x value | 10.x value |
|---|---|---|
| SD-JWT VC | vc+sd-jwt |
dc+sd-jwt |
| JWT-VC JSON | jwt_vc |
jwt_vc_json |
The source of truth is core/src/main/java/org/keycloak/VCFormat.java in the Keycloak repository. The same rename applies wherever the format string appears: verifiableCredentials.<name>.attributes.format, DCQL queries (realm.verifiableCredentials.<name>.protocolMappers configs that reference a format, and any DCQL configuration in decentralizedIam.vcAuthentication.credentials-config-service.registration.services[].oidcScopes.*.dcql.credentials[].format).
The DSC _realm.tpl template fills in two ClientScope attributes when they are not set explicitly:
vc.issuer_did— derived fromelsi.didifelsi.enabled: true, else fromkeycloak.issuerDid, else${DID}. Sets theissclaim of every issued JWT VC.vc.supported_credential_types— defaults to the value ofvc.verifiable_credential_type. Drives thetypearray of JWT-VC JSON credentials and the metadatacredential_definition.type. Override it explicitly underattributesif you need a different value than the SD-JWTvct.
| Mapper | Old key (9.x) | New key (10.x) |
|---|---|---|
| every mapper | supportedCredentialTypes |
(removed; mapper membership is structural per scope) |
oid4vc-user-attribute-mapper, oid4vc-target-role-mapper, oid4vc-static-claim-mapper, oid4vc-generated-id-mapper, oid4vc-issued-at-time-claim-mapper |
subjectProperty |
claim.name |
oid4vc-subject-id-mapper |
subjectIdProperty |
claim.name (plus userAttribute) |
oid4vc-vc-type-mapper |
(whole mapper) | deprecated; set the scope attribute vc.verifiable_credential_type instead |
A mapper that previously listed several credential types in supportedCredentialTypes must now be declared once under each VC entry it should apply to. The mapper name must be unique within a single VC's protocolMappers list — suffixing the name with the VC key (-uc, -lpc, -oc, …) makes greps easier.
oid4vc-target-role-mapper mappers with the same claim.name in the same scope. Pick one target per VC, or use distinct claim names — but be aware that downstream verifiers (FIWARE vcverifier, ODRL/OPA in this chart) look for credentialSubject.roles[*].target by default, so deviating from the roles claim name requires a matching policy update.
KC 26.4+ enforces a "red list" of standard claims that must not be undisclosed in a SD-JWT VC: iss, iat, nbf, exp, cnf, vct, status (source: core/src/main/java/org/keycloak/sdjwt/DisclosureRedList.java).
If you override verifiableCredentials.<name>.attributes.credential_build_config.sd_jwt.visible_claims, include those seven names alongside your domain-specific ones, otherwise issuance fails with IllegalArgumentException: UndisclosedClaims contains red listed claim names.
keycloak:
realm:
verifiableCredentials:
user-sd:
attributes:
format: "dc+sd-jwt"
verifiable_credential_type: "LegalPersonCredential"
credential_build_config.sd_jwt.visible_claims: "iss,iat,nbf,exp,cnf,vct,status,roles,email"KC main has split the original experimental OID4VCI feature flag into one base flag plus two sub-features. All three must be enabled for the DSC's issuance flow to work:
keycloak:
features:
enabled:
- oid4vc-vci
- oid4vc-vci-preauth-code # KC 26.4+: gates the pre-authorized_code grant
- oid4vc-vci-rest-credential-offer # KC main / SEAMWARE 26.6.2: gates /create-credential-offerWithout oid4vc-vci-rest-credential-offer, Keycloak answers any call to
/protocol/oid4vc/create-credential-offer with
403 invalid_client: "REST credential offer functionality is not enabled".
The flag is defined in Profile.Feature.OID4VC_VCI_REST_CREDENTIAL_OFFER
and is consumed by OID4VCIssuerEndpoint.checkRestCredentialOfferEnabled. It
landed in upstream main together with the OID4VCI QR-generation fix and is
present in the patched quay.io/seamware/keycloak:26.6.2 image shipped by the
umbrella, even though vanilla 26.6.2 does not carry it.
The umbrella ships these three defaults out of the box.
If you have custom code that talks to the Keycloak OID4VCI endpoints, update it as follows:
| Step | Old (KC 26.3) | New (KC 26.4 → 26.6.2) | Newer (KC main / SEAMWARE-patched 26.6.2) |
|---|---|---|---|
| Request offer URI | GET /protocol/oid4vc/credential-offer-uri?credential_configuration_id=X |
GET /protocol/oid4vc/create-credential-offer?credential_configuration_id=X&pre_authorized=true |
same |
| Build offer URL | ${issuer}${nonce} |
${issuer}/${nonce} |
same |
/credential body |
{"credential_identifier":"X","format":"jwt_vc"} |
{"credential_configuration_id":"X"} |
{"credential_identifier":"<id-from-token-response>"} |
/credential response |
{"credential":"<jwt>"} |
{"credentials":[{"credential":"<jwt>"}]} |
same |
credential_identifier source |
n/a (anything accepted) | n/a | must come from the authorization_details[].credential_identifiers array returned by /token after exchanging the pre-authorized code |
The pre_authorized query parameter on /create-credential-offer defaults to false, so it must be set explicitly to obtain the pre-authorized_code grant. The format field of /credential is no longer accepted as input — format selection happens by picking a credential_configuration_id whose configured vc.format matches what the caller expects.
credential_identifier flow (keycloak/keycloak#47404)
The patched 26.6.2 image arrives with the upstream rule that /credential only accepts a credential_identifier, never a credential_configuration_id. The identifier is short-lived and bound to the issued access token:
- Wallet exchanges the pre-authorized code at
/token. /tokenresponse contains:"authorization_details": [{ "type": "openid_credential", "credential_configuration_id": "user-credential", "credential_identifiers": ["user-credential_0000"] }]
- Wallet POSTs
/credentialwith{"credential_identifier": "user-credential_0000"}.
Sending the legacy {"credential_configuration_id": "..."} body against this image returns 400 invalid_credential_request: "Credential must be requested by credential identifier from authorization_details: [...]".
The IT framework's Wallet.java was updated accordingly: it reads authorization_details off the TokenResponse model and falls back to the previous credential_configuration_id-based body when the field is absent, so it still works against older Keycloak versions.
KC 26.4+ rejects user→client role assignments where the client itself does not declare the role. The realm import attempts to auto-create the missing role and, if multiple users assign it in the same batch, fails with duplicate key violates unique constraint.
For every clientRoles.<clientId>: [...] you set on a user, declare the same role under realm.clientRoles.<clientId>. The consumer.yaml and provider.yaml example overlays in this repository show the consistent shape (REPRESENTATIVE declared on did:web:mp-operations.org, seller/admin declared on did:web:fancy-marketplace.biz).
KC main (carried by the SEAMWARE-patched 26.6.2 image — see
keycloak/keycloak@6ef5a79)
ties /create-credential-offer to a per-user verifiableCredentials list.
A user that has not been explicitly granted a credential gets:
400 invalid_credential_offer_request
"User 'X' does not have verifiable credential 'Y'."
even with a valid token and a properly configured ClientScope.
In the realm import JSON the list lives on each user entry:
{
"username": "employee",
"verifiableCredentials": [
{ "credentialScopeName": "user-credential" },
{ "credentialScopeName": "operator-credential" }
]
}Either set this list per user, or set the chart flag below to have the
umbrella auto-assign every VC declared in the realm to every user
that has not provided its own verifiableCredentials:
keycloak:
realm:
wallets:
issueCredentialsToUsers: truewallets.enabled does not need to be true for this to work — the
two flags are independent. The local k3s overlays (k3s/consumer.yaml,
k3s/provider.yaml) ship with issueCredentialsToUsers: true so the
example deployment works out of the box; in production you usually want
to declare the per-user lists explicitly instead.
Keycloak 26.6.2 implements OID4VCI Draft 15.
The 26.4 redesign (keycloak/keycloak#39768) explicitly aligned the
credential issuance flow with Draft 15: CredentialSubject was removed from CredentialDefinition, the format
field was dropped from CredentialRequest, the metadata endpoint claims structure was rewritten and the cwt proof
type was removed.
Practical implications already covered above (see Endpoint changes for custom wallets / scripts, OID4VCI realm model rewrite and Format strings rename):
/credentialrequest: sendcredential_configuration_id(noformat); response is{"credentials":[…]}./credential-offer-uriis replaced by/create-credential-offer?pre_authorized=true.- Format strings updated:
jwt_vc→jwt_vc_json,vc+sd-jwt→dc+sd-jwt.
If you maintain a custom wallet or test harness, target Draft 15 endpoints and payloads.
The chart includes an opinionated wallet preset (off by default) that registers the OIDC clients required by the
wallets validated against this release. The preset only configures clients — it does not declare any
credential type; that remains the deployer's job under keycloak.realm.verifiableCredentials.
| Wallet | Platform | Tested version | Default clientId |
OIDC requirements | Recommended for |
|---|---|---|---|---|---|
| Lissi ID Wallet | iOS | 3.1.3 | 9c481dc3-2ad0-4fe0-881d-c32ad02fe0fc |
PKCE S256 | Production |
| Lissi ID Wallet | Android | 3.1.1 | 9c481dc3-2ad0-4fe0-881d-c32ad02fe0fc |
PKCE S256 | Production |
| EUDI Reference Wallet (forked .DEV build — app + lib) | iOS | — | wallet-dev |
PAR + DPoP + PKCE S256 | Development / local testing |
Lissi is the recommended wallet for production deployments.
EUDI Reference Wallet — fork required. The upstream EUDI iOS app/lib does not yet implement the OID4VCI Draft 15 model that Keycloak 26.6.2 ships, so it cannot complete an issuance flow against the DSC's Keycloak out of the box. The forks linked above carry two changes that make them usable for local DSC development:
- The credential issuance flow is updated to the Draft 15 endpoints/payloads documented in Endpoint changes for custom wallets / scripts above.
- They accept self-signed TLS certificates, which is what makes them usable against a k3s cluster with
cert-managerissuing self-signed certs.Do not use the forked EUDI build in production — its self-signed-cert handling defeats the trust model. It is intended exclusively as a developer-side tool for local data space testing.
The clientId values match what each wallet looks for in the realm — override only if the wallet vendor rotates them.
The defaults are defined at charts/data-space-connector/values.yaml under keycloak.realm.wallets.lissi and
keycloak.realm.wallets.eudi.
Enabling the preset:
keycloak:
realm:
wallets:
enabled: true
# Optional: auto-assign every realm-declared verifiableCredentials entry to every
# user that does not declare its own list. Useful for smoke tests, off by default.
issueCredentialsToUsers: falseOverride any leaf without redefining the whole client, for example:
keycloak:
realm:
wallets:
enabled: true
lissi:
clientId: <your-rotated-lissi-id>Wallets that are not in this list are not blocked — any wallet that speaks OID4VCI Draft 15 and either PKCE S256 or
PAR+DPoP+PKCE S256 can be wired up by declaring the corresponding OIDC client manually in keycloak.realm.clients.
- Apply the value renames in the table above to your
keycloak:block; remove the listed obsolete keys. - Rewrite each entry under
keycloak.realm.attributesof the formvc.<name>.*as akeycloak.realm.verifiableCredentials.<name>block withattributesandprotocolMappers. Drop thekeycloak.realm.credentialBuilder:block entirely. - Update format strings:
vc+sd-jwt→dc+sd-jwt,jwt_vc→jwt_vc_json, both in the realm config and in any DCQL queries you maintain. - If you override
keycloak.realm.defaultClients, preserveaccount-console.attributes.oid4vci.enabled: "true". - Add
oid4vc-vci-preauth-codetokeycloak.features.enabled. - Update any custom
wait-for-keycloakprobe to target<release>-keycloak-metrics:9000. - Validate locally with
helm template charts/data-space-connector -f your-values.yamland a one-offkc.sh import --dir=/opt/keycloak/data/importagainst a 26.6.2 pod before redeploying. - Rerun your integration tests; confirm both consumer and provider Keycloaks reach
Listening on http://0.0.0.0:8080and that VC issuance flows complete.
For a worked end-to-end example, see the migrated k3s/consumer.yaml and k3s/provider.yaml overlays shipped with this release; the oid4vc-protocol-mappers.md reference now documents the 26.6.2 mapper API.
10.2.0 adds optional in-cluster Grafana Tempo trace storage and Grafana dashboard support, building on the OpenTelemetry tracing infrastructure introduced in 10.1.0. The integration is fully opt-in — no existing values are modified or removed.
| Subchart | Chart | Version | Repository |
|---|---|---|---|
tempo |
grafana/tempo |
1.24.4 |
https://grafana.github.io/helm-charts |
grafana |
grafana/grafana |
10.5.15 |
https://grafana.github.io/helm-charts |
Both are disabled by default and gated by tempo.enabled / grafana.enabled.
When tracing.enabled=true and tempo.enabled=true, the chart renders a custom OTEL Collector ConfigMap (otel-collector-config-cm.yaml) that automatically injects an otlp/tempo exporter targeting the in-cluster Tempo gRPC endpoint. No manual Collector configuration is required — the existing opentelemetry-collector.config values are used as a base and the Tempo exporter is appended at render time.
When tempo.enabled=false, the ConfigMap renders the Collector configuration as-is (identical behaviour to 10.1.0).
When both grafana.enabled=true and tempo.enabled=true, the chart renders a datasource ConfigMap (grafana-tempo-datasource-cm.yaml) labelled grafana_datasource: "1". The Grafana sidecar picks it up automatically and registers Tempo as the default datasource. Operators can browse traces in the Grafana Explore view immediately after deployment.
tracing:
enabled: true
tempo:
enabled: true
grafana:
enabled: trueThis deploys: workloads with OTEL instrumentation → OTEL Collector → Grafana Tempo → Grafana dashboard. No additional configuration is needed for a working development/test setup.
| Key | Type | Default | Description |
|---|---|---|---|
tempo.enabled |
bool | false |
Toggle the bundled Grafana Tempo subchart |
tempo.tempo.retention |
string | "48h" |
Trace retention period |
tempo.tempo.receivers.otlp.protocols.grpc.endpoint |
string | "0.0.0.0:4317" |
OTLP gRPC listen address |
tempo.tempo.receivers.otlp.protocols.http.endpoint |
string | "0.0.0.0:4318" |
OTLP HTTP listen address |
tempo.tempo.storage.trace.backend |
string | "local" |
Storage backend (local, s3, gcs, azure) |
tempo.resources |
map | cpu: 100m–500m, mem: 256Mi–1Gi |
Tempo pod resources |
grafana.enabled |
bool | false |
Toggle the bundled Grafana subchart |
grafana.adminPassword |
string | "admin" |
Grafana admin password (override in production) |
grafana.sidecar.datasources.enabled |
bool | true |
Enable sidecar for auto-provisioning datasources |
grafana.sidecar.datasources.label |
string | "grafana_datasource" |
Label the sidecar watches on ConfigMaps |
grafana.persistence.enabled |
bool | false |
Enable persistent storage for Grafana |
grafana.resources |
map | cpu: 100m–500m, mem: 128Mi–512Mi |
Grafana pod resources |
| File | Purpose |
|---|---|
templates/otel-collector-config-cm.yaml |
Custom Collector ConfigMap with auto-injected Tempo exporter |
templates/grafana-tempo-datasource-cm.yaml |
Grafana datasource ConfigMap for Tempo |
| File | Purpose |
|---|---|
tests/tempo_test.yaml |
Helm-unittest suite covering Collector ConfigMap and Grafana datasource rendering |
| Helper | Returns |
|---|---|
dsc.tempo.endpoint |
http://<release>-tempo:4317 (Tempo OTLP gRPC endpoint for the Collector) |
dsc.tempo.queryEndpoint |
http://<release>-tempo:3200 (Tempo HTTP API endpoint for Grafana) |
Full documentation including architecture diagrams, quick-start guide, external Tempo usage, production considerations, and troubleshooting is available at Distributed Tracing with OpenTelemetry.
This release is fully additive. All new subcharts default to enabled: false. Existing tracing behaviour from 10.1.0 is unchanged when Tempo and Grafana are not enabled.
10.1.0 adds optional end-to-end distributed tracing across the FIWARE Data Space Connector using OpenTelemetry. All first-party workloads (IdentityHub, fdsc-edc) and third-party subcharts that support native OTEL configuration (Keycloak, Scorpio, tm-forum-api, contract-management, marketplace) can export traces through the OTLP protocol to any compatible backend (Jaeger, Grafana Tempo, Honeycomb, etc.).
An optional OpenTelemetry Collector subchart is included for in-cluster trace aggregation and routing.
Set tracing.enabled: true to inject OTEL_* environment variables into all supported workloads and enable the OpenTelemetry Java agent for IdentityHub:
tracing:
enabled: true
exporter:
otlp:
endpoint: "" # defaults to the bundled collector
protocol: "grpc" # or "http/protobuf"
insecure: true
sampler: "parentbased_traceidratio"
samplerArg: "1.0"
propagators: "tracecontext,baggage"
resourceAttributes: {}
opentelemetry-collector:
enabled: trueEach component can override the global tracing toggle independently via its own tracing.enabled key:
identityhub:
tracing:
enabled: true # override global toggle
serviceName: "my-identityhub"
javaagent:
enabled: true # attach the OTEL Java agent via init container
fdsc-edc:
tracing:
serviceName: "my-fdsc-edc"
scorpio:
tracing:
serviceName: "scorpio"
keycloak:
tracing:
serviceName: "keycloak"Components wired for tracing:
| Component | Mechanism | Default service name |
|---|---|---|
| IdentityHub | OTEL Java agent (init container) + OTEL_* env vars |
identityhub |
| fdsc-edc | OTEL_* env vars via values.yaml |
fdsc-edc |
| Keycloak | OTEL_* env vars via subchart extraEnvVars |
keycloak |
| Scorpio | QUARKUS_OTEL_* env vars via subchart extraEnvVars |
scorpio |
| tm-forum-api | OTEL_* env vars via subchart additionalEnvVars |
tm-forum-api |
| contract-management | OTEL_* env vars via subchart deployment.additionalEnvVars |
contract-management |
| marketplace | OTEL_* env vars via subchart (logic-proxy) extraEnvVars |
marketplace |
| decentralizedIam | Forward-compatible passthrough (no runtime effect yet) | — |
The following top-level values.yaml keys are introduced:
| Key | Type | Default | Description |
|---|---|---|---|
tracing.enabled |
bool | false |
Global on/off switch for OTEL tracing |
tracing.exporter.otlp.endpoint |
string | "" |
OTLP endpoint (defaults to bundled collector) |
tracing.exporter.otlp.protocol |
string | "grpc" |
OTLP protocol (grpc or http/protobuf) |
tracing.exporter.otlp.insecure |
bool | true |
Disable TLS on the OTLP exporter |
tracing.sampler |
string | "parentbased_traceidratio" |
Trace sampler name |
tracing.samplerArg |
string | "1.0" |
Sampler argument (probability for ratio samplers) |
tracing.resourceAttributes |
map | {} |
Extra resource attributes for all workloads |
tracing.propagators |
string | "tracecontext,baggage" |
Propagators to use |
opentelemetry-collector.enabled |
bool | false |
Toggle the bundled OTEL Collector subchart |
identityhub.tracing.enabled |
bool | — | Per-component tracing override |
identityhub.tracing.serviceName |
string | "identityhub" |
OTEL service name for IdentityHub |
identityhub.tracing.javaagent.enabled |
bool | true |
Attach the OTEL Java agent via init container |
No existing values keys are modified or removed. Tracing is fully additive and opt-in.
Full documentation including architecture diagrams, backend integration examples, and troubleshooting is available at Distributed Tracing with OpenTelemetry.