-
Notifications
You must be signed in to change notification settings - Fork 8
feat: replace pod IP with DNS name for Patroni connectivity #103
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
Replace LISTEN_ADDR (pod IP) with POD_DNS_NAME (DNS FQDN) for Patroni
REST API and PostgreSQL connect addresses to enable stable addressing
across pod restarts.
Changes:
- Add POD_NAME, HEADLESS_SERVICE, and POD_DNS_NAME environment variables
to Patroni StatefulSet pods
- Create patroni-headless Service for DNS-based pod discovery
- Update patroni.config.yaml to use ${POD_DNS_NAME} for pod_ip,
connect_address (PostgreSQL), and connect_address (REST API)
- Register patroni-headless service creation in reconciler
Reasons:
- Pod IPs are ephemeral and change on restarts, causing connection issues
- DNS names (pod-name.service.namespace.svc.cluster.local) are stable
- Improves reliability of Patroni DCS registration and cluster communication
- Aligns with Kubernetes best practices for StatefulSet networking
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <[email protected]>
| role_label: pgtype | ||
| scope_label: app | ||
| pod_ip: ${LISTEN_ADDR} | ||
| pod_ip: ${POD_DNS_NAME} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
tbh, I'm not sure about this change
I've checked all patroni-related projects (spilo, postgres-operator from Zalando), and they are using pod status.podIP everywhere:
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
In my kubernetes environment, "pod ip" is like fd07:b51a:cc66:a::17f 192.168.194.10
How do you think it would work?
For instance, connect_address: ${LISTEN_ADDR}:8008 becomes connect_address: fd07:b51a:cc66:a::17f 192.168.194.10:8008 which is definitely not workable.
Both ChatGPT and Claude suggest stable pod dns names should be used for Patroni on Kubernetes.
E.g. https://chatgpt.com/share/68ecb326-44e4-800f-a125-a7a8cae96bd0
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@vlsi
first of all, could you please provide environment/confirmation when you have migrated previous version of podIp based version to headless dns name? Have you performed integrations tests there?
Then, what I'm worried about and need to double check: you've modified kubernetes.pod_ip that with use_endpoints: true is used for preparing subsets.addresses.ip on endpoints that must be IP I suppose.
https://github.com/patroni/patroni/blob/v4.1.0/patroni/dcs/kubernetes.py#L1122
That's my HL analysis and I'm sure that should work with dns names and has IP resolving, but that's why I cannot apply it w/o confirmation of correct upgrade case.
Please correct me If I'm wrong
Replace LISTEN_ADDR (pod IP) with POD_DNS_NAME (DNS FQDN) for Patroni REST API and PostgreSQL connect addresses to enable stable addressing across pod restarts.
Changes:
Reasons:
🤖 Generated with Claude Code