Hướng dẫn cấu hình tường lửa Linux cho Docker Swarm trên Ubuntu 16.04

4 năm trước

 

Giới thiệu

Docker Swarm là một tính năng của Docker giúp dễ dàng chạy các host và container Docker trên quy mô lớn. Một Docker Swarm, hoặc Docker cluster, được tạo thành từ một hoặc nhiều máy chủ Dockerized có chức năng như quản lý, và bất kỳ số lượng các node worker. Thiết lập một hệ thống như vậy đòi hỏi phải thao tác cẩn thận tường lửa Linux.

Cổng mạng được yêu cầu để chạy Docker Swarm là:

  • TCP port 2376 cho việc bảo mật giao tiếp của các  Docker client. Cổng này được yêu cầu để chạy Docker Machine. Docker Machine được dùng để bố trí các host Docker. 
  • TCP port 2377.  Cổng này được dùng để giao tiếp giữa các node của Docker Swarm hay cluster. Ta chỉ cần nó để mở các node quản lí.
  • TCP và UDP port 7946 cho việc giao tiếp giữa các node (container network discovery).
  • UDP port 4789 cho việc chồng các lưu lượng mạng (container ingress networking). 

Lưu ý: Bên cạnh những cổng trên, cổng22 ( cho SSH) và bất cứ cổng nào cần cho việc chạy các dịch vụ cụ thể trên cluster phải để mở.

 Trong bài viết này, bạn sẽ tìm hiểu cách cấu hình tường lửa Linux trên Ubuntu 16.04 bằng cách sử dụng các ứng dụng quản lý tường lửa khác nhau có sẵn trên tất cả các bản phân phối Linux. Những ứng dụng quản lý tường lửa đó là FirewallD, IPTables Tools và UFW, Uncomplicated Firewall. UFW là ứng dụng tường lửa mặc định trên các bản phân phối Ubuntu, bao gồm cả Ubuntu 16.04. Vì hướng dẫn này bao gồm ba phương pháp ,và mỗi phương pháp đều mang lại kết quả tương tự nên bạn có thể chọn kết quả bạn quen thuộc nhất

 

Điều kiện cần 

Trước khi thực hiện bài hướng dẫn này bạn nên:

  • Cài đặt các máy chủ tạo cluster của bạn, bao gồm ít nhất một swarm manager và một swarm worker.

Lưu ý: Bạn phải lưu ý rằng các command( và tất cả các command trong bài hướng dẫn này) không được thêm tiền tốsudo. Bạn phải làm vậy vì nó cho rằng bạn đăng nhập vào server sử dụng command docker-machine ssh csau khi cho phép nó sử dụng Docker Machine

 

Cách 1 — Mở các cổng Docker Swarm sử dụng UFW

Nếu bạn đã cài đặt các host Docker thì UFW đã được cài đặt. Bạn chỉ cần mở và cấu hình chi nó.

Chạy các command sau trên các node có vai trò là Swarm manager:

$ ufw allow 22/tcp 
$ ufw allow 2376/tcp 
$ ufw allow 2377/tcp 
$ ufw allow 7946/tcp 
$ ufw allow 7946/udp 
$ ufw allow 4789/udp 

Sau đó, reload UFW:

$ ufw reload 

Nếu UFW không được mở, dùng command sau:

$ ufw enable 

Cái này có thể không cần thiết nhưng nó không bao giờ gây hại để khởi động lại daemon Docker bất cứ lúc nào bạn thay đổi vào khởi động lại tường lửa.

systemctl restart docker

Sau đó trên mỗi node hoạt động như một worker, chạy command sau:

$ ufw allow 22/tcp 
$ ufw allow 2376/tcp 
$ ufw allow 7946/tcp $ ufw allow 7946/udp $ ufw allow 4789/udp 

Sau đó, reload UFW:

$ ufw reload 

Nếu UFW không chạy, kích hoạt nó:

$ ufw enable 

Sau đó khởi động lại daemon Docker:

systemctl restart docker

Đó là tất cả những gì bạn cần để mở các cổng cần thiết cho Docker Swarm dùng UFW.

 

Cách 2 — Mở các cổng Docker Swarm dùng FirewallD

FirewallD là ứng dụng tường lửa mặc định trên Fedora, CentOS và các bản phân phối Linux khác dựa trên chúng. Nhưng FirewallD cũng có sẵn trên các bản phân phối Linux khác, bao gồm cả Ubuntu 16.04

Nếu bạn chọn dùng Firewall ID thay vì UFW thì đầu tiên hãy bỏ cài đặt UFW: $apt-get purge ufw

Sau đó cài đặt FirewallD:

$ apt-get install firewalld 

Xác minh rằng nó đang chạy:

$ systemctl status firewalld 

Nếu nó không chạy, khởi động nó:

$ systemctl start firewalld 

Sau đó mở nó để nó chạy trên boot:

$ systemctl enable firewalld 

Trên node sẽ là Swarm manager, dùng các command sau để mở các cổng cần thiết:

$ firewall-cmd --add-port=22/tcp --permanent $ firewall-cmd --add-port=2376/tcp --permanent $ firewall-cmd --add-port=2377/tcp --permanent $ firewall-cmd --add-port=7946/tcp --permanent $ firewall-cmd --add-port=7946/udp --permanent $ firewall-cmd --add-port=4789/udp --permanent 

Lưu ý:Nếu bạn mắc lỗi và cần xoá cái vừa nhập, gõ: firewall-cmd --remove-port=port-number/tcp —permanent

Sau đó load lại tường lửa:

$ firewall-cmd --reload 

Sau đó khởi động lại Docker:

$ systemctl restart docker 

Trên mỗi node sẽ hoạt động như Swarm worker, dùng command sau:

$ firewall-cmd --add-port=22/tcp --permanent $ firewall-cmd --add-port=2376/tcp --permanent $ firewall-cmd --add-port=7946/tcp --permanent $ firewall-cmd --add-port=7946/udp --permanent $ firewall-cmd --add-port=4789/udp --permanent 

Sau đó load lại tường lửa:

$ firewall-cmd --reload 

Sau đó khởi động lại Docker.

systemctl restart docker

Bạn đã sử dụng FirewallD thành công để mở các cổng cần thiết cho Docker Swarm.

 

Cách 3 — Opening Docker Swarm Ports Using IPTables

Để sử dụng các IPtables trên bất kỳ bản phân phối Linux nào, trước tiên bạn sẽ phải gỡ cài đặt bất kỳ tiện ích tường lửa nào khác. Nếu bạn đang chuyển từ FirewallD hoặc UFW, trước tiên hãy gỡ cài đặt chúng

Sau đó cài đặt gói iptables-persistent quản lí việc load tự động của IPtables.

$ apt-get install iptables-persistent 

Tiếp theo xoá mọi quy tắc hiện có với command này:

$ netfilter-persistent flush 

Bây giờ bạn có thể thêm các quy tắc sử dụng tính năng iptables. Tập command đầu tiên này nên được xử lí trên các node đóng vai trò là các Swarm manager .

$ iptables -A INPUT -p tcp --dport 22 -j ACCEPT $ iptables -A INPUT -p tcp --dport 2376 -j ACCEPT $ iptables -A INPUT -p tcp --dport 2377 -j ACCEPT $ iptables -A INPUT -p tcp --dport 7946 -j ACCEPT $ iptables -A INPUT -p udp --dport 7946 -j ACCEPT $ iptables -A INPUT -p udp --dport 4789 -j ACCEPT 

Sau khi bạn nhập tất cả các command trên, lưu các quy tắc tới các ổ đĩa:

$ netfilter-persistent save 

Sau đó khởi động lại Docker.

$ sudo systemctl restart docker 

Trên các node với vai trò là Swarm worker, dùng các command sau:

$ iptables -A INPUT -p tcp --dport 22 -j ACCEPT $ iptables -A INPUT -p tcp --dport 2376 -j ACCEPT $ iptables -A INPUT -p tcp --dport 7946 -j ACCEPT $ iptables -A INPUT -p udp --dport 7946 -j ACCEPT $ iptables -A INPUT -p udp --dport 4789 -j ACCEPT 

Lưu các quy tắc mới tới ổ đĩa:

$ netfilter-persistent save 

Sau đó khởi động lại Docker:

$ sudo systemctl restart docker 

Đó là tất cả những gì cần để mở các cổng cần thiết cho Docker Swarm sử dụng IPtables.

Nếu bạn muốn thay đổi sang FirewallD hay UFW sau khi dùng cách này thì cách thích hợp nhất là chặn tường lửa:

$ sudo netfilter-persistent stop 

Sau đó xoá các quy tắc:

$ sudo netfilter-persistent flush 

Sau đó lưu các tables trống tới ở đĩa:

$ sudo netfilter-persistent save 

Sau đó bạn có thể đổi sangUFW hoặc FirewallD.

 

Kết luận

FirewallD, IPTables Tools và UFW là ba ứng dụng quản lý tường lửa trong thế giới Linux. Bạn chỉ cần học cách sử dụng từng cổng để mở các cổng mạng cần thiết để thiết lập Docker Swarm. Phương pháp nào bạn sử dụng chỉ là vấn đề sở thích cá nhân, vì chúng đều có khả năng như nhau.