Add Keycloak public ingress documentation #37
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "docs/keycloak-public-ingress"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
auth.palinks.apparchitecture for exposing Keycloak through the Hetzner edge proxy to public usersdeployment.mdto include auth domain in the infrastructure diagram and target domains tableChanges
docs/keycloak-public-ingress.md: new doc covering problem (KC_HOSTNAME blocks public auth), solution (remove KC_HOSTNAME, rely on X-Forwarded-Host), architecture diagrams, dual-access table, per-repo change list, and rollback proceduredocs/deployment.md: addedauth.palinks.appDNS record and Keycloak pod to end-to-end flow diagram; updated target domains table with auth domain and cross-referenceREADME.md: added Keycloak Public Ingress entry to documentation tableTest Plan
Review Checklist
Related Notes
godaddy-tofu— this repo's deployment and architecture docsPR #37 Review
DOMAIN REVIEW
Tech stack: Markdown documentation (Mermaid diagrams, HCL code examples, YAML config snippets). This is a docs-only PR -- no executable code changes. Domain review focuses on documentation quality, technical accuracy, and consistency with the existing codebase.
Documentation quality:
The new
docs/keycloak-public-ingress.mdis well-structured. It follows a clear problem-solution-architecture pattern, includes Mermaid sequence diagrams for both the broken state and the working state, and provides concrete per-repo change instructions with inline code samples.Technical accuracy checks:
Edge IP consistency -- The doc uses
178.156.129.142throughout, which matches the existingdeployment.mdMermaid diagram and thearchitecture.mdcontext. Consistent.Mermaid diagram updates to
deployment.md-- The diff addsDNS_AUTH,KC, and their connections in the correct places within the existinggraph TBstructure. The additions follow the existing naming conventions (DNS_PA,DNS_LA->DNS_AUTH;PALINKS,LANDSCAPING->KC). Clean.Target domains table update -- Status values changed from
First dogfood target/Second targettoLive/Live. This is a factual correction that reflects the current state (both domains are deployed and working). The newauth.palinks.appentry is added with statusLive. Good.HCL example in the new doc (
resource "godaddy_dns_record" "palinks_auth_a") correctly usesname = "auth"for the subdomain (notname = "@"which would be the apex). Thedomain,type,data, andttlfields match the existing patterns indeployment.mdexamples. Correct.Cross-repo references -- The doc references
pal-e-platformpaths (salt/pillar/caddy.sls,modules/keycloak/main.tf) andpal-e-servicesPR #119. These cannot be verified from this repo alone but are clearly documented for cross-referencing.Dual-access design table -- Accurately describes how removing
KC_HOSTNAMEand relying onKC_PROXY_HEADERS=xforwardedlets theHostheader drive issuer URL generation. This is correct Keycloak behavior for proxy-aware deployments.auth.palinks.appis a subdomain, not a separate domain -- Thedeployment.mdtarget domains table lists it alongsidepalinks.appandlandscaping-assistant.app. This is slightly misleading sinceauth.palinks.appis a subdomain ofpalinks.app, not a standalone domain registration. The table implies it is a peer entry. Minor, but worth noting. See nit below.README.md update -- Adds one row to the documentation table. The description (
auth.palinks.app -- shared public auth domain for Keycloak) is accurate and concise. Sorted correctly afterConventions.BLOCKERS
None.
This is a docs-only PR. No executable code is introduced, so the standard blockers (test coverage, input validation, secrets, auth DRY violations) do not apply. No secrets, credentials, or hardcoded API keys appear in the documentation -- the HCL examples use
module.hetzner_edge.server_ipv4(a Terraform reference) rather than a literal IP for the new record, which is correct practice.NITS
Target domains table: subdomain vs domain --
auth.palinks.appis a subdomain ofpalinks.app, not an independently registered domain like the other entries. Consider indenting or annotating it to make this relationship clear (e.g., a footnote, or listing it as a sub-entry underpalinks.app). As-is, the table implies all four entries are peer-level domain registrations.Rollback section uses
kubectldirectly -- The rollback procedure useskubectl -n keycloak set env deployment/keycloak KC_HOSTNAME=.... This is fine as emergency documentation, but it bypasses the GitOps workflow (the change would be reverted on next ArgoCD sync). Consider adding a note: "This is an emergency hotfix; for a permanent rollback, re-addKC_HOSTNAMEto the Terraform module and apply."Cross-reference in
deployment.md-- The added lineSee [Keycloak Public Ingress](keycloak-public-ingress.md)uses a relative path. This is correct for Markdown rendering in Forgejo, but it would be more consistent with the README pattern to also add a brief description:See [Keycloak Public Ingress](keycloak-public-ingress.md) for the auth domain architecture and dual-access design.(Wait -- the existing text already says "for the auth domain architecture." This is fine as-is.)Section "4. pal-e-services" says "Already done" -- If this is a documentation of the planned changes across repos, having a section that says "no changes needed" is slightly confusing. Consider removing it entirely or reframing as a "Verification" step rather than a "Changes Required" item. Alternatively, keep it to confirm that no work is needed -- both approaches are defensible.
SOP COMPLIANCE
docs/keycloak-public-ingressfollows convention)Closes #36linking to parent issuePROCESS OBSERVATIONS
VERDICT: APPROVED
All 4 nits addressed in
4401918:auth.palinks.appindented underpalinks.appin the target domains table with "(subdomain)" labelView command line instructions
Checkout
From your project repository, check out a new branch and test the changes.Merge
Merge the changes and update on Forgejo.Warning: The "Autodetect manual merge" setting is not enabled for this repository, you will have to mark this pull request as manually merged afterwards.