CHƢƠNG 2 GIỚI THIỆU OPENSTACK VÀ OPENVSWITCH
2.1 Giới thiệu OpenStack
2.1.5 OpenStack Network: Neutron
Luận văn này tậo trung vào OpenStack network, do đó phần này sẽ bao quát triệt để mô-đun OpenStack network - Neutron và các gói phần mềm có liên quan của nó để xây dựng cơ sở hạ tầng mạng dựa trên Neutron.
2.1.5.1 Giải pháp Neutron
Giải pháp OpenStack Neutron, đƣợc ra mắt trong phiên bản Havana (tháng 10 năm 2013), đã thay thế mạng Nova để cung cấp cho OpenStack một bản tóm tắt đầy đủ tính năng của Cơ sở hạ tầng mạng ảo bao gồm các dịch vụ mạng cơ bản và mở rộng. Nhờ có Neutron, ngƣời dùng đám mây có quyền truy cập vào các tài nguyên và cơ sở hạ tầng mạng cần thiết nhƣ các đối tƣợng mạng, mạng con và bộ định tuyến. Các yếu tố mô phỏng chức năng của các thành phần vật lý tƣơng ứng trong mạng thực bao gồm các mạng con đƣợc kết nối với bộ định tuyến, định tuyến lƣu lƣợng giữa các mạng con và các mạng khác nhau. Bên cạnh sự sẵn có của các dịch vụ mạng cơ bản nhƣ NAT, DHCP hoặc định tuyến, Neutron còn cho phép ngƣời dùng tạo các cấu trúc liên kết mạng ảo mở rộng cũng nhƣ các dịch vụ nhƣ Firewall (Firewall- as-a-Service hoặc FWaaS), Load Balancing (LoadBalancer-as -a-Service hoặc LBaaS) và các mạng VPN (VPN-as-a-Service hoặc VPNaaS).
Neutron có một thành phần trên node điều khiển đƣợc gọi là máy chủ Neutron chấp nhận và định tuyến các yêu cầu API đến trình cắm thêm OpenStack Network phù hợp, cùng với một loạt các agent và plugin OpenStack Network giao tiếp với nhau bằng cách sử dụng hàng đợi bản tin bằng cách đóng/mở các cổng, tạo mạng hoặc mạng con và cung cấp địa chỉ IP theo yêu cầu. Tùy thuộc vào loại triển khai, bạn có thể chọn các agent khác nhau mà bạn muốn sử dụng. Một số plugin hiện có với Neutron nhƣ sau [13]:
- Open vSwitch Plugin
- Cisco UCS/Nexus Plugin
- Cisco Nexus1000v Plugin
- Linux Bridge Plugin
- Modular Layer 2 Plugin
- NEC OpenFlow Plugin
- Big Switch Controller Plugin
- Cloudbase Hyper-V Plugin
- MidoNet Plugin
- Brocade Neutron Plugin Brocade Neutron Plugin
- PLUMgrid Plugin
- Mellanox Neutron Plugin Mellanox Neutron Plugin
- Embrane Neutron Plugin
- IBM SDN-VE Plugin
- CPLANE Networks
- Nuage Networks Plugin
- OpenContrail OpenContrail Plugin
- Lenovo Networking Lenovo Networking Plugin
- Avaya Neutron Plugin Avaya Neutron Plugin
2.1.5.2 Kiến trúc Neutron
Mạng OpenStack là một dịch vụ độc lập thƣờng triển khai trên nhiều loại node và hoạt động chặt chẽ với các thành phần khác nhƣ Identity, Compute, Storage, v.v. Quá trình quan trọng nhất của dịch vụ OpenStack Network là máy chủ Neutron, đây là một máy chủ trung tâm Python daemon đƣa ra các API OpenStack Network và chuyển các yêu cầu của tenant đến các plug-in để nhận, gửi các yêu cầu API. Với sự trợ giúp của các API này, các Neutron client có thể xây dựng các chính sách và cấu trúc liên kết mạng linh hoạt. Máy chủ Neutron quản lý một số agent chịu trách nhiệm về định dạng máy chủ và mạng.
Giao tiếp giữa máy chủ Neutron và các agent này phụ thuộc vào RPC (qua RabbitMQ) hoặc thông qua API mạng tiêu chuẩn. Phần tiếp theo sẽ cung cấp tổng quan về kiến trúc và các thành phần chính của Neutron, nhƣ đƣợc minh họa trong hình dƣới đây.
2.1.5.2.1 Neutron Server
Neutron server deamon (neutron-server) chạy trên node mạng, nó khởi động và đọc các tệp cấu hình sau đó cấu hình hàng trăm plug-in và các phần mở rộng. Nó thực hiện và cung cấp các mô hình mạng và địa chỉ IP cho mỗi cổng. Nó cũng đƣa ra các API cho các máy Neutron client (thông qua Dashboard, command-line interface hoặc API calls) và chuyển tiếp các yêu cầu từ các client để cấu hình thêm các plug-in.
Các yêu cầu cần xử lý này đƣợc đặt vào hàng đợi bản tin (sử dụng hệ thống RabbitMQ và AMQP (Advanced Message Queuing Protocol)) và đƣợc gửi đến các agent tƣơng ứng (L2, L3, DHCP hoặc các agent thay thế cho các dịch vụ nâng cao).
nh 2.4: Tổng quan kiến trúc Neutron
2.1.5.2.2 Kiến trúc Plug-in
Khả năng tích hợp của Neutron với cơ sở hạ tầng cơ bản hoàn toàn khác nhau và các dịch vụ mạng khác đƣợc thi hành bởi một loạt các plug-in. Nói cách khác, trong khi máy chủ Neutron cung cấp cho ngƣời dùng các bộ API có khả năng quản lý và tùy chỉnh mạng, thì đó là các plugin thực hiện các nhiệm vụ cấu hình cụ thể và cho phép Neutron hỗ trợ các công nghệ mạng thay đổi nhanh từ nhiều nhà cung cấp một cách hiệu quả trong việc triển khai mô hình Software-Defined Networking. Nhiệm vụ lớn nhất của các plug-in là quản lý các agent, các agent này cung cấp kết nối lớp 2/3 cho các máy ảo, nó xử lý các chuyển đổi mạng ảo-vật lý và xử lý thêm metadata. Do vậy, kiến trúc plug-in mang đến một phƣơng pháp mạnh mẽ và linh hoạt để tùy chỉnh các khả năng của mạng. Chỉ có một plug-in Neutron chạy tại một thời điểm có tên Module Layer 2 (ML2), thông qua framework này OpenStack Network sẽ đồng thời sử dụng nhiều dạng công nghệ mạng lớp 2 [14].
nh 2.5: Kiến trúc Plug-in
Modular Layer 2
Modular Layer 2 (ML2) plug-in cung cấp một framework để đồng thời quản lý một loạt các công nghệ lớp 2, mỗi công cụ có trình điều khiển cơ chế riêng.
ML2 giúp xử lý vấn đề dƣ thừa triển khai trong đó các công nghệ và nhà cung cấp chuyển đổi hoàn toàn khác nhau (ví dụ OpenvSwitch, Linux bridge hoặc Cisco) đƣa ra các plug-in nguyên khối của riêng họ và các agent liên quan trong khi vẫn cung cấp các tùy chọn giống và cản trở nhau trong cùng một môi trƣờng (Neutron stack). Điều này dẫn đến sự trùng lặp của cơ sở dữ liệu, cơ sở mã, v.v., bên cạnh sự lãng phí việc phát triển và bảo trì. ML2 plug-in bao gồm hai loại cơ bản là Trình quản lý loại (Type Manager) và Trình quản lý cơ chế (Mechanism Manager) [15]
Type manager: trình điều khiển quản lý trạng thái mạng của loại plug-in đã chọn và thực hiện bổ sung xác thực network của nhà cung cấp và tenant. Phiên bản Stein mới nhất của OpenStack hỗ trợ trình điều khiển loại bao gồm: local, flat, vlan, gre và vxlan network.
Mechanism manager: Trình quản lý cơ chế quản lý trình điều khiển cho các công nghệ cơ bản khác nhau (từ các nhà cung cấp hoàn toàn khác nhau) muốn điều khiển cơ sở hạ tầng bên dƣới và đảm bảo rằng chúng đƣợc áp dụng theo loại trình điều khiển (type driver) có thể truy cập.
2.1.5.2.3 Hàng đợi bản tin
Tƣơng tự nhƣ các mô-đun OpenStack khác, Neutron sử dụng RabbitMQ làm message broker để liên lạc giữa các thành phần bên trong của nó bằng Remote Procedure Call (RPC) qua cơ chế xếp hàng bản tin RabbitMQ bằng cách sử dụng
Advanced Message Queuing Protocol (AMQP), cung cấp hàng đợi bản tin cho kết nối peer-to-peer. Việc triển khai hàng đợi thƣờng đƣợc triển khai nhƣ một nhóm máy chủ xếp hàng tập trung hoặc phi tập trung, việc liên lạc giữa các thành phần Neutron cùng với máy chủ Neutron, OVS agent và cả OVS.
2.1.5.2.4 L2 agent
L2 agent chạy trên các trình ảo hóa (Compute nodes) và liên lạc liên tục với máy chủ Neutron bằng RPC. Trách nhiệm chính của nó là kết nối các thiết bị mới (giao diện TAP do Nova tạo) và thiết lập các cầu nối phần mềm trên các compute node. Một L2 agent có thể chịu trách nhiệm theo dõi máy chủ lƣu trữ của nó và thông báo cho tron-server về các sự kiện xảy ra với các thiết bị mới hoặc bị loại bỏ. Trong OpenStack, thuộc tính L2 đƣợc cung cấp bằng nhiều trình điều khiển cơ chế (Mechanism manager). Các L2 agent phải đi cùng với compute/network node để đảm bảo rằng các dịch vụ L3 có thể đƣợc tiếp cận bởi các VM và mạng con thuê [17]. Thông thƣờng có 2 loại bridge:
- br-int (Integration bridge): Đây là bridge đảm nhiệm việc gắn thẻ và bỏ chặn lƣu lƣợng truy cập trở lại vào hoặc ra khỏi VM. Để gắn thẻ lƣu lƣợng, nó sử dụng Vlan ID cục bộ và gán nó cho mạng.
- br-tun (Tunneling bridge): Đảm nhận việc dịch lƣu lƣợng truy cập đƣợc dán nhãn. Nó diễn giải Vlan ID thành phân đoạn và sử dụng nó sau đó để tạo đƣờng hầm. Ví dụ, để sử dụng các đƣờng hầm GRE, ID phân đoạn đƣợc sử dụng để chỉ định ID đƣờng hầm. L2 agent có thể trả lời thêm để áp dụng các quy tắc cụm bảo mật (firewall rule) đƣợc thi hành qua Neutron bằng cách sử dụng các bộ IPTABLES và IP.
Open vSwitch Agent
Nhƣ đã đề cập trƣớc đó, Neutron cần các agent bổ trợ (ví dụ: neutron- openvswitch-agent) để cho phép hypervisor và các node mạng cung cấp cấu hình OpenvSwitch cục bộ. OVS agent cung cấp kết nối lớp 2 giữa các máy ảo và do đó cơ sở hạ tầng mạng vật lý sử dụng gắn thẻ VLAN (802.1q). Nó hỗ trợ một mạng không đƣợc gắn thẻ (flat) và lên tới 4095 mạng đƣợc gắn thẻ (VLAN). Số lƣợng cụ thể của các mạng VLAN phụ thuộc vào cơ sở hạ tầng mạng vật lý. Sau khi nhận đƣợc một yêu cầu từ OVS agent, neutron-server sẽ tìm ra OVS tƣơng ứng. Điều này chủ yếu liên quan đến việc đƣa vào Integration bridge (br-int), để tất cả các dịch vụ mạng nội bộ và tenant VM đƣợc kết nối. Neutron-openvswitch agent phụ thuộc đáng kể vào API dành riêng cho OVS (ovs lib) để cấu hình OVS và xử lý các mục nhập riêng thông qua 2 tiện ích ovs-vsctl và ovs-ofctl, tƣơng ứng. Mặc dù là switch tƣơng thích OpenFlow,
OVS hoạt động bên trong mạng neutron nhƣ một switch L2 thông thƣờng với mỗi riêng và truyền thống [16].
Linux operative agent
Linux bridge agent chỉ ra các bridge Linux để cho phép sử dụng các mạng L2 cho các tài nguyên OpenStack. Cấu hình cho Linux bridge agent thƣờng đƣợc thực hiện trong tệp cấu hình linuxbridge_agent.ini. Đảm bảo rằng khi agent bắt đầu chạy ta cần chuyển tệp cấu hình này làm đối số [14].
SRIOV Nic Switch agent
SRIOV nic switch agent cấu hình các chức năng PCI ảo để cho phép OpenStack hiểu đƣợc L2 network. Mạng đính kèm cho các tài nguyên khác nhƣ bộ định tuyến, DHCP, sau đó sẽ không đƣợc hỗ trợ. Cấu hình cho SRIOV nic switch agent thƣờng đƣợc xử lý trong file sriov_agent.ini, đảm bảo rằng khi agent bắt đầu chạy. ta cần chuyển tệp cấu hình này làm đối số [14].
MacVTap agent
MacVTap agent sử dụng các thiết bị MacVTap kernel để thực hiện các mạng L2 cho các OpenStack instance. Mạng đính kèm cho các tài nguyên thay thế nhƣ bộ định tuyến, DHCP, sau đó sẽ không đƣợc hỗ trợ. Tệp cấu hình cho MacVTap agent thƣờng đƣợc thực hiện trong tệp macvtap_agent.ini. Chắc chắn rằng khi agent trên bắt đầu chạy hay truyền tệp cấu hình này nhƣ là một đối số [14].
2.1.5.2.5 L3 agent
Mặc dù L3 agent chia sẻ khá nhiều khía cạnh kiến trúc tƣơng đƣơng nhƣ L2 agent, nhƣng nó vẫn có một số điểm hoàn toàn khác. Với sự trợ giúp của L2 agent, ta có thể kết nối với các mạng với nhau. Ngƣợc lại, L3 agent có các bộ định tuyến cho phép kết nối với các thành phần khác nhau. Nó chuyển dữ liệu từ một mạng sang một mạng khác và từ mạng của bạn ra mạng ngoài. Hình 2.6 cho phép tóm tắt các dịch vụ L3 cùng với các yếu tố ảo đƣợc cấu hình bởi L2 agent. L3 agent tạo các cổng nội bộ hoàn toàn khác nhau với các tiền tố tap cho dịch vụ DNS, qr- cho bộ định tuyến ảo hoặc tiền tố qg- cho một External network (công khai) [17]. Đúng nhƣ tên gọi của nó, neutron L3 agent (neutron-l3-agent) cấu hình cho phép một node hoạt động với các dịch vụ mạng lớp 3 hoàn toàn khác nhau nhƣ định tuyến, NAT và Floating IP. Theo mạng truyền thống, các dịch vụ L3 nhƣ vậy chạy trên node mạng và dựa vào L2 agent để cung cấp kết nối lớp 2 cho các VM instance chạy trên các node điện toán. Các Neutron L3 agent sử dụng ngăn xếp Linux IP và iptables [18] để thực hiện chuyển tiếp
L3 và NAT. Để hỗ trợ nhiều bộ định tuyến có địa chỉ IP có thể chồng lấp (overlapping IP address), các neutron-l3-agent mặc định sử dụng các Linux network namespace để cung cấp các trƣờng hợp chuyển tiếp bị cô lập (isolated forwarding).
Routing
Một network namespace giống nhƣ container hoặc VM cho thiết bị mạng, nói cách khác, ảo hóa ngăn xếp mạng (network stack virtualization). Tƣơng tự nhƣ kết nối mạng thông thƣờng, việc định tuyến là bắt buộc nếu các gói đƣợc gửi từ mạng con này sang mạng con khác, bao gồm lƣu lƣợng giữa các máy ảo thuộc mạng con di động hoặc
nh 2.6: OpenStack Neutron L3 Agents
giữa máy ảo và máy chủ có thể truy cập qua External network. L3 phụ thuộc vào L2 agent, theo cách tƣơng tự Nova phụ thuộc vào L2 agent để kết khởi tạo cổng và kết nối. Khi các cổng đó tồn tại, cho dù đó là cổng ovs hay cặp VETH (virtual ethernet), chúng có thể đƣợc chuyển vào một namespace, giống nhƣ lấy một sợi dây và cắm nó vào thiết bị của bạn. Sau đó, nhiệm vụ của L3 agent là cấu hình địa chỉ IP trên các giao diện. Nó cấu hình định tuyến, cho dù đó là bảng định tuyến cơ bản hay các tuyến bổ sung đã đƣợc cấu hình trên bộ định tuyến. Nó sử dụng iptables để thực hiện chức năng
ra bộ định tuyến chuyên dụng cho mọi phiên bản cụ thể cần phải đi qua để đến mạng bên ngoài và nó sử dụng NAT để thực hiện Floating IP đó. Giả sử rằng có nhiều mạng ngƣời dùng và cùng chia sẻ một External network và mỗi mạng trƣớc đƣợc kết nối với mạng sau thông qua bộ định tuyến ảo dựa trên Neutron. Một bộ định tuyến nhƣ vậy sẽ hoạt động nhƣ sau:
Kết nối tới mạng nội bộ (tenant) thông qua giao diện \ qg- \ (gateway) trên br- ex
Kết nối tới External network thông qua cổng giao diện \ pr- \ (router) trên br-int
(integration bridge)
Có một namespace (tiền tố \ qrouter- \) liên kết với tên bộ định tuyến để tránh các kết nối IP giữa các mạng.
Trên bộ định tuyến, có quyền truy cập siêu dữ liệu, quyền truy cập đƣợc chia sẻ cho các instance không có Floating IP và tích hợp một số dịch vụ nâng cao (VPNaas và FWaas).
NAT
Neutron-l3-agent sẽ thực thi NAT (Network Address Translation) cho bộ định tuyến, chức năng này sử dụng bảng định tuyến iptables của nhân Linux, cho phép các gói từ mạng nội bộ (tenant) đƣợc gửi ra External network thành công, trƣớc khi đi ra khỏi web. Giống nhƣ định tuyến, các quy tắc NAT của bộ định tuyến phải đƣợc thực thi trong một namespace của bộ định tuyến cụ thể để tách chúng ra khỏi mạng máy chủ và mạng của các khách hàng khác sử dụng dịch vụ.
Floating IP
Theo mặc định, các phiên bản máy chủ có IP mặc định đƣợc gán cho chúng. Nhƣng nó chỉ hoạt động trong nội bộ. Một floating IP cần đƣợc gán cho instance cho để có thể truy cập ra bên ngoài. Compute API sẽ cung cấp một số chức năng để truy cập và sử dụng floating IP. IP đƣợc tạo trong mạng nơi khởi chạy máy chủ. API chọn floating IP có sẵn đầu tiên từ nhóm IP và liên kết nó với instance. Nếu một instance bị tắt hoặc xoá bỏ, floating IP của nó sẽ đƣợc sử dụng lại. Bộ định tuyến ảo cung cấp floating IP thông qua NAT và iptables. Dịch vụ L3 này phân bổ và liên kết các địa chỉ IP từ một mạng bên ngoài đến các VM thuê bên trong để cho phép chúng có thể truy cập trực tiếp từ một mạng bên ngoài. Nhƣ đã giải thích ở trên, neutron-l3-agent thực hiện floating IP cũng bằng cách sử dụng iptables để thực hiện NAT.
2.1.5.2.6 DHCP agent
Neutron phụ thuộc vào DHCP agent của nó, neutron-dhcp-agent, nằm trong node mạng để cung cấp dịch vụ Dynamic Host Configuration Protocol (DHCP) cho
các mạng đƣợc thuê, sau đó phân bổ địa chỉ IP cho VM. đặc biệt, dnsmasq [20] đƣợc sử dụng làm dịch vụ back-end cho mục đích này. Đối với mỗi mạng con đƣợc tạo, có một trình nền dnsmasq sẽ chạy và đƣợc gắn vào int-br qua cổng với tiền tố tap- trong một DHCP namespace.
2.1.5.3 Kiến trúc network
Có 4 loại mạng trong một cấu hình OpenStack tiêu chuẩn: Management, Guest, API và External networks [21]
Management network
Đƣợc sử dụng để liên lạc nội bộ giữa các thành phần trong OpenStack. đƣợc sử dụng cho quản trị và các hoạt động nội bộ của OpenStack nhƣ xác thực, truy cập vào