Các bộ điều khiển của SDN

Một phần của tài liệu Mô phỏng mạng SDN (software defined networking) sử dụng mã nguồn mở (Trang 36 - 43)

CHƯƠNG 2: MẠNG ĐỊNH NGHĨA BẰNG PHẦN MỀM

2.7. Công cụ Mininet và các bộ điều khiển của SDN

2.7.2. Các bộ điều khiển của SDN

Nền tảng của bộ điều khiển

Trong kiến trúc mạng SDN, nền tảng bộ điều khiển là một trụ cột quan trọng của kiến trúc và do đó những nỗ lực đang được dành để biến bộ điều khiển của SDN thành phần mềm thân thiện với lập trình viên, với người dùng, có khả năng mở rộng và có tính sẵn sàng cao. Các nền tảng điều khiển phân tán, đặc biệt, phải giải quyết một loạt các thách thức. Những vấn đề quan tâm đặc biệt là độ trễ giữa các thiết bị chuyển tiếp, khả năng chịu lỗi, cân bằng tải, tính nhất quán và đồng bộ hóa. Các nhà nghiên cứu cũng có thể quan sát và hiểu làm thế nào để có được sự kết hợp của các chức năng và mô-đun khác nhau có thể tác động đến mạng của họ. Sau đây là một số đặc điểm nền tảng của bộ điều khiển: [2]

Tính mô đun và tính linh hoạt: Một loạt các nghiên cứu liên tục nhắm vào thành phần mô đun và linh hoạt của bộ điều khiển. RAON đề xuất một sự trừu tượng đệ quy của các bộ điều khiển OpenFlow (OpenFlow controller) trong đó mỗi bộ điều khiển xem các bộ điều khiển bên dưới là các OpenFlow switch. Các vấn đề nghiên cứu mở bao gồm định nghĩa về các giao diện phù hợp giữa các lớp khác nhau trong hệ thống phân cấp các bộ điều khiển như vậy. Các vấn đề mở khác sẽ được tiếp tục nghiên cứu trong bối cảnh này là các API và việc sử dụng chúng trong việc cho phép các thiết kế phân cấp phù hợp để đạt được khả năng mở rộng, mô đun hóa và bảo mật. Ví dụ, mỗi cấp độ của một hệ thống phân cấp của bộ điều khiển có thể cung cấp tóm tắt và phạm vi khác nhau cho định tuyến trung tâm dữ liệu và cục bộ, do đó tăng khả năng mở rộng và mô đun hóa. Tương tự, từ góc độ bảo mật, mỗi cấp độ phân cấp có thể là một phần của miền tin cậy khác nhau. Do đó, các API giữa các lớp bộ điều khiển khác nhau sẽ có khả năng thực thi cả chính sách bảo mật nội bộ và liên miền. Hiện tại, việc thiếu tính mô đun trong hầu hết các bộ điều khiển SDN buộc các nhà phát triển phải triển khai lại các dịch vụ mạng cơ bản từ đầu trong mỗi ứng dụng mới. Như trong công nghệ phần mềm nói chung, việc thiếu tính mô đun hóa dẫn đến việc khó xây dựng và triển khai bộ điều khiển, bảo trì và mở rộng giống như các mạng truyền thống. Những nghiên cứu tiếp theo (ví dụ, Corybantic) cố gắng đạt được tính mô đun hóa trong các chương trình kiểm soát SDN. Những đóng góp

35

khác để đạt được các bộ điều khiển mô-đun có thể được trông chờ từ các lĩnh vực khác của khoa học máy tính (ví dụ: các nguyên tắc từ Hệ điều hành).

Khả năng tương tác và tính di động của ứng dụng: Tương tự như thuyết bất khả tri của nhà cung cấp thiết bị bắt nguồn từ các API, điều quan trọng là phải thúc đẩy khả năng tương tác giữa các bộ điều khiển. Các sáng kiến ban đầu hướng tới các nền tảng điều khiển tương thích hơn bao gồm các ngôn ngữ lập trình di động như Pyretic và API giữa các bộ điều khiển, như SDNi, giao diện ForCES CE-CE và ForCES Intra-NE. Tuy nhiên, những nỗ lực này vẫn chưa đáp ứng được khả năng tương tác của bộ điều khiển và tính di động của ứng dụng. Trái ngược với Pyretic, PANE, Maple và Corybantic, được giới hạn cho các ứng dụng kỹ thuật luồng hoặc áp đặt giải quyết xung đột trạng thái mạng ở cấp ứng dụng (làm cho thiết kế ứng dụng và thử nghiệm thêm phức tạp), Statesman đề xuất một khung để cho phép nhiều ứng dụng mạng kết nối lỏng lẻo cùng tồn tại trên cùng một phần điều khiển mạng (Control plane) mà không ảnh hưởng đến hiệu suất và an toàn mạng. Khung này làm cho việc phát triển ứng dụng đơn giản hơn bằng cách giải quyết các xung đột một cách tự động và minh bạch. Nói cách khác, Statesman cho phép một thành phần an toàn của các hành động ứng dụng không phối hợp hoặc xung đột. Một cách tiếp cận khác gần đây để đơn giản hóa việc quản lý mạng là ý tưởng về các trình ảo hóa SDN thành phần. Tính năng chính của nó là cho phép các ứng dụng được viết bằng các ngôn ngữ khác nhau hoặc trên các nền tảng khác nhau hoạt động cùng nhau trong việc xử lý cùng một luồng. Thành phần tích hợp khóa là một tập hợp các danh sách ưu tiên đơn giản của các quy tắc OpenFlow, có thể được tạo bởi các ngôn ngữ lập trình hoặc ứng dụng khác nhau.

Tính sẵn sang cao: Trong sản xuất, bộ điều khiển SDN cần duy trì hoạt động tốt dưới áp lực của các mục tiêu khác nhau từ các ứng dụng mà chúng lưu trữ. Nhiều giải pháp tiến bộ được kêu gọi để đối phó với các vectơ rủi ro tiềm ẩn của các giải pháp dựa trên bộ điều khiển. Chắc chắn, nhiều giải pháp sẽ tận dụng kết quả từ các hệ thống phân tán và cộng đồng bảo mật được thực hiện trong thập kỷ qua. Chẳng hạn, những nỗ lực gần đây đề xuất các kho lưu trữ dữ liệu phù hợp, có khả năng chịu lỗi để xây dựng các bộ điều khiển phân tán đáng tin cậy. Một cách tiếp cận khả thi khác để xây dựng bộ điều

36

khiển SDN có độ trễ thấp, khả dụng cao là khai thác cục bộ của bộ điều khiển. Các mô hình cổ điển của các hệ thống phân tán, chẳng hạn như LOCAL và CONGEST, có thể được khám phá để giải quyết vấn đề này. Những mô hình đó có thể được sử dụng để phát triển các giao thức phối hợp cho phép mỗi bộ điều khiển thực hiện các hành động độc lập đối với các sự kiện diễn ra trong vùng lân cận cục bộ của nó. Một thách thức cốt lõi khác liên quan đến sự đánh đổi cơ bản giữa mô hình nhất quán phân phối trạng thái trong các bộ điều khiển SDN phân tán, các yêu cầu về tính nhất quán của các ứng dụng điều khiển và hiệu suất. Để dễ dàng phát triển, ứng dụng lý tưởng không nên nhận thức một cách mơ hồ của trạng thái phân tán. Điều này ngụ ý một mô hình nhất quán mạnh mẽ, có thể đạt được với các kho dữ liệu phân tán như những đề xuất gần đây. Tuy nhiên, việc giữ tất cả dữ liệu kiểm soát trong kho lưu trữ dữ liệu phân tán nhất quán là không khả thi do các bất cập hiệu suất vốn có. Do đó, các giải pháp lai có khả năng cùng tồn tại đòi hỏi các nhà phát triển ứng dụng phải nhận thức được sự đánh đổi của việc sử dụng, hoặc không, một mô hình nhất quán. Tính sẵn sàng cao cũng có thể đạt được thông qua các API và các mô hình chính thức của bộ điều khiển. Những mục tiêu này nhằm tối đa hóa khả năng phục hồi và khả năng mở rộng bằng cách cho phép các thiết bị chuyển tiếp kết nối với nhiều bộ điều khiển theo cách hiệu quả và tiết kiệm chi phí. Những nỗ lực ban đầu theo hướng này đã chỉ ra rằng các thiết bị chuyển tiếp kết nối với hai hoặc ba bộ điều khiển thường có thể đạt được tính sẵn sàng cao và mạnh mẽ về kết nối phần điều khiển mạng (Control plane).

Nó cũng đã được chứng minh rằng số lượng bộ điều khiển cần thiết phụ thuộc nhiều vào cấu trúc liên kết hơn là kích thước mạng. Một phát hiện khác đáng được đề cập là thực tế đối với hầu hết các cấu trúc liên kết và kích thước mạng phổ biến, ít hơn mười bộ điều khiển dường như là đủ.

Ủy quyền điều khiển: Để tăng hiệu quả hoạt động, bộ điều khiển SDN có thể ủy quyền các chức năng điều khiển để báo cáo thay đổi giá trị trạng thái và thuộc tính, cảnh báo vượt ngưỡng, lỗi phần cứng, v.v. Các thông báo này thường theo mô hình xuất bản / đăng ký, tức là bộ điều khiển và ứng dụng đăng ký (theo yêu cầu) cho lớp thông báo cụ thể mà chúng quan tâm. Ngoài ra, các hệ thống con này có thể cung cấp các đặc tính đáng tin cậy và khả năng phục hồi.

37

Một số lý do để ủy quyền điều khiển cho mặt phẳng dữ liệu bao gồm:

- Đáp ứng độ trễ thấp cho một loạt các sự kiện mạng;

- Lượng luồng phải được xử lý trong chức năng vận chuyển dữ liệu (Data plane), đặc biệt là trong các mạng quy mô lớn như trung tâm dữ liệu;

- Các hàm mức thấp, chẳng hạn như các hàm (định hướng theo byte hoặc bit) được yêu cầu bởi SDH lặp lại (Phân cấp kỹ thuật số đồng bộ) trên phần ghép kênh;

- Các chức năng được hiểu rõ và được tiêu chuẩn hóa, chẳng hạn như mã hóa, chèn BIP, AIS, học MAC và trao đổi CCM;

- Khả năng chịu lỗi của bộ điều khiển, tức là các chức năng mạng thiết yếu sẽ có thể duy trì hoạt động mạng cơ bản ngay cả khi bộ điều khiển bị hỏng;

- Các chức năng cấp thấp cơ bản thường có sẵn trong chức năng vận chuyển dữ liệu (Data plane), chẳng hạn như máy trạng thái chuyển mạch bảo vệ, bộ đếm CCM và bộ hẹn giờ;

- Tất cả các chức năng không thêm bất kỳ giá trị nào khi di chuyển từ dữ liệu đến phần điều khiển mạng (Control plane).

Các bộ điều khiển để thực hiện trong các thiết bị chuyển tiếp thay vì được triển khai trong các nền tảng điều khiển, bao gồm OAM, xử lý ICMP, học MAC, phát hiện hàng xóm, nhận dạng và tích hợp lỗi. Điều này không chỉ làm giảm chi phí hoạt động (lưu lượng và tính toán) của phần điều khiển mạng (Control plane) mà còn cải thiện hiệu quả mạng bằng cách giữ các chức năng mạng cơ bản trong chức năng vận chuyển dữ liệu (Data plane).

Trong kiến trúc mạng SDN thì bộ điều khiển đóng vai trò là “bộ não” của hệ thống, cung cấp cái nhìn tổng quan tập trung về tổng thể hệ thống mạng, và cho phép quản trị viên quyết định cách thức các hệ thống bên dưới (như các bộ định tuyến và chuyển mạch) xử lý lưu lượng mạng. Hiện nay có nhiều bộ điều khiển khác nhau, được phân loại thành hai nhóm: mã nguồn mở và sản phẩm thương mại. Ngoài hai bộ điều khiển đã được cài đặt sẵn trong Mininet là bộ điều khiển mặc định và bộ điều khiển Pox thì nghiên cứu này còn sử dụng bộ điều khiển Ryu.

38 Các bộ điều khiển

Đến nay, nhiều bộ điều khiển OpenFlow (tương thích) đã được phát hành công khai, các bộ điều khiển dưới đây hỗ trợ API OpenFlow v1.0: [12]

- NOX (C++/Python, Nicira): NOX là bộ điều khiển hỗ trợ OpenFlow đầu tiên. NOX lần đầu tiên được viết bằng ngôn ngữ C++ và Python, NOX hiện tại được viết bằng ngôn ngữ C++

- POX (Python, Nicira): POX là một bộ điều khiển SDN chung hỗ trợ bộ điều khiển OpenFlow

- SNAC (C++, Nicira): SNAC là bộ điều khiển OpenFlow dựa trên NOX. Nó hỗ trợ người dùng với giao diện đồ họa.

- Maestro (Java, Rice University): Maestro là bộ điều khiển ở đó đang cố gắng cải thiện thông lượng hệ thống bằng cách khai thác bộ xử lý đa lõi và song song

- Ryu (Python, NTT): Ryu là bộ điều khiển khung SDN, Ryu hỗ trợ OpenFlow phiên bản 1.0, phiên bản 1.2, và phiên bản 1.3

- MUL (C, Kucloud): MUL là bộ điều khiển hỗ trợ cơ sở hạ tầng đa dạng.

MUL hỗ trợ OpenFlow phiên bản 1.0 và phiên bản 1.3.

- Beacon (Java, Stanford University): Beacon là bộ điều khiển đa nền tảng và mô-đun. Nó hỗ trợ hoạt động dựa trên sự kiện và luồng.

- Floodlight (Java, BigSwitch): Floodlight là bộ điều khiển hỗ trợ nhiều loại thiết bị chuyển mạch kể cả thiết bị ảo và thiết bị vật lý và có thể xử lý các mạng OpenFlow và không OpenFlow.

- IRIS (Java, ETRI): IRIS là bộ điều khiển hỗ trợ OpenFlow đệ quy nhằm hỗ trợ khả năng mở rộng, tính sẵn sang cao và hỗ trợ đa miền.

- OESS (Perl, NDDI): OESS là một bộ phần mềm để định cấu hình và điều khiển các mạng Vlan động.

- Jaxon (Java, independent developer): Jaxon là bộ điều khiển OpenFlow phụ thuộc vào NOX

- NodeFlow (JavaScript, independent developer): NodeFlow là bộ điều khiển OpenFlow được viết cho Node.JS.

39

- Ovs-controller (C, independent developer): ovs-controller là bộ điều khiển tham chiếu OpenFlow được đóng gói với Open vSwitch.

- Flowvisor (C, ON.LAB): Flowvisor là bộ điều khiển cho phép nhiều người dùng chia sẻ cùng một cơ sở hạ tầng vật lý bằng cách chia không gian luồng dữ liệu.

- RouteFlow (C++, CPQD): RouteFlow là bộ điều khiển được tạo ra bởi bộ điều khiển OpenFlow, một máy chủ RouteFlow độc lập và môi trường mạng ảo.

- Helios (C, NEC): Helios là bộ điều khiển OpenFlow có thể mở rộng.

Trong luận văn này sử dụng các bộ điều khiển mặc định (Default controller), bộ điều khiển POX (POX controller) và bộ điều khiển Ryu (Ryu controller) để tiến hành thử nghiệm.

Bộ điều khiển POX

POX là bộ điều khiển OpenFlow đươc viết bằng ngôn ngữ Python. Nó được sử dụng rộng rãi trong cộng đồng nghiên cứu bởi độ thân thiện và dễ lập trình. Nó cung cấp một nền tảng để tạo mẫu và phát triển các ứng dụng để điều khiển các thiết bị mạng trong mạng OpenFlow. POX có thể được kết nối từ xa với Mininet và các ứng dụng khác nhau như tường lửa, cân bằng tải, thiết bị chuyển đổi và định tuyến có thể được cấu hình trên các OpenFlow Switchs bên dưới thông qua nó. POX được tích hợp sẵn với Mininet và cũng có thể được cài đặt từ kho GitHub của nó. [17]

POX là bộ điều khiển SDN được viết trên nền tảng python phục vụ cho việc học tập và nghiên cứu. POX có nhiệm vụ như một bộ điều khiển (controller) giúp điều khiển các OpenFlow trong topo. Trên thực tế trong bộ điều khiển POX đã được tích hợp sẵn trong mininet, ta chỉ việc chạy nó bằng dòng lệnh:

# sudo python pox/pox.py log.level --DEBUG forwarding.l2_learning

Bộ điều khiển Ryu

Ryu là bộ điều khiển mã nguồn mở, Ryu là một từ tiếng Nhật có nghĩa là luồng. Nó được phát âm là "ree-yooh". Nó cũng là một bộ điều khiển OpenFlow được viết bằng ngôn ngữ python, nó có API mà thông qua đó các nhà nghiên cứu có thể lập trình, kiểm soát và quản lý các ứng dụng. Các thiết bị mạng có thể được cấu hình dựa trên các ứng

40

dụng chạy trên Ryu thông qua các giao thức khác nhau như Netconf, OpenFlow và OF- conf. [17]

Ryu có nhiệm vụ như một bộ điều khiển (controller) giúp điều khiển các OpenFlow trong topo. Để chạy được Ryu controller trên Mininet chúng ta phải cài đặt nó chứ Ryu controller không được cài sẵn trên Mininet. Khi cài đặt xong để chạy Ryu controller ta gõ lệnh:

# sudo ryu-manager ryu.app.simple_switch

41

Một phần của tài liệu Mô phỏng mạng SDN (software defined networking) sử dụng mã nguồn mở (Trang 36 - 43)

Tải bản đầy đủ (PDF)

(68 trang)