Document multi-node networking for SSL validation - #402
Open
yalegria wants to merge 1 commit into
Open
Conversation
|
Thank you for the pull request. ROADMAP STATUS: This pull request isn't currently on any roadmap. Updates will be conveyed here as its place on/off a roadmap changes. You can view the roadmaps here: Roadmaps Google Drive folder. For more information on how the roadmaps work, see our roadmaps policy on GitHub. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What?
Adds documentation describing a networking consideration for SSL certificate validation in multi-node Kubernetes clusters.
The new section explains that the HAProxy ingress controller and the temporary
certbotbot-httppod may be scheduled on different worker nodes. It documents the requirement for cross-node TCP port 80 connectivity, includes AWS EKS security-group guidance, and provides a command for testing connectivity from HAProxy to the Certbot pod.Why?
Certbot uses an HTTP-01 challenge served by the temporary
certbotbot-httppod on TCP port 80.In a multi-node cluster, HAProxy and the Certbot pod may run on different worker nodes. If the worker-node firewall or security group does not allow cross-node TCP port 80 traffic, HAProxy cannot reach the Certbot pod. This can cause the ACME challenge endpoint to return
503 Service Unavailableand certificate validation to fail.This behavior may not appear in a single-node cluster or when both pods happen to be scheduled on the same node, making the failure difficult to diagnose.
Examples
Observed before allowing cross-node TCP port 80 traffic:
Observed after allowing TCP port 80 between worker nodes:
The
404 Not Foundresponse is expected when using a test path that does not contain a valid ACME token. It confirms that HAProxy can reach nginx in the Certbot pod.After cross-node connectivity was enabled, Certbot completed SSL certificate validation successfully.
How to test
In a multi-node test cluster, start the Certbot certificate-validation resources.
Confirm that the HAProxy and
certbotbot-httppods are running on different nodes:While the Certbot pod is running, test connectivity from HAProxy to the Cerbot pod:
Verify that nginx returns an HTTP response. A
404 Not Foundresponse is expected for the test path.Run the certificate-validation process and verify that Certbot successfully creates the Kubernetes TLS Secret.
Documentation of functionality
The documentation is included in this pull request in
community-edition/readme.md.It is located under Considerations for Production Environment in the new Multi-node cluster networking and SSL validation section.
Limitations
This pull request only adds documentation. It does not modify Kubernetes manifests, AWS security groups, Terraform, or other infrastructure resources.
The AWS EKS guidance may not apply directly to clusters using another cloud provider, CNI implementation, firewall model, or security-groups-for-pods configuration. Those environments must provide equivalent cross-node connectivity using their platform-specific networking controls.
Alternative implementations considered
Allowing all traffic between worker nodes would also resolve this scenario, but it grants broader access than is required for the Certbot HTTP-01 solver.
The documentation instead recommends allowing TCP port 80 between worker nodes when required. It also recommends managing the rule through the infrastructure-as-code configuration used to build the cluster rather than relying on a manual change.
Open questions
None.
Additional details or related context
The issue was reproduced in a multi-node AWS EKS cluster using the Amazon VPC CNI.
Troubleshooting established the following:
0.0.0.0:80in the Certbot pod.1025-65535.