Skip to content

Management ip address resolution#13603

Open
EduFrazao wants to merge 2 commits into
apache:mainfrom
EduFrazao:management_ip_addr_resolution
Open

Management ip address resolution#13603
EduFrazao wants to merge 2 commits into
apache:mainfrom
EduFrazao:management_ip_addr_resolution

Conversation

@EduFrazao

Copy link
Copy Markdown

Description

This PR solves a situation when the management network interface does not have a defined IP address.
When this interface is a bridge, the management ip can be placed directly in the bridge (more common) and sometimes in virtual interfaces linked to it.
On this scenarios, the cloudstack agent iterates over all interfaces and select the first one with a valid ip address.
This brings unpredictable behavior, like choosing wrong interface address, and publishing this address to management servers, causing problems with migrations, guest consoles for example.

I've added two new ways to search for the correct management address:

  • First and more "secure" is to explicitly define the management ip address on agent.properties. The agent will find the interface bound to this address and configure it as private interface.
  • If configuring this address is not desirable, agent will get the management server addresses, and try to establish a socket (without tcp overhead) with it. If it suceeds, will possible to collect the source ip address used to reach management servers. I belive that this is a more assertive way to find out the host management address.
    If the above methods don't work, the actual behavior is used without changes.
  1. Setup a Full L3 network design, with management defined as a traffic label over a "virtual physical address".
  2. Create a bridge and setup a vxlan interface with this bridge as master interface.
  3. Define a veth interface and define the bridge as master for this interface too.
  4. Derfine in this veth interface, the IP address that will be used to reach the management servers.
  5. Theres no guarantee that this will be the IP address reported to the management server.

Fixes: #13519

Types of changes

  • Breaking change (fix or feature that would cause existing functionality to change)
  • New feature (non-breaking change which adds functionality)
  • Bug fix (non-breaking change which fixes an issue)
  • Enhancement (improves an existing feature and functionality)
  • Cleanup (Code refactoring and cleanup, that may add test cases)
  • Build/CI
  • Test (unit or integration test code)

Feature/Enhancement Scale or Bug Severity

Feature/Enhancement Scale

  • Major
  • Minor

Bug Severity

  • BLOCKER
  • Critical
  • Major
  • Minor
  • Trivial

Screenshots (if appropriate):

How Has This Been Tested?

I have two hipervisors in production with this changes. Whitout it, I can't make my cluster to work well, cause I can't do migrations and open guest instances terminal
To test it I used both the explicit configuration and route based detection for several days, marking servers for maintenance, rebooting hypervisors and management servers.

How did you try to break this feature and the system with this change?

Configuring an invalid Ip address as management address. The setting was ignored as expected, because no interface was found with it. System fallback to another methods.

 - By explicit definition of the management ip address on agent.properties
 - By using OS routing table to determine the source address used to connect to any of avaliable
   management servers.
 - Fallback to current methods.
@boring-cyborg

boring-cyborg Bot commented Jul 14, 2026

Copy link
Copy Markdown

Congratulations on your first Pull Request and welcome to the Apache CloudStack community! If you have any issues or are unsure about any anything please check our Contribution Guide (https://github.com/apache/cloudstack/blob/main/CONTRIBUTING.md)
Here are some useful points:

@DaanHoogland DaanHoogland left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

thanks @EduFrazao , clgtm.

return null;
}

protected void tryToAutoDiscoverResourcePrivateNetworkInterfaceByRouteLookup(Map<String, Object> params) throws ConfigurationException {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@EduFrazao , why make this protected (and not private)?

@DaanHoogland DaanHoogland added this to the 4.24.0 milestone Jul 20, 2026
@DaanHoogland

Copy link
Copy Markdown
Contributor

also @EduFrazao , I marked it for 24 as you based the PR off main. please rebase if you need it on 22.2 or somewhere else.

@codecov

codecov Bot commented Jul 20, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 3.44828% with 56 lines in your changes missing coverage. Please review.
✅ Project coverage is 19.49%. Comparing base (d2c8aa7) to head (0a2c926).
⚠️ Report is 83 commits behind head on main.

Files with missing lines Patch % Lines
...in/java/com/cloud/resource/ServerResourceBase.java 1.81% 54 Missing ⚠️
...ervisor/kvm/resource/LibvirtComputingResource.java 0.00% 2 Missing ⚠️
Additional details and impacted files
@@             Coverage Diff              @@
##               main   #13603      +/-   ##
============================================
+ Coverage     18.93%   19.49%   +0.56%     
- Complexity    18471    19438     +967     
============================================
  Files          6221     6303      +82     
  Lines        560045   569345    +9300     
  Branches      68289    69804    +1515     
============================================
+ Hits         106048   111021    +4973     
- Misses       442372   446169    +3797     
- Partials      11625    12155     +530     
Flag Coverage Δ
uitests 3.41% <ø> (-0.09%) ⬇️
unittests 20.77% <3.44%> (+0.62%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

HVM Agent selects wrong address for private_ip_address

2 participants