infra: override default route when running in a netns#627
Open
rjarry wants to merge 1 commit into
Open
Conversation
This comment was marked as resolved.
This comment was marked as resolved.
When grout runs inside a k8s pod, the default route installed by k8s has priority over grout's own default route (which uses metric UINT32_MAX). This causes TCP connections to fail over grout. When the environment variable GROUT_OVERRIDE_DEFAULT_ROUTE is set to a truthy value (1, true, on, yes), install the default route with metric 0 and NLM_F_REPLACE to take over the existing one. Set the variable in the default systemd environment file (which runs with PrivateNetwork=true), in the container quadlet and in the Containerfile. Signed-off-by: Robin Jarry <rjarry@redhat.com>
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.
When grout runs inside a k8s pod, the default route installed by k8s has priority over grout's own default route (which uses metric UINT32_MAX). This causes TCP connections to fail over grout.
When the environment variable GROUT_OVERRIDE_DEFAULT_ROUTE is set to a truthy value (1, true, on, yes), install the default route with metric 0 and NLM_F_REPLACE to take over the existing one. Set the variable in the default systemd environment file (which runs with PrivateNetwork=true), in the container quadlet and in the Containerfile.
Link: #625
Overview
Adds an explicit override mechanism for the default route driven by a new configuration flag (gr_config.override_default_route) and the GROUT_OVERRIDE_DEFAULT_ROUTE environment variable. When enabled, grout will install default routes into the main routing table using NLM_F_REPLACE and without the high-priority metric so the installed default takes precedence over existing defaults (useful for container/netns deployments).
Changes
main/config.h
main/main.c
modules/infra/control/netlink.c
Documentation and defaults