VÌ SAO MẠNG ĐỊNH NGHĨA BỞI PHẦN MỀM RA ĐỜI?
Sự gia tăng mạnh mẽ về độ phức tạp của các hệ thống mạng đã mang lại những khó khăn và thách thức trong công tác quản trị mạng. Việc cấu hình các hệ thống mạng bằng các chính sách được xác định trước, hay việc cấu hình lại các hệ thống mạng để đáp ứng với các thay đổi trong kinh doanh hàng ngày, để sửa lỗi hay để cân bằng tải trở thành những nhiệm vụ ngày càng khó khăn.
Một trong những viễn cảnh tương lai là việc xây dựng những hệ thống mạng tự vận hành (self-driving network). Bước đầu tiên hướng về viễn cảnh đó chính là yêu cầu tự động hóa các hạ tầng mạng.
Hạ tầng mạng thì bao gồm các nút (nodes) riêng biệt, ví dụ như routers, switch, firewalls…Trước nay, các kỹ sư mạng hay các quản trị mạng phải quản lý từng thiết bị riêng lẻ thông qua các giao diện dòng lệnh CLI. Các giao thức mạng được dùng để kết nối các nodes trên sao cho toàn bộ hạ tầng mạng được nhìn như thể là một hệ thống kết nối duy nhất. Tuy nhiên, thiết lập và triển khai một hạ tầng mạng như vậy đòi hỏi nhiều thách thức lắt léo và thường có chi phí rất cao. Ngoài ra, bản chất riêng biệt của từng thành phần trong hạ tầng mạng làm cho việc giám sát, phản ứng với hiệu năng của cả hạ tầng mạng như là một thực thể duy nhất trở nên khó khăn.
Hiện tại, các hệ thống mạng, các thiết bị mạng tích hợp mặt phẳng điều khiển (control plane) và mặt phẳng dữ liệu (data plane) gắn chặt với thiết bị phần cứng. Khi muốn cấu hình lại các tham số của mạng, thay vì về mặt bản chất, chủng ta chỉ cần thay đổi phần mặt phẳng điều khiển thì chúng ta bắt buộc phải cấu hình lại hoàn toàn thiết bị (chứa cả mặt phẳng dữ liệu lẫn mặt phẳng điều khiển) và phải làm trên từng thiết bị một cách thủ công mà không thể nào thay đổi đồng loạt toàn bộ mặt phẳng điều khiển cùng một lúc.
Sự phát triển của các công nghệ ảo hóa cũng làm cho các công nghệ mạng truyền thống trở lên lỗi thời. Các thiết bị mạng truyền thống thường là các thiết bị đóng kín, trong đó hệ điều hành và cấu hình được gắn liền với phần cứng và mỗi hãng sản xuất lại cung cấp một giao diện kết nối riêng làm cho độ phức tạp của mạng và khả năng tích hợp ngày càng trở lên khó kiểm soát. Việc ảo hóa do đó phụ thuộc vào công nghệ và làm cho kết cấu hệ thống mạng càng trở lên phức tạp, thiếu đồng bộ.
Ngoài ra, việc độc quyền các công nghệ mạng làm cho việc thay thế và sửa đổi, bổ sung các tính năng mới cho thiết bị cũng gặp nhiều hạn chế. Các thiết bị cũng trở nên phức tạp và có nguy cơ chứa nhiều lỗ hổng. Để thay thế hoặc cập nhật các bản vá mới cho thiết bị đòi hỏi phải làm trên từng thiết bị một gây ra rất nhiều khó khăn cho người quản trị và trong vài trường hợp, người quản trị hoàn toàn có thể bỏ quên một vài thiết bị có lỗ hổng.
Tóm lại các công nghệ mạng truyền thống đang gặp nhiều vấn đề trong việc quản lý và vận hành, đặc biệt đối với các trung tâm dữ liệu (data centers) và các mạng doanh nghiệp nhỏ. Đối với các trung tâm dữ liệu chứa nhiều thiết bị mạng tốc độ cao khác nhau thì việc quản trị từng thiết bị riêng rẽ là bất khả thi khi số lượng thiết bị ngày càng gia tăng. Đối với các hệ thống mạng nhỏ, người dùng cuối đa phần đều không có kiến thức về quản trị mạng đủ để thay đổi cấu hình mặc định cho thiết bị.
Các khó khăn và thách thức trên dẫn đến nhu cầu có một sự thay đổi cách mạng trong công nghệ mạng thông qua tập trung hóa việc quản trị:
LÀM THẾ NÀO ĐỂ TỰ ĐỘNG HÓA QUẢN TRỊ HỆ THỐNG MẠNG
Các phần dưới đây lần lượt trình bày các bước cần thiết để tự động hóa việc quản trị mạng.
1.1 Quản trị hạ tầng mạng từ một Công cụ Giao tiếp Điều khiển duy nhất
Một bộ điều khiển mạng có thể được dùng như một công cụ trung gian giữa cấu hình mạng và các thiết bị vật lý. Network controller cho phép IT Team quản lý toàn bộ hạ tầng mạng từ một công cụ duy nhất. Phần giao tiếp của network controller thông thường bao gồm một giao diện đồ họa GUI và một giao tiếp cho lập trình ứng dụng (RESTful - Representational State Transfer). Các công cụ như Puppet hoặc Python sẽ được dùng để thu thập thông tin và triển khai cấu hình thiết bị.
Các network controller hiện đại còn cung cấp một lớp trừu tượng giữa cấu hình mạng và hạ tầng vật lý phức tạp bên dưới. Lớp trừu tượng này được đặc tả như một file văn bản được viết theo đặc tả JSON (JavaScript Object Notation). Các áp lực quản trị tình trạng hệ thống mạng, tải trên hệ thống và các chi tiết khác ở các cấp thấp trong hạ tầng mạng được giảm thiểu cho các kỹ sư mạng.
Như vậy, cả hai tính năng Giao tiếp Điều Khiển Duy nhất và Lớp Trừu tượng hóa giúp các công cụ tự động tập trung vào cấu hình hạ tầng mạng tối ưu cho các ứng dụng. Ngoài ra người kỹ sư mạng né tránh được việc cấu hình trên từng nodes.
Có nhiều bộ điều khiển mạng (network controllers). Trong môi trường mạng doanh nghiệp hoặc trong các chương trình thực hành CCNA, CCNP ở VnPro, các bạn có thể triển khai Cisco DNA Center, Cisco APIC-EM. Ngoài ra các bạn cũng có thể gặp Cisco ACI là một công cụ dễ dàng sử dụng trong kiến trúc mạng SDN, Datacenter. Dùng ACI, người quản trị mạng có thể xây dựng các chính sách cho từng VLAN hay từng ứng dụng. Sau đó ACI-APIC sẽ áp dụng các chính sách này khi các ứng dụng bắt đầu chạy.
1.2 Định hướng tự động hóa
Hãy nghĩ về network controller như một cái nút trợ giúp “Easy” cho network automation. Trong APIC, tất cả mọi thứ đều là một đối tượng và tất cả các đối tượng được định nghĩa theo JSON. Để thu thập thông tin về tình trạng của từng đối tượng hay để tìm và khắc phục lỗi, các kỹ sư chỉ cần thay đổi file text này hay có thể chỉ cần truy vấn các hàm API. Các network controller sẽ cho phép truy cập đến từng đối tượng và trước khi có thay đổi, nó sẽ kiểm tra các thay đổi này có hợp lệ hay không.
Ví dụ trong ACI, các đối tượng và các thuộc tính của nó có thể được truy cập bằng các công cụ có sẵn, bao gồm cả giao diện đồ họa. Dùng giao diện đồ họa, các kỹ sư có thể đẩy các cấu hình nhỏ xuống các thiết bị. Một số công cụ có sẵn trên thị trường, ví dụ như Cisco CouldCenter có sẵn hàng trăm cấu hình mẫu cho ACI, là một công cụ có thể cho phép kỹ sư mạng triển khai ứng dụng nhanh chóng.
Các công cụ tự động hóa phổ biến như Puppet hay Ansible còn có tính năng tự động hóa với các thông tin tích hợp cho các hệ thống khác nhau. Sau cùng, các kỹ sư mạng có thể dùng các ngôn ngữ lập trình như Python để khai thác các thư viện API và tự động hóa các cấu hình.
1.3 Tận dụng các bộ công cụ phần mềm
Dùng Python để triển khai tự động hóa thì rất đơn giản. Trong nhiều trường hợp, ta có thể download miễn phí các scripts hoàn chỉnh dùng cho tự động hóa. Python, ngôn ngữ không chính thức của lập trình mạng và tự động hóa có nhiều thư viện miễn phí cho phép kết nối đến các giao tiếp RESTful để định dạng cấu hình trong JSON.
Phần lớn các đoạn code Python dùng trong ACI automation có ít hơn 25 dòng lệnh và có thể được viết trong vài giờ. Một ví dụ của một python script là công cụ cấu hình một số cổng của switch hoặc router hoặc triển khai hàng loạt các access control list ACL. Các bạn có thể tham khảo các scripts miễn phí ở github.com/datacenter.
Để đơn giản hóa lập trình tự động với Cisco ACI, bạn có thể dùng các bộ công cụ phát triển phần mềm Software Development Kit ACI SDK. Cả hai bộ công cụ SDK và ACI Tooklit cho phép người kỹ sư mạng xây dựng nhanh các công cụ hay thu thập dữ liệu từ ACI. Các dự án đơn giản thì chỉ cần truy cập các API. Tuy nhiên phần lớn các ứng dụng tự động trong ACI thường sử dụng SDK.
1.4 Chuẩn bị sẵn sàng cho các hệ thống mạng tự vận hành
Nếu hướng về tương lai phía trước, một sự kết hợp giữa các dữ liệu phân tích của mạng và các chính sách sẽ cho phép các hệ thống mạng tự vận hành. Đối với Cisco, một công cụ phân tích dữ liệu như vậy gọi là Tetration. Một tích hợp giữa Tetration và ACI hoặc các controller sẽ cho phép các thay đổi cấu hình tự động diễn ra khi Tetration phát hiện các bất thường trong các lưu lượng mạng, các vi phạm chính sách hay các bất thường trong hoạt động của các giao thức.
Các cách triển khai và điều hành mạng dùng giao diện dòng lệnh CLI không còn đáp ứng được các ứng dụng hiện đại. Quản trị các thiết bị mạng phân bố khắp nơi trong hạ tầng mạng ngày càng khó khăn, không nhanh và thường gặp lỗi. Tự động hóa chính là cách tốt nhất cho các kỹ sư mạng giữ các ứng dụng được quản trị tốt.
Sự gia tăng mạnh mẽ về độ phức tạp của các hệ thống mạng đã mang lại những khó khăn và thách thức trong công tác quản trị mạng. Việc cấu hình các hệ thống mạng bằng các chính sách được xác định trước, hay việc cấu hình lại các hệ thống mạng để đáp ứng với các thay đổi trong kinh doanh hàng ngày, để sửa lỗi hay để cân bằng tải trở thành những nhiệm vụ ngày càng khó khăn.
Một trong những viễn cảnh tương lai là việc xây dựng những hệ thống mạng tự vận hành (self-driving network). Bước đầu tiên hướng về viễn cảnh đó chính là yêu cầu tự động hóa các hạ tầng mạng.
Hạ tầng mạng thì bao gồm các nút (nodes) riêng biệt, ví dụ như routers, switch, firewalls…Trước nay, các kỹ sư mạng hay các quản trị mạng phải quản lý từng thiết bị riêng lẻ thông qua các giao diện dòng lệnh CLI. Các giao thức mạng được dùng để kết nối các nodes trên sao cho toàn bộ hạ tầng mạng được nhìn như thể là một hệ thống kết nối duy nhất. Tuy nhiên, thiết lập và triển khai một hạ tầng mạng như vậy đòi hỏi nhiều thách thức lắt léo và thường có chi phí rất cao. Ngoài ra, bản chất riêng biệt của từng thành phần trong hạ tầng mạng làm cho việc giám sát, phản ứng với hiệu năng của cả hạ tầng mạng như là một thực thể duy nhất trở nên khó khăn.
Hiện tại, các hệ thống mạng, các thiết bị mạng tích hợp mặt phẳng điều khiển (control plane) và mặt phẳng dữ liệu (data plane) gắn chặt với thiết bị phần cứng. Khi muốn cấu hình lại các tham số của mạng, thay vì về mặt bản chất, chủng ta chỉ cần thay đổi phần mặt phẳng điều khiển thì chúng ta bắt buộc phải cấu hình lại hoàn toàn thiết bị (chứa cả mặt phẳng dữ liệu lẫn mặt phẳng điều khiển) và phải làm trên từng thiết bị một cách thủ công mà không thể nào thay đổi đồng loạt toàn bộ mặt phẳng điều khiển cùng một lúc.
Sự phát triển của các công nghệ ảo hóa cũng làm cho các công nghệ mạng truyền thống trở lên lỗi thời. Các thiết bị mạng truyền thống thường là các thiết bị đóng kín, trong đó hệ điều hành và cấu hình được gắn liền với phần cứng và mỗi hãng sản xuất lại cung cấp một giao diện kết nối riêng làm cho độ phức tạp của mạng và khả năng tích hợp ngày càng trở lên khó kiểm soát. Việc ảo hóa do đó phụ thuộc vào công nghệ và làm cho kết cấu hệ thống mạng càng trở lên phức tạp, thiếu đồng bộ.
Ngoài ra, việc độc quyền các công nghệ mạng làm cho việc thay thế và sửa đổi, bổ sung các tính năng mới cho thiết bị cũng gặp nhiều hạn chế. Các thiết bị cũng trở nên phức tạp và có nguy cơ chứa nhiều lỗ hổng. Để thay thế hoặc cập nhật các bản vá mới cho thiết bị đòi hỏi phải làm trên từng thiết bị một gây ra rất nhiều khó khăn cho người quản trị và trong vài trường hợp, người quản trị hoàn toàn có thể bỏ quên một vài thiết bị có lỗ hổng.
Tóm lại các công nghệ mạng truyền thống đang gặp nhiều vấn đề trong việc quản lý và vận hành, đặc biệt đối với các trung tâm dữ liệu (data centers) và các mạng doanh nghiệp nhỏ. Đối với các trung tâm dữ liệu chứa nhiều thiết bị mạng tốc độ cao khác nhau thì việc quản trị từng thiết bị riêng rẽ là bất khả thi khi số lượng thiết bị ngày càng gia tăng. Đối với các hệ thống mạng nhỏ, người dùng cuối đa phần đều không có kiến thức về quản trị mạng đủ để thay đổi cấu hình mặc định cho thiết bị.
Các khó khăn và thách thức trên dẫn đến nhu cầu có một sự thay đổi cách mạng trong công nghệ mạng thông qua tập trung hóa việc quản trị:
- Tách biệt phần điều khiển và phần xử lý dữ liệu
- Biến phần điều khiển trở nên mềm dẻo và cho phép lập trình được để tự động hóa và đơn giản hóa việc quản trị.
LÀM THẾ NÀO ĐỂ TỰ ĐỘNG HÓA QUẢN TRỊ HỆ THỐNG MẠNG
Các phần dưới đây lần lượt trình bày các bước cần thiết để tự động hóa việc quản trị mạng.
1.1 Quản trị hạ tầng mạng từ một Công cụ Giao tiếp Điều khiển duy nhất
Một bộ điều khiển mạng có thể được dùng như một công cụ trung gian giữa cấu hình mạng và các thiết bị vật lý. Network controller cho phép IT Team quản lý toàn bộ hạ tầng mạng từ một công cụ duy nhất. Phần giao tiếp của network controller thông thường bao gồm một giao diện đồ họa GUI và một giao tiếp cho lập trình ứng dụng (RESTful - Representational State Transfer). Các công cụ như Puppet hoặc Python sẽ được dùng để thu thập thông tin và triển khai cấu hình thiết bị.
Các network controller hiện đại còn cung cấp một lớp trừu tượng giữa cấu hình mạng và hạ tầng vật lý phức tạp bên dưới. Lớp trừu tượng này được đặc tả như một file văn bản được viết theo đặc tả JSON (JavaScript Object Notation). Các áp lực quản trị tình trạng hệ thống mạng, tải trên hệ thống và các chi tiết khác ở các cấp thấp trong hạ tầng mạng được giảm thiểu cho các kỹ sư mạng.
Như vậy, cả hai tính năng Giao tiếp Điều Khiển Duy nhất và Lớp Trừu tượng hóa giúp các công cụ tự động tập trung vào cấu hình hạ tầng mạng tối ưu cho các ứng dụng. Ngoài ra người kỹ sư mạng né tránh được việc cấu hình trên từng nodes.
Có nhiều bộ điều khiển mạng (network controllers). Trong môi trường mạng doanh nghiệp hoặc trong các chương trình thực hành CCNA, CCNP ở VnPro, các bạn có thể triển khai Cisco DNA Center, Cisco APIC-EM. Ngoài ra các bạn cũng có thể gặp Cisco ACI là một công cụ dễ dàng sử dụng trong kiến trúc mạng SDN, Datacenter. Dùng ACI, người quản trị mạng có thể xây dựng các chính sách cho từng VLAN hay từng ứng dụng. Sau đó ACI-APIC sẽ áp dụng các chính sách này khi các ứng dụng bắt đầu chạy.
1.2 Định hướng tự động hóa
Hãy nghĩ về network controller như một cái nút trợ giúp “Easy” cho network automation. Trong APIC, tất cả mọi thứ đều là một đối tượng và tất cả các đối tượng được định nghĩa theo JSON. Để thu thập thông tin về tình trạng của từng đối tượng hay để tìm và khắc phục lỗi, các kỹ sư chỉ cần thay đổi file text này hay có thể chỉ cần truy vấn các hàm API. Các network controller sẽ cho phép truy cập đến từng đối tượng và trước khi có thay đổi, nó sẽ kiểm tra các thay đổi này có hợp lệ hay không.
Ví dụ trong ACI, các đối tượng và các thuộc tính của nó có thể được truy cập bằng các công cụ có sẵn, bao gồm cả giao diện đồ họa. Dùng giao diện đồ họa, các kỹ sư có thể đẩy các cấu hình nhỏ xuống các thiết bị. Một số công cụ có sẵn trên thị trường, ví dụ như Cisco CouldCenter có sẵn hàng trăm cấu hình mẫu cho ACI, là một công cụ có thể cho phép kỹ sư mạng triển khai ứng dụng nhanh chóng.
Các công cụ tự động hóa phổ biến như Puppet hay Ansible còn có tính năng tự động hóa với các thông tin tích hợp cho các hệ thống khác nhau. Sau cùng, các kỹ sư mạng có thể dùng các ngôn ngữ lập trình như Python để khai thác các thư viện API và tự động hóa các cấu hình.
1.3 Tận dụng các bộ công cụ phần mềm
Dùng Python để triển khai tự động hóa thì rất đơn giản. Trong nhiều trường hợp, ta có thể download miễn phí các scripts hoàn chỉnh dùng cho tự động hóa. Python, ngôn ngữ không chính thức của lập trình mạng và tự động hóa có nhiều thư viện miễn phí cho phép kết nối đến các giao tiếp RESTful để định dạng cấu hình trong JSON.
Phần lớn các đoạn code Python dùng trong ACI automation có ít hơn 25 dòng lệnh và có thể được viết trong vài giờ. Một ví dụ của một python script là công cụ cấu hình một số cổng của switch hoặc router hoặc triển khai hàng loạt các access control list ACL. Các bạn có thể tham khảo các scripts miễn phí ở github.com/datacenter.
Để đơn giản hóa lập trình tự động với Cisco ACI, bạn có thể dùng các bộ công cụ phát triển phần mềm Software Development Kit ACI SDK. Cả hai bộ công cụ SDK và ACI Tooklit cho phép người kỹ sư mạng xây dựng nhanh các công cụ hay thu thập dữ liệu từ ACI. Các dự án đơn giản thì chỉ cần truy cập các API. Tuy nhiên phần lớn các ứng dụng tự động trong ACI thường sử dụng SDK.
1.4 Chuẩn bị sẵn sàng cho các hệ thống mạng tự vận hành
Nếu hướng về tương lai phía trước, một sự kết hợp giữa các dữ liệu phân tích của mạng và các chính sách sẽ cho phép các hệ thống mạng tự vận hành. Đối với Cisco, một công cụ phân tích dữ liệu như vậy gọi là Tetration. Một tích hợp giữa Tetration và ACI hoặc các controller sẽ cho phép các thay đổi cấu hình tự động diễn ra khi Tetration phát hiện các bất thường trong các lưu lượng mạng, các vi phạm chính sách hay các bất thường trong hoạt động của các giao thức.
Các cách triển khai và điều hành mạng dùng giao diện dòng lệnh CLI không còn đáp ứng được các ứng dụng hiện đại. Quản trị các thiết bị mạng phân bố khắp nơi trong hạ tầng mạng ngày càng khó khăn, không nhanh và thường gặp lỗi. Tự động hóa chính là cách tốt nhất cho các kỹ sư mạng giữ các ứng dụng được quản trị tốt.