Хоёр сүлжээтэй контейнер буруу гарцыг сонгодог
Хоёр холболт, нэг анхдагч маршрут, буруу сүлжээ үргэлж ялдаг. Compose gw_priority-гоор гарын гарцыг тогтоож, контейнерын дотроос баталгаажуулна уу.
Таны контейнер өөрийн удирдлагын гүүрэн дээр хариу үйлдэл хийсээр байгаа ч гарч буй бүх пакет оффисын macvlan-аар гарч байна. Юу ч эвдэрээгүй. Хоёр холболт тус бүр өөрийн гарцыг өгдөг бөгөөд цорын ганц анхдагч маршрут таны санаагүй сүлжээ рүү явсан тул үйлчилгээ ажиллаж байхад түүний урсгал урт замаар явж байна. Хэн нэгэн анзаарах үед нотолгоо нь алдааны мэдээлэл биш, маршрутын хүснэгт байна.
Ердийн тайлбар нь Docker сүлжээг санамсаргүй сонгосон гэдэг. Бодит байдалд хуучин шийдвэр холбогдсон сүлжээний нэрсийн цагаан толгойн дарааллыг баримталдаг байсан бөгөөд энэ нь маршрутлалыг шошгоны хажуугийн үр дагавар болгосон. gw_priority үүнийг таны санаатайгаар сонгох тоогоор сольдог бөгөөд зохион байгуулалтыг бичиж дуусмагц шилжихэд ойролцоогоор нэг минут шаардагдана.
Анхдагч маршрут яагаад буруу сүлжээнд буудаг вэ
Үйлчилгээ нэгдэх бүр сүлжээ өөрийн гарцыг санал болгож болох ч контейнерт яг нэг анхдагч маршрут л үлддэг. Compose 2.33.1-ээс өмнө тэнцлийг сүлжээний нэрсийг эрэмбэлж шийддэг байсан тул control гэх мэт шошго office-өөс өмнө ирвэл урсгал хаашаа явахыг тэр шийддэг байв. Контейнерын дотор шийдвэр дур зоргоороо байсныг юу ч бүртгэдэггүй, тиймээс энэ нь кодын хяналтаас гарч, дараа нь хачин зам хэлбэрээр илэрдэг. Саясатыг compose файлд байрлуулах нь сонголтыг шалгаж болохуйц болгох цорын ганц арга юм.
Аль сүлжээ ялахыг үнэхээр хоёр зүйл өөрчилдөг: таны оноох gw_priority утгууд болон ямар сүлжээг ерөнхийдөө холбосон байдал. Гурав дахь сүлжээ нэмбэл нэр дэвшигчдийн багц өснө; macvlan-ыг хасвал гүүрэнтэй өрсөлдөх юу ч үлдэхгүй. Хоёр алхам ч програмын бүртгэлд харагдахгүй, учир нь буруу анхдагч маршрут холболтыг бүрэн таслах нь ховор. Энэ нь зөвхөн хариултууд нөгөө тал хүлээхгүй байж болох хаягаас ирэхэд хүргэдэг.
Гарцыг gw_priority-гоор тогтоо
Compose 2.33.1 хувилбараас эхлэн үйлчилгээ-сүлжээ холболт бүр дээр gw_priority-г ил гаргадаг бөгөөд хамгийн том тоо ялдаг. Үйлчилгээ тус бүрийн гарцын түлхүүр байхгүй тул утга нь үйлчилгээний networks блокт хамаарна. Доорх жишээ анхдагч маршрутыг control-д өгч, office нь шууд холбогдсон LAN-ынхаа хувьд хүрч болохоор үлдэнэ.
services:
vpn:
networks:
control:
gw_priority: 1
office:
gw_priority: 0
networks:
control:
driver: bridge
ipam:
config:
- subnet: 172.30.50.0/24
office:
driver: macvlan
driver_opts:
parent: eno1.120
macvlan_mode: bridge
ipam:
config:
- subnet: 192.168.120.0/24
ip_range: 192.168.120.192/27
gateway: 192.168.120.1
Блокийг хоёр тусдаа удирдлага гэж уншина уу: gw_priority анхдагч маршрутыг, ipam хэсэг нь хаяглалыг шийднэ. Зөвхөн subnet-ыг өөрчилбөл гарын гарцын сонголт хөндөгдөхгүй бөгөөд энэ засварыг хагаслан хэрэглэх хамгийн түгээмэл арга нь энэ юм. Дараагийн уншигч шийдвэрийг хайх шаардлагагүйн тулд эрэмбийг өөрсдөө удирддаг сүлжээнийхээ хажууд байлгаарай.
gw_priority-г хажууд байгаа энгийн priority шинжтэй андуурч болохгүй. Тэр нь холболт үүсэх дарааллыг тогтоодог бөгөөд маршрутлалын талаар юу ч хэлдэггүй, тиймээс анхдагч гарцыг сонгож чадахгүй, интерфэйсийн нэрийг ч засдаггүй. Хэрэв хэн нэгэн урсгалыг чиглүүлэхийн тулд priority-г өсгөхийг зөвлөвөл, үр дүнгийн дараалал санамсаргүй зөв харагдсан ч зөвлөгөө буруу юм.
Анхдагч маршрутыг үнэхээр аль сүлжээ зөөж байгааг шалга
Ажиллаж буй контейнерын дотор шалгана уу, учир нь хостны маршрутын хүснэгт хостыг дүрсэлдэг бөгөөд үйлчилгээний ашигладаг нэрийн орон зайг биш. Эхлээд конфигурацийн шалгалтыг ажиллуулж, бичгийн алдаа дахин эхлүүлэхээс өмнө илрэгтүн, дараа нь контейнерын үнэхээр суулгасан маршрутыг уншина уу.
docker compose config --quiet
docker exec vpn ip -4 route show default
docker exec vpn cat /proc/net/route
Зөв үр дүн гүүрний төхөөрөмж болон 172.30.50.1-ийг нэрлэнэ; буруу үр дүн 192.168.120.1 болон macvlan төхөөрөмжийг нэрлэнэ. Хэрэв образ дотор iproute2 багц байхгүй бол /proc файл анхдагч маршрутыг мэдээлсээр байх бөгөөд очих газар нь 00000000, гарцын байтууд эсрэгээрээ. Төхөөрөмжийн нэрс тодорхойгүй үед интерфэйсийн баганыг docker inspect-тэй харьцуулна уу.
Macvlan бол физик порт, гүүрний хуулбар биш
Macvlan контейнерт утсан дээр хоёр дахь таних тэмдэг өгдөг бөгөөд орон нутгийн төхөөрөмжид хандах боломжийг яг энэ нь бий болгодог. Энэ нь мөн сүлжээний порт болон хайпервайзор нэмэлт MAC хаяг хүлээн авах ёстойг илэрхийлдэг бөгөөд олон үүлэн сүлжээ үүнийг чимээгүй татгалздаг. Флот төлөвлөхөөс өмнө нэг контейнерыг туршиж үзээрэй, учир нь татгалзсан MAC нь ихэвчлэн дээшээ байгаа боловч юу ч дамжуулдаггүй холбоос хэлбэрээр илэрдэг.
macvlan_mode: bridge тохиргоо нь macvlan драйверын горим бөгөөд Docker-н програм хангамжийн гүүр биш, харин passthru нь анхдагч биш, тусдаа тусгай горим юм. Linux мөн macvlan контейнерийг өөрийн хостод хүрэхээс сэргийлдэг ижил эцэг эхийн замаар, тиймээс нэг холболт хоёр ажлыг хийх болно гэж хүлээхийн оронд удирдлагын гүүрийг үлдээдэг.
VLAN-ы эцэг эхийг Compose харахаас өмнө нэрлэ
Docker eno1.120 гэх мэт цэгтэй эцэг эхийг 802.1Q дэд интерфэйс гэж үзэж, VLAN төхөөрөмжийг өөрөө үүсгэдэг. Энэхүү тав тухыг хязгаарладаг зүйл бий: үүсмэл нэр нь физик интерфэйсийн нэрээс хамаардаг бөгөөд урт нэрс үр дүнг эргэн тойрны хэрэгслийн хүлээлтээс хэтэрүүлж болно. Хостын сүлжээний тохиргоонд нэртэй VLAN интерфэйс үүсгэж, parent-ыг түүн рүү чиглүүлбэл хоёр төгсгөл урьдчилан таамаглагдах болно.
networks-ийн доорх түлхүүр нь Compose-н нэр, Linux төхөөрөмж биш гэдгийг санаарай. Хост дээр office нэртэй интерфэйс хайх нь бүтэлгүйтнэ, учир нь цөм зөвхөн эцэг эх интерфэйс болон контейнерын ард байгаа veth хосыг л хардаг.
Дээр нь VPN-д зай гарга
VPN клиент эдгээр сүлжээ үүссэний дараа холбогддог тул gw_priority-гоос үл хамааран илүү тодорхой маршрут, бодлогын дүрэм, шүүлтүүр нэмж болно. Алсын префиксүүдийг хоёр орон нутгийн subnet-ийн эсрэг төлөвлөхдөө удирдлагын замд хэрэгтэй хариултуудыг оруулна уу. Алсын префикс оффисын LAN-тай давхцвал туннелээс бүхэлд нь хувийн хүрээг сугалж авахын оронд хаягийн төлөвлөгөөг засна уу.
VPN ажиллаж эхэлсний дараа болон дахин холбогдсоны дараа хаяг, маршрут, үйлчилгээний замыг дахин шалгана уу, учир нь гараар нэмсэн маршрут яг дахин холбогдох үед алга болдог. Эхний туршилтын өмнө хүлээгдэж буй хүснэгтийг бичиж үлдээгээрэй, дараагийн харьцуулалт ой санамжийн дасгал биш diff болно. Сүлжээний байнгын эзэмшлийг Compose-д үлдээж, VPN тохиргоо зөвхөн өөрийн бодлогыг эзэмшүүлээрэй.