SRP refuses to start
Symptom: The container exits immediately at startup. Cause: A required setting is missing — SRP refuses to start without a valid license or an explicit authentication provider. Fix:- Set
CDK_LICENSEto a valid Conduktor Scale or Gateway license. Note that the license is only checked at startup: a running proxy keeps serving after its license expires, but the next restart fails. Alert on thelicense_expiry_timestamp_secondsmetric to catch this before a restart. - Set
AUTH_PROVIDERexplicitly — it has no default. - Review the startup logs: the error names the missing setting.
SRP not discovered by Console
Symptom: The SRP instance does not appear in the Console Schema Registry dropdown. Cause: Console is not receiving heartbeats from SRP. Fix:- Verify
CDK_SCHEMAREGISTRYPROXY_ENABLED=trueis set on Console. - Check that
KAFKA_HEARTBEAT_ENABLED=trueon SRP (this is the default). - Confirm SRP and Console connect to the same Kafka cluster.
- Verify the
_conduktor_srp_eventstopic exists and is accessible.
Permissions not applied
Symptom: Users receive authorization errors even after permissions are granted in Console. Cause: SRP is not consuming permission updates from Kafka. Fix:- Check that
AUTHORIZATION_MODE=reactiveon SRP (this is the default). Permissions granted in Console only apply in reactive mode. - Verify the
_conduktor_srp_commandstopic exists with the expected replication factor. - Confirm Console is connected to the same Kafka cluster as SRP.
- Review SRP logs for permission consumption messages.
Authentication failures
Symptom: Clients receive401 Unauthorized responses.
Cause: JWT token validation is failing.
Fix:
- Verify the JWKS endpoint is accessible from the SRP container.
- Confirm
JWT_SUBJECT_CLAIM_NAMEmatches the claim used in your tokens. - Check token expiration — set
JWT_VALIDATE_EXPIRATION=falsetemporarily to isolate the issue.
AUTH_PROVIDER=basic, also check that the credentials file is mounted at BASIC_AUTH_LOCATION (default /etc/srp/basic-auth.json, and it has to be an absolute path), that passwords are bcrypt hashes (plaintext is rejected unless BASIC_AUTH_ALLOW_PLAINTEXT=true) and that recently rotated credentials have had BASIC_AUTH_RELOAD_INTERVAL (default 30s) to be picked up. Note that 401 means authentication failed (bad or missing credentials), while 403 means the caller authenticated fine but the operation was denied by authorization.
Basic auth credential changes not picked up
Symptom: You edited the credentials file but the proxy keeps accepting the old passwords (or rejecting the new user), with no reload logged. Cause: The single credentials file is bind-mounted, so the container is bound to the file’s inode. Editors (vim, VS Code, IntelliJ),sed -i, mv and git checkout replace the file with a new inode — the container keeps reading the copy it started with.
Fix:
- Write the file in place (
cat new.json > basic-auth.jsonortee) instead of replacing it, or mount the parent directory (- ./conf:/etc/srp:ro) so the filename is re-resolved on every read. - Restart the proxy container to rebind the mount if the inode has already changed.
- Watch the
basic_auth_credentials_reload_total{result="failure"}metric: failures mean the file on disk and the credentials in force have drifted apart. A malformed file is never applied — the last good snapshot keeps serving until the file parses again.
Producer denied in topic ACL mode despite a WRITE ACL
Symptom: WithAUTHORIZATION_MODE=topic-acl, a producer registers schemas but gets 403 when fetching them.
Cause: In topic ACL mode, Write does not imply Read. Fetching schemas requires a READ (or ALL) ACL on the subject’s topic.
Fix: Grant the producer principal READ or ALL on the topic, or list the service account in AUTHORIZATION_SUPER_USERS if it is a break-glass identity.
Also check that the authenticated identity matches the Kafka ACL principal name: the proxy checks it as User:{name}, where {name} is the identity extracted by the authentication provider (for JWT, the JWT_SUBJECT_CLAIM_NAME claim).
Requests return 404 for admin endpoints
Symptom: Deletes,PUT/DELETE on /config or /mode, or /exporters calls return 404 through the proxy but work against the Schema Registry directly.
Cause: This is by design. SRP only proxies the endpoints application clients and read-only tooling use — administrative operations are not routed. For administrative work, use Conduktor Console, which connects to the Schema Registry directly.