6 minutes reading time
ô kê mình trở lại rồi đây, dù thật ra chả ai có vẻ sẽ quan tâm đâu. Rồi, để hiểu rõ docker dưới góc độ một lập trình viên chúng ta không thể bỏ qua phần docker networking. Về cơ bản nó không khó, vì sau đây mình sẽ nói qua một số kiến thức nền về network áp dụng thẳng vào đây là môi trường linux. Vì docker chạy trên linux. Dĩ nhiên rồi. Đầu tiên nói qua một chút, networking là một mảng tổng quan khá lớn và khá quan trọng, mình trân thành khuyên anh em học qua networking vì nó tối cần thiết cho một người muốn làm chủ hệ thống.
Đầu tiên, các hệ thống máy tính cá nhân của các bạn. Windows, linux distro cơ bản đều đã thiết lập sẵn một số thông số cho việc truy cập mạng vì vậy user bình thường về cơ bản không cần quan tâm quá nhiều tới networking. Hồi bé mình biết set ip tĩnh với dns thôi mà mình đã gáy vang cả tiểu khu rồi. Tất nhiên là ở đây chúng ta sẽ nói tới nó ở một tầng cao hơn một chút.
Rồi. Các đối tượng chính (dưới dạng networking linux command đại khái là lệnh trong linux).
Client
Switching
Routing
DNS Đối tượng command
Ip-link – network device configuration Về cơ bản các mô hình dưới đây là mô hình tối giản và thiếu rất nhiều module mạng.
Rồi, đầu tiên là client chính là các máy cá nhân của các bạn. Hãy hiểu rõ client ở đây là cả ở dạng thực và ảo, một máy nguyên bộ Dell hay Hp của các bạn bản thân là một môi trường đầy đủ. Tất nhiên nếu bạn tạo máy ảo bên trong nó thì máy ảo cũng tính là một client và đầy đủ điều kiện của một thiết bị mạng.


Vậy câu hỏi là nếu 2 máy muốn giao tiếp với nhau thì làm thế nào. Ở đây chúng ta sẽ bỏ qua một số loại thiết bị khác mà chỉ chú trọng vào switch và switch trong linux. Chúng ta dùng switch để giao tiếp, tất nhiên rồi.
Dưới dây là một network gồm 2 máy nối với nhau bởi switch, ip của 2 máy gán tĩnh dải 10.1.1.x . khi và chỉ khi cùng dải thì chúng ta mới giao tiếp qua đơn đối tượng switch. Đây là concept network switch cơ bản!
–
OK. Trong trường hợp cụ thể này, vật đảm nhiệm làm switch trực tiếp chính là một máy linux nên chúng ta sẽ dùng bộ lệnh ip-link.
Giả định net-interface tên là : eth0 Vậy lệnh chúng ta cần phải dùng là : ip addr add 10.1.1.1/24 dev eth0
vậy là chúng ta đã khai báo thiết bị ip : 10.1.1.1 dải mạng subnet 24 với tên interface là eth0 vào thiết bị.
Tiếp tục khai báo thiết bị thứ 2 với các thông số gần như tương đương. Vậy lệnh chúng ta cần phải dùng là : ip addr add 10.1.1.2/24 dev eth0
Sau khi hoàn thành các bước trên máy của bạn có thể giao tiếp với nhau với một switch linux.
–
III. Routing
Bài toán mở rộng hơn chút. Thế nếu máy chúng ta giao tiếp ở khác dải mạng thì sao?? Lúc này thứ chúng ta cần là một Router.
Như cũ đây là một mô hình mạng có router


–
Như cũ đảm nhiệm router ở đây là linux.
khi này bạn dùng lệnh route để kiểm tra các kết nối router.

Ta cho cổng 1 router ip:1.1.1.3 – cổng 2 router ip:1.1.2.3
Để mạng từ khu vực switch 2 kết nối sang khu vực switch 1.
ip route add 1.1.2.0/24 via 1.1.1.3
Như vậy mạng từ khu 2 có thể kết nối khu 1. Tương tự.
ip route add 1.1.1.0/24 via 1.1.2.3
–
Vậy gateway 0.0.0.0 là gì? 0.0.0.0 là default hay nói cách khác là all các ip kết nối. Đây là lý do tại sao trong các thiết lập cơ bản chúng ta chỉ trỏ về default-gateway và không cần quan tâm thêm về network. Đơn giản là bạn đã mở cổng với mọi mạng trong lưới router.
Lưu ý: cần phải set ip-forwarding linux để dùng làm cổng trung chuyển mạng. Cái này cần lưu ý vì sau khi tới các mạng lớn như k8s bạn có thể gặp phải.
IV. DNS
DNS ai cũng biết rồi. Đại khái là Linux có hệ thống file host riêng để gán domain name cho ip cũng tương tự như các bạn sửa file host máy windows thôi.
Docker cũng có một hệ thống dns build-in gán bằng name của các container khởi chạy. Cái này sẽ biểu hiện rõ ràng nhất khi chạy các môi trường microservices. Thôi để sau triển khai docker-compose nhìn cho nó rõ.