Chủ Nhật, 01/02/2015 | 00:00 GMT+7

Hệ sinh thái Docker: Mạng và Truyền thông

Khi xây dựng hệ thống phân tán để phục vụ Docker container, giao tiếp và mạng trở nên cực kỳ quan trọng. Không thể phủ nhận, kiến trúc hướng dịch vụ chủ yếu dựa vào giao tiếp giữa các thành phần để hoạt động chính xác.

Trong hướng dẫn này, ta sẽ thảo luận về các chiến lược và công cụ kết nối mạng khác nhau được sử dụng để biến các mạng được sử dụng bởi containers thành trạng thái mong muốn của chúng. Một số tình huống có thể tận dụng các giải pháp Docker-native, trong khi những tình huống khác phải sử dụng các dự án thay thế.

Triển khai mạng Docker root

Bản thân Docker cung cấp nhiều nguyên tắc cơ bản về mạng cần thiết cho giao tiếp giữa containers với containers và containers với server .

Khi bản thân quá trình Docker được đưa lên, nó sẽ cấu hình một giao diện cầu ảo mới có tên là docker0 trên hệ thống server . Giao diện này cho phép Docker phân bổ một mạng con ảo để sử dụng giữa các containers mà nó sẽ chạy. Cầu nối sẽ đóng role là điểm giao tiếp chính giữa mạng trong containers và mạng trên server .

Khi một containers được khởi động bởi Docker, một giao diện ảo mới được tạo và cấp một địa chỉ trong phạm vi mạng con của cầu nối. Địa chỉ IP được nối với mạng nội bộ của containers , cung cấp cho mạng của containers một đường dẫn đến cầu nối docker0 trên hệ thống server . Docker tự động cấu hình các luật iptables để cho phép chuyển tiếp và cấu hình NAT giả mạo cho lưu lượng truy cập bắt nguồn từ docker0 dành cho thế giới bên ngoài.

Làm thế nào để Container tiếp xúc với người tiêu dùng?

Các containers khác trên cùng một server có thể truy cập các dịch vụ do hàng xóm của chúng cung cấp mà không cần bất kỳ cấu hình bổ sung nào. Hệ thống server sẽ chỉ định tuyến các yêu cầu bắt nguồn từ và định hướng cho giao diện docker0 đến vị trí thích hợp.

Các container có thể hiển thị các cổng của chúng với server , nơi chúng có thể nhận được lưu lượng truy cập được chuyển tiếp từ thế giới bên ngoài. Các cổng tiếp xúc có thể được ánh xạ tới hệ thống server , bằng cách chọn một cổng cụ thể hoặc cho phép Docker chọn một cổng ngẫu nhiên, cao, không sử dụng. Docker quan tâm đến mọi luật chuyển tiếp và cấu hình iptables để định tuyến chính xác các gói trong những trường hợp này.

Sự khác biệt giữa Phơi bày và Xuất bản một Cổng là gì?

Khi tạo containers images hoặc chạy containers , bạn có tùy chọn để hiển thị các cổng hoặc xuất bản các cổng. Sự khác biệt giữa cả hai là đáng kể, nhưng có thể không nhận ra ngay lập tức.

Để lộ một cổng đơn giản nghĩa là Docker sẽ lưu ý cổng được đề cập được sử dụng bởi containers . Điều này sau đó được dùng cho mục đích khám phá và liên kết. Ví dụ, việc kiểm tra một container sẽ cung cấp cho bạn thông tin về các cổng bị lộ. Khi các containers được liên kết, các biến môi trường sẽ được cài đặt trong containers mới cho biết các cổng được tiếp xúc trên containers ban đầu.

Theo mặc định, các containers sẽ có thể truy cập được đối với hệ thống server và bất kỳ containers nào khác trên server dù các cổng có bị lộ hay không. Việc hiển thị cổng chỉ đơn giản ghi lại việc sử dụng cổng và cung cấp thông tin đó cho các liên kết và ánh xạ tự động.

Ngược lại, xuất bản một cổng sẽ ánh xạ nó với giao diện server , làm cho nó có sẵn với thế giới bên ngoài.Các cổng containers có thể được ánh xạ tới một cổng cụ thể trên server hoặc Docker có thể tự động chọn ngẫu nhiên một cổng cao, không sử dụng.

Docker cung cấp một cơ chế được gọi là "liên kết Docker" để cấu hình giao tiếp giữa các containers . Nếu một containers mới được liên kết với một containers hiện có, thì containers mới sẽ được cung cấp thông tin kết nối cho containers hiện có thông qua các biến môi trường.

Điều này cung cấp một cách dễ dàng để cài đặt giao tiếp giữa hai containers bằng cách cung cấp cho containers mới thông tin rõ ràng về cách truy cập đồng hành của nó. Các biến môi trường được cài đặt tùy theo các cổng mà container khác tiếp xúc. Địa chỉ IP và các thông tin khác sẽ do Docker tự điền vào.

Dự án mở rộng khả năng kết nối mạng của Docker

Mô hình mạng được thảo luận ở trên cung cấp một điểm khởi đầu tốt cho việc xây dựng mạng. Giao tiếp giữa các containers trên cùng một server lưu trữ khá dễ dàng và giao tiếp giữa các server có thể diễn ra qua các mạng công cộng thông thường miễn là các cổng được ánh xạ chính xác và thông tin kết nối được cung cấp cho bên kia.

Tuy nhiên, nhiều ứng dụng yêu cầu môi trường mạng cụ thể cho các mục đích bảo mật hoặc chức năng. Chức năng mạng riêng của Docker bị hạn chế một chút trong các trường hợp này. Bởi vì điều này, nhiều dự án đã được tạo ra để mở rộng hệ sinh thái mạng Docker.

Tạo mạng lớp phủ để tóm tắt cấu trúc liên kết cơ bản

Một cải tiến chức năng mà một số dự án đã tập trung vào đó là cài đặt mạng lớp phủ. Mạng lớp phủ là một mạng ảo được xây dựng dựa trên các kết nối mạng hiện có.

Việc cài đặt mạng lớp phủ cho phép bạn tạo ra một môi trường mạng thống nhất và dễ đoán hơn trên các server . Điều này có thể đơn giản hóa việc kết nối mạng giữa các containers dù chúng đang chạy ở đâu. Một mạng ảo duy nhất có thể mở rộng nhiều server hoặc các mạng con cụ thể có thể được chỉ định cho từng server trong một mạng thống nhất.

Một ứng dụng khác của mạng lớp phủ là trong việc xây dựng các cụm tính toán kết cấu. Trong tính toán kết cấu, nhiều server được trừu tượng hóa và được quản lý như một thực thể mạnh mẽ hơn. Việc triển khai một lớp điện toán kết cấu cho phép user cuối quản lý toàn bộ cụm thay vì các server riêng lẻ. Mạng đóng một phần lớn trong việc phân cụm này.

Cấu hình mạng nâng cao

Các dự án khác mở rộng khả năng kết nối mạng của Docker bằng cách cung cấp tính linh hoạt hơn.

Cấu hình mạng mặc định của Docker có chức năng, nhưng khá đơn giản. Những hạn chế này thể hiện đầy đủ nhất khi xử lý mạng nhiều server nhưng cũng có thể cản trở các yêu cầu mạng tùy chỉnh hơn trong một server duy nhất.

Chức năng bổ sung được cung cấp thông qua khả năng bổ sung "hệ thống ống nước". Các dự án này không cung cấp cấu hình out-of-the-box, nhưng chúng cho phép bạn nối các mảnh với nhau theo cách thủ công và tạo ra các kịch bản mạng phức tạp. Một số khả năng mà bạn có thể đạt được từ chỉ đơn giản là cài đặt mạng riêng tư giữa các server nhất định, đến cấu hình cầu nối, vlans, mạng con tùy chỉnh và cổng.

Ngoài ra còn có một số công cụ và dự án, mặc dù không được phát triển với Docker, nhưng thường được sử dụng trong môi trường Docker để cung cấp chức năng cần thiết. Đặc biệt, các công nghệ tunnel và mạng riêng trưởng thành thường được sử dụng để cung cấp giao tiếp an toàn giữa các server và giữa các container .

Một số dự án phổ biến để cải thiện mạng Docker là gì?

Có một vài dự án khác nhau tập trung vào việc cung cấp mạng lớp phủ cho các server Docker. Những cái chung là:

  • flannel: Được phát triển bởi đội ngũ CoreOS, dự án này ban đầu được phát triển để cung cấp cho mỗi hệ thống server với subnet riêng của bạn một mạng chia sẻ. Đây là điều kiện cần thiết để công cụ điều phối kubernetes của Google hoạt động, nhưng nó hữu ích trong các tình huống khác.
  • dệt: Weave tạo ra một mạng ảo kết nối mỗi server với nhau. Điều này giúp đơn giản hóa việc định tuyến ứng dụng vì nó tạo ra sự xuất hiện của mọi containers được cắm vào một lựa chọn mạng duy nhất.

Về mạng nâng cao, dự án sau nhằm lấp đầy chỗ trống đó bằng cách cung cấp thêm hệ thống ống nước:

  • đường ống : Được xây dựng như một biện pháp ngăn cách cho đến khi mạng root Docker trở nên tiên tiến hơn, dự án này cho phép dễ dàng cấu hình các cấu hình mạng nâng cao tùy ý.

Một ví dụ có liên quan về phần mềm hiện có được đồng chọn để thêm chức năng vào Docker là:

  • tinc : Tinc là một phần mềm VPN nhẹ được triển khai bằng cách sử dụng tunnel và mã hóa. Tinc là một giải pháp mạnh mẽ có thể làm cho mạng riêng trong suốt với bất kỳ ứng dụng nào.

Kết luận

Cung cấp các dịch vụ bên trong và bên ngoài thông qua các thành phần được container hóa là một mô hình rất mạnh mẽ, nhưng việc cân nhắc kết nối mạng trở thành một ưu tiên. Trong khi Docker cung cấp một số chức năng này nguyên bản thông qua cấu hình giao diện ảo, mạng con, iptables và quản lý bảng NAT, các dự án khác đã được tạo ra để cung cấp các cấu hình nâng cao hơn.

Trong hướng dẫn tiếp theo , ta sẽ thảo luận về cách các bộ lập lịch và công cụ điều phối xây dựng trên nền tảng này để cung cấp chức năng quản lý containers theo group .


Tags:

Các tin liên quan

Hệ sinh thái Docker: Giới thiệu về các thành phần chung
2015-02-01
Hệ sinh thái Docker: Tổng quan về Containerization
2015-02-01
Hệ sinh thái Docker: Lập lịch và Điều phối
2015-02-01
Hệ sinh thái Docker: Khám phá dịch vụ và Cửa hàng cấu hình phân tán
2015-02-01
Cách thiết lập registry Docker riêng trên Ubuntu 14.04
2014-10-15
Cách thực hiện kiểm tra tích hợp liên tục với Drone.io trên CoreOS và Docker
2014-10-08