apache / apache/cloudstack

ControlNetworkGuru does not take into account custom CIDR when assigning System VM link local IP address

Aperta
#6,715 2 commenti 0 reazioni 0 assegnatari Vedi su GitHub
component:kvm component:networking no-issue-activity Severity:Minor status:needs-investigation status:stale
Lingua principale
Java
Stelle
3.1k
Fork
1.4k
Merge medio
6g 19h
PR unite (30g)
32

Descrizione

##### ISSUE TYPE
* Bug Report

##### COMPONENT NAME
~~~
Management, Network, SystemVM
~~~

##### CLOUDSTACK VERSION
~~~
4.16.1
~~~

##### CONFIGURATION
In database:
```
MariaDB [cloud]> select name,value from configuration where name = 'control.cidr';
+--------------+------------------+
| name | value |
+--------------+------------------+
| control.cidr | 169.254.240.0/20 |
+--------------+------------------+
MariaDB [cloud]> select name,value from configuration where name = 'control.gateway';
+-----------------+---------------+
| name | value |
+-----------------+---------------+
| control.gateway | 169.254.240.1 |
+-----------------+---------------+
MariaDB [cloud]> select count(*) from op_dc_link_local_ip_address_alloc;
+----------+
| count(*) |
+----------+
| 65533 |
+----------+
```
On agent:
```
root@hv-04-02-21:~# grep control.cidr /etc/cloudstack/agent/agent.properties
control.cidr=169.254.240.0/20
```

##### SUMMARY
When having set a `control.cidr` different from the norm (`168.254.0.0/16`) and the database table `op_dc_link_local_ip_address_alloc` is already populated with all the addresses in the default CIDR, then allocating an IP to a System VM does not take into account the requested CIDR, thus allocating an IP address in the wrong range.

https://github.com/apache/cloudstack/blob/main/engine/schema/src/main/java/com/cloud/dc/dao/DataCenterLinkLocalIpAddressDaoImpl.java#L52 should take this into account. This function is called in https://github.com/apache/cloudstack/blob/main/server/src/main/java/com/cloud/network/guru/ControlNetworkGuru.java#L134

##### STEPS TO REPRODUCE
- Install new management server
- After kickstart, disable the zone to prevent any system vm deploys
- In mysql database: `select count(*) from op_dc_link_local_ip_address_alloc;`, it would return `65533`
- Connect agents
- Configure `control.cidr` on the manager and agents, and `control.gateway` on the manager, ie:
```
control.cidr=169.254.240.0/20
control.gateway=169.254.240.1
```
- Enable the zone, check the system vm link local address

##### EXPECTED RESULTS
- The System VMs should receive an IP address in the configured CIDR.
- Additional expected: In mysql database: `select count(*) from op_dc_link_local_ip_address_alloc;`, it should return `4093`

##### ACTUAL RESULTS
- System VMs receive an IP address in the default `169.254.0.0/16` range
```
2022-09-07 22:45:35,338 DEBUG [o.a.c.e.o.NetworkOrchestrator] (Work-Job-Executor-3:ctx-b1c76634 job-149/job-150 ctx-224681ec) (logid:32608415) Network id=201 is already implemented
2022-09-07 22:45:35,524 DEBUG [c.c.n.g.ControlNetworkGuru] (Work-Job-Executor-3:ctx-b1c76634 job-149/job-150 ctx-224681ec) (logid:32608415) Reserved NIC for v-18-VM [ipv4:169.254.167.69 netmask:255.255.240.0 gateway:169.254.240.1]
```

Guida per i contributori

Apri la guida per i contributori

Direzione di ricerca

Iniziare da engine/schema/src/main/java/com/cloud/dc/dao/DataCenterLinkLocalIpAddressDaoImpl.java intorno alla riga 52, quindi seguire la relativa chiamata da server/src/main/java/com/cloud/network/guru/ControlNetworkGuru.java intorno alla riga 134. Riprodurre lo scenario con control.cidr configurato e verificare che gli indirizzi delle System VM e i conteggi di op_dc_link_local_ip_address_alloc utilizzino il CIDR configurato anziché l'intervallo predefinito.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
java, mariadb
Ambito
networking
Tipo di issue
Bug
Difficoltà
3/5
Tempo stimato
1-2 giorni
Stato di attività
Ferma
Chiarezza
Specificata chiaramente
Idoneità per principianti
35/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.