ECMP verso un solo VTEP: da dove viene l'entropia di VXLAN
Un VTEP remoto può avere più salti successivi a pari costo, ma un /32 non li rende utili. La distribuzione dipende dalla tupla esterna e dall'hash della porta sorgente.
L'affermazione che il multipath a pari costo sia inutile per una rotta di host viene ripetuta abbastanza spesso da sembrare vera. Un /32 seleziona un indirizzo di destinazione, e nulla in quella selezione vincola il pacchetto a un solo collegamento fisico. Quando la destinazione è un'estremità remota di tunnel VXLAN, più salti successivi possono trasportare flussi overlay diversi, e se lo fanno dipende da ciò che all'hash di inoltro è permesso vedere. Il resto è aritmetica sull'intestazione esterna, non una proprietà del prefisso.
La rotta decide la raggiungibilità; l'hash decide la distribuzione.
Il mito: un /32 significa un solo percorso
OSPF può annunciare raggiungibilità a pari costo verso un loopback VTEP mentre la tabella di inoltro installa un gruppo di salti successivi per lo stesso prefisso. Il protocollo fornisce i candidati; la piattaforma decide quali sono utilizzabili e come viene assegnato un pacchetto. Nessun protocollo di routing calcola un nuovo hash per ogni frame incapsulato. È questa separazione a spiegare perché due router con rotte identiche possano comunque distribuire il traffico in modo diverso.
Guardate la voce di inoltro installata e non solo la visualizzazione della rotta, perché limiti hardware o di policy possono scartare candidati che il piano di controllo annuncia ancora.
Da dove deve venire l'entropia
Tra due VTEP gli indirizzi esterni di sorgente e destinazione restano fissi, e la porta di destinazione UDP è 4789 in una distribuzione convenzionale. Un hash che legge solo quei valori vede un input costante e restituisce un percorso costante. Qualcosa nell'intestazione esterna deve variare, e il VTEP è il dispositivo che può farla variare.
RFC 7348 propone di derivare la porta sorgente UDP da campi all'interno del frame incapsulato. Conversazioni interne diverse producono allora tuple esterne diverse, il che dà a un normale hash di trasporto qualcosa su cui lavorare.
Se l'hardware di inoltro può guardare più a fondo nel pacchetto, verificate quali campi interni supporta la sua implementazione dell'hash. Quella profondità non va considerata un requisito per ogni dispositivo di underlay, dato che la sola variazione della porta sorgente espone già differenze utili.
Verificate l'hash che ottenete davvero
Misurate invece di supporre. Catturate un campione di traffico incapsulato e osservate le porte sorgente esterne, poi confrontate il risultato con le voci di inoltro e i contatori per collegamento.
show ip route 10.255.0.5/32 show ip cef 10.255.0.5 internal ip route show 10.255.0.5 tcpdump -ni eth0 -c 200 'udp port 4789' -vv
Una sola porta sorgente che compare in molte conversazioni interne diverse significa che il VTEP non varia il campo, e nessuna messa a punto dell'underlay distribuirà il carico. Molte porte distinte con un solo salto successivo in uso indicano invece il gruppo di inoltro.
Registrate i contatori prima e dopo il campione, e notate il traffico non correlato che condivide gli uplink, altrimenti i numeri sembreranno peggiori di quanto l'hash meriti.
Che cosa non significa una distribuzione uniforme
Un hash per flusso è progettato per mantenere una conversazione su un solo percorso finché i suoi input e l'insieme di percorsi disponibile restano invariati. Un singolo trasferimento TCP grande non aggrega quindi tutti gli uplink, e aggiungere collegamenti non accelererà quel flusso. È un comportamento normale, non un guasto.
Più flussi possono anche scontrarsi per caso sullo stesso salto successivo. Un campione breve può sembrare molto sbilanciato mentre l'hash fa esattamente ciò per cui è stato configurato, e un guasto di collegamento o un cambiamento dell'insieme di percorsi può spostare flussi stabili a metà trasferimento.
Provate con coppie di indirizzi, trasporti e velocità rappresentativi secondo un piano approvato, e tenete la selezione dei membri di aggregazione dei collegamenti separata da quella del multipath instradato, perché due stadi di hashing compongono un proprio schema. Un gruppo di salti successivi popolato più entropia esterna visibile spiegano il risultato; la lunghezza del prefisso no.