Folosesc docker cu macvlan, unde fiecare dintre containerele mele are propria conexiune L2 cu adresa MAC și IP. De asemenea, trebuie să garantez că containerele ajung la gazdă și invers. Pot realiza asta în acest moment, folosind netplan și un script pentru a șterge unele rute, dar vreau ca ajutorul tău să înțeleagă dacă pot face acest lucru folosind netplan.
Configurația mea este aceasta:
Script batch pentru a crea interfața macvlan (nu este încă acceptată pe netplan)
#! /bin/bash
#! link ip adăugați link macvlan vlan10 tip macvlan mode bridge
Interfața vlan10 este creată cu configurația netplan
01-netcfg.yaml
reţea:
versiunea: 2
redator: în rețea
ethernet:
eno1:
dhcp4: da
dhcp6: da
adrese:
- aaaa:bbbb:cccc:1::11/64
vlans:
vlan10:
id: 10
link: eno1
dhcp4: nu
dhcp6: nu
adrese:
- 192.168.10.11/24
- aaaa:bbbb:cccc:10::11/64
Acest lucru asigură că interfața VLAN creată doar pentru docker este creată și disponibilă.
20-docker.yaml
reţea:
versiunea: 2
redator: în rețea
ethernet:
macvlan:
dhcp4: nu
dhcp6: nu
adrese:
- 192.168.10.5/24
- aaaa:bbbb:cccc:10::5/64
Aș recunoaște că poate acesta nu este cel mai eficient mod de a configura soluția de care am nevoie, dar funcționează și în acest fel evit să creez scripturi care să fie rulate la repornire folosind cron.
Traseele se despart
Acum că am creat interfețele, când acestea sunt în funcțiune, sunt create automat un set de rute, chiar și eu nu le definesc poarta de acces4 și poarta de acces6 directive și definiți netplat pentru a ignora rutele implicite DHCP. Dar, în ciuda acestui fapt, aceste rute pentru IPv4 și IPv6 sunt create automat, ceea ce evită să ajungă la containere în rețeaua vlan10 din cauza limitării driverelor de rețea docker prin proiectare.
Rute IPv4 pentru noile interfețe
192.168.10.0/24 dev vlan10 proto kernel scope link src 192.168.10.11
192.168.10.0/24 dev macvlan proto kernel scope link src 192.168.10.5
192.168.10.0/24 prin 192.168.10.5 dev macvlan proto static metric 100
192.168.10.0/24 prin 192.168.10.11 dev vlan10 proto metric static 150
Rute IPv6 pentru noile interfețe
aaaa:bbbb:cccc:10::/64 dev vlan10 proto kernel metric 256 pref mediu
aaaa:bbbb:cccc:10::/64 dev macvlan proto kernel metric 256 pref mediu
Pentru ca soluția mea să funcționeze, ar trebui să șterg manual (sau să folosesc un script de boot bash) pentru a șterge rutele nucleului de mai sus pentru dispozitivul vlan10 în IPv4 și IPv6. Făcând această sarcină, pot restabili comunicarea gazdă-container.
Există o modalitate de a îmbunătăți această soluție și de a evita crearea acelor rute sau o comandă pentru a ignora acea rută specifică de care nu am nevoie pe acea interfață specială pentru a garanta că îmi folosesc soluția în netplan?
Expertiza și disponibilitatea dumneavoastră sunt foarte apreciate. Mulțumesc
** 20.10.2021 - Editați după comentarii și teste suplimentare**
După mai multe revizuiri, testare și învățare, am trecut la următoarele modificări care mi-au rezolvat problemele și au permis gazdei mele să contacteze containerele din interior macvlan
interfață.
01-netcfg.yaml
reţea:
versiunea: 2
redator: în rețea
ethernet:
eno1:
dhcp4: da
dhcp6: da
adrese:
- aaaa:bbbb:cccc:dddd:192:168:1:11/64
vlans:
vlan10:
id: 10
link: eno1
dhcp4: nu
dhcp6: nu
adrese:
- 192.168.10.11/32
- aaaa:bbbb:cccc:10::11/128
link-local: []
S-au schimbat măștile de subrețea IPv4 și IPv8 la /32 și, respectiv, /128. Acest lucru a creat regulile adecvate și a făcut gazda mea să restabilească comunicațiile cu rețeaua mea de containere Docker. Include, de asemenea, `link-local: []´ pentru a evita ca această interfață să creeze o legătură IP locală care ar putea interfera.
20-docker.yaml
reţea:
versiunea: 2
redator: în rețea
ethernet:
macvlan:
dhcp4: nu
dhcp6: nu
adrese:
- 192.168.10.5/24
- aaaa:bbbb:cccc:10::5/64
Cu această configurație, aș putea restabili comunicațiile între gazdă și containere, pentru IPv4 și IPv6 și pot evita scripturile externe pentru a elimina rute sau a declara anumite rute:
și politici de rutare:
directive în netplan.
Sper că acest lucru îi ajută pe alții cu probleme similare. Mulțumiri