Tôi sử dụng docker với macvlan trong đó mỗi vùng chứa của tôi có kết nối L2 riêng với địa chỉ MAC và IP. Tôi cũng cần đảm bảo rằng các vùng chứa tiếp cận với máy chủ và ngược lại. Tôi có thể đạt được điều đó vào lúc này bằng cách sử dụng netplan và tập lệnh để xóa một số tuyến đường, nhưng muốn bạn trợ giúp để hiểu liệu tôi có thể thực hiện được bằng netplan hay không.
Cấu hình của tôi là cái này:
Batch script tạo giao diện macvlan (chưa hỗ trợ trên netplan)
#! /bin/bash
#! liên kết ip thêm liên kết macvlan vlan10 loại cầu chế độ macvlan
giao diện vlan10 được tạo bằng cấu hình netplan
01-netcfg.yaml
mạng:
phiên bản: 2
trình kết xuất: mạng
ethernet:
en1:
dhcp4: có
dhcp6: có
địa chỉ:
- aaaa:bbbb:cccc:1::11/64
vlan:
vlan10:
mã số: 10
liên kết: eno1
dhcp4: không
dhcp6: không
địa chỉ:
- 192.168.10.11/24
- aaaa:bbbb:cccc:10::11/64
Điều này đảm bảo rằng giao diện Vlan được tạo chỉ dành cho docker được tạo và khả dụng.
20-docker.yaml
mạng:
phiên bản: 2
trình kết xuất: mạng
ethernet:
macvlan:
dhcp4: không
dhcp6: không
địa chỉ:
- 192.168.10.5/24
- aaaa:bbbb:cccc:10::5/64
Tôi thừa nhận rằng có thể đây không phải là cách hiệu quả nhất để thiết lập giải pháp mà tôi yêu cầu, nhưng nó hoạt động và theo cách này, tôi tránh tạo tập lệnh để chạy khi khởi động lại bằng cron.
Phần tuyến đường
Bây giờ tôi đã tạo các giao diện, khi chúng được thiết lập, một bộ các tuyến đường sẽ được tạo tự động, thậm chí tôi không xác định cổng4 và cổng6 và xác định netplat để bỏ qua các tuyến mặc định của DHCP. Nhưng bất chấp điều đó, các tuyến đường này, dành cho IPv4 và IPv6 được tạo tự động để tránh tiếp cận các vùng chứa trong mạng vlan10 do giới hạn trình điều khiển mạng docker theo thiết kế.
Các tuyến IPv4 cho các giao diện mới
192.168.10.0/24 dev vlan10 liên kết phạm vi kernel proto src 192.168.10.11
192.168.10.0/24 dev macvlan liên kết phạm vi kernel proto src 192.168.10.5
192.168.10.0/24 qua 192.168.10.5 dev macvlan số liệu tĩnh proto 100
192.168.10.0/24 qua 192.168.10.11 dev vlan10 chỉ số tĩnh nguyên mẫu 150
Các tuyến IPv6 cho các giao diện mới
aaaa:bbbb:cccc:10::/64 dev vlan10 proto kernel metric 256 pref medium
aaaa:bbbb:cccc:10::/64 dev macvlan proto kernel metric 256 pref medium
Để giải pháp của tôi hoạt động, tôi cần xóa thủ công (hoặc sử dụng tập lệnh bash khởi động) để xóa các tuyến nhân ở trên cho thiết bị vlan10 trong IPv4 và IPv6. Bằng cách thực hiện nhiệm vụ đó, tôi có thể khôi phục giao tiếp giữa máy chủ và vùng chứa.
Có cách nào để cải thiện giải pháp này và tránh tạo các tuyến đó hoặc lệnh bỏ qua tuyến cụ thể mà tôi không cần trên giao diện cụ thể đó để đảm bảo sử dụng giải pháp của mình trong netplan không?
Chuyên môn và sự sẵn có của bạn được đánh giá rất cao. Cảm ơn bạn
** 20/10/2021 - Chỉnh sửa sau khi nhận xét và thử nghiệm thêm**
Sau khi xem xét, thử nghiệm và học hỏi thêm, tôi đã tiến hành những thay đổi sau đây để giải quyết vấn đề của mình và cho phép máy chủ của tôi tiếp cận với các thùng chứa bên trong macvlan
giao diện.
01-netcfg.yaml
mạng:
phiên bản: 2
trình kết xuất: mạng
ethernet:
en1:
dhcp4: có
dhcp6: có
địa chỉ:
- aaaa:bbbb:cccc:dddd:192:168:1:11/64
vlan:
vlan10:
mã số: 10
liên kết: eno1
dhcp4: không
dhcp6: không
địa chỉ:
- 192.168.10.11/32
- aaaa:bbbb:cccc:10::11/128
liên kết cục bộ: []
Đã thay đổi mặt nạ mạng con IPv4 và IPv8 thành /32 và /128 tương ứng. Điều này đã tạo ra các quy tắc phù hợp và làm cho máy chủ lưu trữ của tôi khôi phục lại giao tiếp với mạng bộ chứa docker của tôi. Cũng bao gồm `link-local: []´ để tránh giao diện này tạo IP cục bộ liên kết có thể can thiệp.
20-docker.yaml
mạng:
phiên bản: 2
trình kết xuất: mạng
ethernet:
macvlan:
dhcp4: không
dhcp6: không
địa chỉ:
- 192.168.10.5/24
- aaaa:bbbb:cccc:10::5/64
Với cấu hình này, tôi có thể khôi phục giao tiếp giữa máy chủ và bộ chứa, cho IPv4 và IPv6 và tránh các tập lệnh bên ngoài xóa tuyến hoặc khai báo cụ thể tuyến đường:
và chính sách định tuyến:
chỉ thị trong netplan.
Hy vọng điều này sẽ giúp những người khác với các vấn đề tương tự. Cảm ơn