Am două interfețe, să zicem eth0
și eth0.4000
ca vlan.
Ambele au un gateway implicit.
Totul funcționează conform așteptărilor atunci când un proces ascultă direct pe interfață.
Dar nu pentru hostPort
legături de Kubernetes.
vlan.gw-mac > eth0-mac, ethertype 802.1Q (0x8100), lungime 78: vlan 4000, p 0, ethertype IPv4 (0x0800), clientIP.38712 > vlanIP.80: Flags [S]
eth0-mac > eth0.gw-mac, ethertype IPv4 (0x0800), lungime 74: vlanIP.80 > clientIP.38712: Flags [S.]
SYN vine de la vlan.gateway
, este redirecționat către Container, dar răspunsul SYN-ACK părăsește stiva eth0.gw
si nu cea corecta vlan.gw
dar tcpdump arată că IP-ul sursă este vlanIP
.
Tabelele de rutare arată bine:
# ip route ajunge la <clientIP> de la <vlanIP> dev eth0.4000
<clientIP> de la <vlanIP> prin <vlan.gw> dev eth0.4000 table 1 uid 0
Maparea hostPort este creată prin Portmap CNI-Plugin care folosește DNAT și SNAT (detalii legate). Deci, căutarea gateway-ului se întâmplă devreme.
Când adaug manual o rută de la container-ip la tabelul de căutare 1, funcționează folosind interfața vlan, dar întrerupe eth0.
Deci întrebările sunt - ce trebuie făcut pentru ca rutarea să aibă loc după NAT a înlocuit container-ip-ul cu interfață-ip?