Giới thiệu về Openstack Networking - Neutron và một số khái niệm liên quan
Tổng quan dịch vụ mạng của Openstack.
Neutron - là code name cho Openstack networking servive, sử dụng để cung cấp “kết nối mạng như là một dịch vụ”, được quản lý bởi các Openstack service khác. Nó có một API để người dùng hoặc các dịch vụ khác có thể tạo, quản lý các tài nguyên mạng như network, subnet, firewall, router,…
Openstack Networking (neutron) cho phép tạo và gán các interface được sử dụng bởi các dịch vụ khác đến mạng. Với kiến trúc plugable, các plug-in có thể được sử dụng để triển khai các thiết bị, phần mềm khác nhau. Điều này khiến Neutron có tính linh hoạt trong kiến trúc và triển khai.
Các thành phần của Neutron:
- neutron-server
- Chấp nhận và chuyển hướng các API request đến các plugin thích hợp để xử lý.
- Openstack Networking plug-in và agent
- Có chức năng cắm và gỡ port, tạo mạng hoặc subnet, và cung cấp các địa chỉ IP. Các plug-in hay agent sẽ khác phụ thuộc vào nhà cung cấp và các công nghệ được sử dụng trong một môi trường điện toán đám mây cụ thể. Một số agent hoặc plug-in mà neutron cung cấp ví dụ như switch ảo hoặc cứng của Cisco, NEC OpenFlow products, Open vSwitch, Linux bridging, và VMware NSX product.
- Các agent phổ biến là L3 agent(layer 3) và DHCP agent và plugin agent.
- Messaging queue
- Được sử dụng để giao tiếp, truyền lệnh và trao đổi thông tin giữa neutron-server với các agent. Nó cũng hoạt động như là một database để lưu trữ trạng thái mạng cho các plug-in cụ thể.
Openstack networking chủ yếu làm việc với Openstack compute để cung cấp kết nối mạng cho máy ảo.
Các khái niệm xung quanh dịch vụ Openstack Networking.
Openstack Networking (Neutron) quản lý tất cả các khía cạnh của hạ tầng mạng ảo(VNI) và mọi khía cạnh ở access layer của hạ tầng mạng vật lý trong môi trường Openstack. Openstack Networking cho phép các project tạo mô hình mạng ảo nâng cao mà có thể bao gồm các dịch vụ như là firewall, và VPN.
Dịch vụ mạng cung cấp các mạng, subnet và router như các đối tượng trìu tượng. Các đối tượng trìu tượng này có chức năng giống với các đối tượng vật lý của nó: network chứa subnet, router định tuyến các lưu lượng mạng giữa các subnet và network khác nhau.
Bất cứ thiết lập nào cho dịch vụ Networking đều có ít nhất một external network. External network không chỉ đơn giản là một mạng được định nghĩa ảo. Nó đại diện cho một khung để nhìn vào một lát cắt của mạng vật lý, mạng có thể truy cập bên ngoài phạm vi cài đặt của Openstack. Địa chỉ IP của mạng external network có thể được sử dụng bởi bất kỳ ai trên mạng bên ngoài này.
Ngoài việc sử dụng external network, mọi thiết lập cho dịch vụ networking có thể có một hoặc nhiều internal network(mạng nội bộ). Các máy ảo kết nối chung một internal network có thể giao tiếp với nhau, hoặc chúng có thể giao tiếp với các máy ảo ở các mạng khác nếu hai mạng này kết nốt cùng router(để thực hiện định tuyến giữa hai mạng).
Để mạng ở ngoài có thể kết nối đến các máy ảo ở mạng internal, và ngược lại, thì router giữa các network là cần thiết. Mỗi router sẽ có một cấu hình cho gateway mà được kết nối đến external network bằng một interface và một interface khác sẽ kết nối đến mạng internal. Như một router thật, các subnet hay network có thể truy cập các vm ở subnet khác nếu cùng kết nối đến một router, các máy ảo trong mạng internal cũng có thể truy cập mạng ngoài thông qua gateway được router cung cấp.
Ngoài ra, bạn có thể chỉ định định chỉ IP của external network cho port ở internal network. Port ở đây chỉ bất kỳ kết nối nào đến một subnet. Khi gán IP của external network cho một port của VM ở mạng internal, ta có thể kết nối đến máy ảo từ mạng ngoài thông qua IP được gán. Khái niệm này được gọi là floating IP.
Dịch vụ mạng cũng hỗ trợ security groups. Security groups cho phép quản trị viên định nghĩa các filewall rule theo nhóm. Một máy ảo có thể thuộc một hoặc nhiều security group, và dịch vụ Networking áp dụng các rule trong các security group để chạn hoặc bỏ chặn port, port ranges, hoăc các loại lưu lượng mạng cho máy ảo đó.
Mỗi plug-in lại có các khái niệm riêng của chúng. Có thể không quan trọng để vận hành VNI và Openstack, tuy nhiên, tìm hiểu những khái niệm này có thể sẽ giúp bạn để triển khai dịch vụ network.
Các loại mạng trong Openstack Networking
Provider Networks
Provider network cung cấp kết nối mạng layer 2 cho máy ảo với tùy chọn dịch vụ DHCP và metadata. Mạng này kết nối đến mạng layer 2 đã tồn tại ở datacenter, thường dùng Vlan để định danh và chia mạng.
Provider network cung cấp sự đơn giản, hiệu năng và độ tin cậy. Chỉ có Admin user mới có quyền chỉnh sửa Provider network vì nó yêu cầu cấu hình hạ tầng mạng vật lý.
Vì Provider network cung cấp kết nối mạng ở layer 2, do đó nó thiếu đi hỗ trợ các tính năng như router hay floating ip.
Việc sử dụng các thành phần của Openstack Networking để xử lý các hoạt động ở layer-3 sẽ làm ảnh hưởng khá nhiều đến hiệu năng và độ tin cậy của hệ thống. Sử dụng mạng provider, chỉ quản lý mạng layer-2, sẽ chuyển tất cả hoạt động layer-3 cho hạ tầng mạng vật lý xử lý để tăng hiệu năng và độ tin cậy.
Chỉ có người quản trị có thể cấu hình mạng provider.
Routed Provider Networks
Routed provider networks cung cấp kết nối ở layer 3 cho các máy ảo. Các network này map với những networks layer 3 đã tồn tại.
Cụ thể hơn , mạng này map tới các các mạng layer 2 đã được chỉ định làm provider network . Mỗi router có một gateway để làm nhiệm vụ định tuyến . . Routed provider networks tất nhiên sẽ có hiệu suất thấp hơn so với provider networks.
Self-service Network
Self-service network là các mạng chủ yếu cho phép các project chung(non-privileged) có thể quản lý các mạng mà không liên quan đến quản trị viên. Mạng này hoàn toàn ảo và cần các router ảo để tương tác với mạng provider và mạng bên ngoài như Internet. Mạng Self-service thường cung cấp dịch vụ DHCP và metadata cho máy ảo.
Trong hầu hết các trường hợp, mạng self-service sử dụng các giao thức overlay như VXLAN hay GRE vì chúng hỗ trợ nhiều mạng hơn là phân đoạn mạng layer-2 sử dụng VLAN. Hơn nữa, Vlan cần có cấu hình bổ xung từ hạ tầng mạng vật lý.
Mạng self-service IPv4 thường sử dụng dải địa chỉ IP private và tương tác với mạng provider thông qua Source NAT hoặc PAT trên router ảo. Floating Ip cho phép truy cập máy ảo trong mạng self-service từ mạng provider thông qua destination NAT. Mạng self service IPv6 luôn luôn sử dụng dải địa chỉ IP public và tương tác với mạng provider thông qua router ảo và static route.
Dịch vụ Networking triển khai router sử dụng L3(layer-3) agent mà nằm trên ít nhất một network node. Trái với mạng provider mà kết nối máy ảo đến hạ tầng mạng vật lý ở layer2, mạng self-service phải đi qua một L3 agent. Do đó, việc quá tải hay lỗi xảy ra ở L3 agent hoặc network node có thể ảnh hưởng nhiều đến hiệu năng, chất lượng của mạng self-service và các máy ảo sử dụng chúng. Vì thế nên cần cân nhắc việc triển khai một hoặc hiều tính năng cân bằng tải để tăng tính chịu lỗi và hiệu năng của mạng.
Isolate and Overlay
Người dùng thường tạo các mạng để sử dụng theo từng project. Mặc định thì các mạng này bị cô lập hoàn toàn và không chia sẻ với các project khác. Để chạy chung trên hạ tầng mạng mà vẫn có thể cô lập các mạng với nhau, Openstack networking hỗ trợ các công nghệ cô lập và overlay sau: Flat: Các máy ảo được đặt trên cùng một mạng, có thể là chia sẻ mạng với host. Không có VLAN và không có sự chia phân đoạn mạng.
VLAN: Mạng cho phép người dùng tạo nhiều mạng provider và project sử dụng VLAN IDs mà tương ứng với các VLAN có trong hạ tầng mạng vật lý. Điều này cho phép các máy ảo có thể giao tiếp với nhau băng qua môi trường mạng. Nó cũng có thể giao tiếp với các server vật lý, firewall, và các hạ tầng mạng khác mà nằm trên cùng VLAN layer2.
GRE và VXLAN: là các giao thức đóng gói gói tin trong giao tiếp giữa các máy ảo, tạo ra một lớp mạng ảo dựa trên lớp mạng vật lý. Router được sử dụng để kết nối mạng này với mạng bên ngoài, bao gồm Internet, provider router cũng cung cấp khả năng kết nối đến máy ảo từ mạng ngoài sử dụng Floating Ip.
Một số khái niệm khác cần nắm rõ.
Để tìm hiểu được Openstack Networking thì cần biết một số khái niệm cơ bản trong network ví dụ như ethernet, IP, DHCP, VLAN, Subnet, ARP, mô hình OSI, một số giao thức mạng cơ bản(có thể tìm hiểu thêm tại đây), các thành phần trong một mô hình mạng như switch, router, firewall, loadbalancers(có thể tìm hiểu thêm tại đây),… Bên cạnh đó, chúng ta cần tìm hiểu thêm một số khái niệm nâng cao được sử dụng bởi dịch vụ Openstack Network dưới đây.
Các giao thức mạng Overlay(tunnel).
Tunneling (đường hầm ) là cơ chế giúp truyền các gói tin thông qua một mạng không tương thích. Nó cho phép người dùng mạng có quyền truy cập các mạng bị từ chối hoặc không an toàn. Mã hóa dữ liệu có thể được sử dụng để truyền gói tin, đảm bảo dữ liệu người dùng được đóng gói xuất hiện như công khai mặc dù nó riêng tư, và dễ dàng truyền qua mạng không an toàn.
Gerneric routing encapsulation (GRE)
- Generic routing encapsulation (GRE) là một giao thức chạy trên IP(Internet Protocol) và dùng để đóng gói các gói tin vào một Ip tunnel để tạo thành các kết nối point to point. Ví dụ, gói tin có thể nghĩ là nó được chạy trên tầng datalink(trong mô hình OSI) nhưng thực tế nó đang được đóng gói và chạy trên tầng transport với IP. GRE là giao thức nền tảng cho các giao thức tunnel(đường hầm) sau này nhưng giao thức này cung cấp cơ chế xác thực yếu.
Virtual extensible local area network (VXLAN)
- Giống với VLAN, VXLAN được sử dụng để cung cấp các cô lập mạng có thể mở rộng. Tuy nhiên VXLAN là một lớp phủ layer 2 ảo chạy trên một mạng layer 3.
- VXLAN là một mạng overlay layer 2 trên mạng lớp 3. Mỗi lớp mạng như vậy được gọi là một VXLAN segment. Các máy trong cùng một VXLAN segment, mới có thể giao tiếp với nhau. Các VXLAN segment được xác định bằng một thông số gồm 24bit được gọi là VXLAN Network Identifier (VNI) cho phép tối đa khoảng 16 triệu VXLAN segment tồn tại trong cùng một domain.
Generic Network Virtualization Encapsulation (GENEVE)
(Tìm hiểu thêm tại đây)
Network Namespace.
-
Một namespace là một cách để khoanh vùng phạm vi một bộ các định danh cụ thể. Sử dụng namespace, có thể có nhiều định danh giống nhau nếu chúng khác namespace.
-
Ví dụ, Linux cung cấp các namespace cho mạng(network namespace), các tiến trình, và một số thứ khác. Khi một tiến trình màn chạy trong một namespace, nó chỉ có thể thấy và giao tiếp với các tiến trình khác trong cùng namespace đó. Ví dụ một tiến trình bash ở trong một name space, khi chạy lệnh
ps waux
, nó sẽ chỉ hiển thị các tiến trình trong cùng namespace đó.
Linux network namespace.
-
Trong một network namespace, định danh được khoanh vùng phạm vi ở đây là các thiết bị mạng; Do đó một thiết bị mạng nhất định, ví dụ eth0, tồn tại trong một namespace cụ thể. Linux khởi động với một network namespace mặc định, nếu không có cấu hình đặc biệt gì thì nó sẽ là namespace chứa tất cả các thiết bị mạng trên host. Tuy nhiên, có thể tạo một network namespace khác, tạo các thiết bị mạng, hoặc chuyển các thiết bị mạng từ namespace này sang namespace khác trên host.
-
Mỗi namespace có một routing table riêng.
-
Mỗi namespace có một bảng các rule iptables riêng(cả IPv4 lẫn IPv6). Từ đó có thể áp dụng các quy tắc bảo mật khác nhau cho các namespace.
-
Bất kỳ tiến trình Linux cụ thể nào cũng chạy trên một network namespace cụ thể. Mặc định, nó sẽ thừa hưởng namespace từ tiến trình cha, như một tiến trình có khả năng phù hợp có thể tự chuyển nó sang một network namespace khác.(thường được sử dụng với câu lệnh
ip netns exec NETNS COMMAND...
).
Virtual routing and forwarding (VRF)
- VRF(định tuyến và chuyển hướng ảo) là công nghệ IP cho phép nhiều phiên bản của bản định tuyến tồn tại trên cùng một router tại cùng một thời điểm.
Network Address Translation (NAT)
-
Để cung cấp mạng và một số chức năng mạng nâng cao cho máy ảo Openstack sử dụng công nghệ NAT. Bạn có thể đọc thêm bài ở đây để tìm hiểu thêm về NAT cũng như các dạng NAT.
-
Openstack sử dụng SNAT để cho phép các ứng dụng chạy trong máy ảo có thể kết nối ra ngoài internet.
-
NAT thay đổi cả địa chỉ và port của gói tin nên nó cũng được sử dụng làm PAT(Port Address Translation) hay NAT overload
-
DNAT được sử dụng để thay đổi địa chỉ người nhận trong gói tin. Openstack sử dụng DNAT để gửi gói tin người dùng đến địa chỉ Metadata server. Thường khi máy ảo yêu cầu gói tin metadata sẽ gửi đến địa chỉ 169.254.169.254. Thực ra không có host nào có địa chỉ như thế trên hệ thống. Thay vào đó, Nat router sửa địa chỉ đích của gói tin này thành địa chỉ metadata server trên hệ thống.
-
Nat một đến một cũng được sử dụng để ánh xạ một địa chỉ IP public với một địa chỉ IP private. Openstack sử dụng kiểu Nat này để thực hiện Floating IP address
Hệ thống cấp bậc của các dịch vụ và agent.
Server
- Cung cấp API, Database manager,…
Plug-in
- Quản lý các agent.
Agent
- Cung cấp kết nối l2/l3 đến máy ảo.
- Xử lý quá trình chuyển đổi mạng vật lý với mạng ảo.
- Quản lý metadata,…
Layer 2 (Ethernet and Switching)
- Linux Bridge
- OVS
Layer 3 (IP and Routing)
- L3
- DHCP
Khác
- Metadata
Service
Routing service
VPNaaS
Virtual Private Network as a Service là một neutron extention mà giới thiệu bộ tính năng VPN
LBaaS
Load-Balancer-as-a-Service API quy định và cấu hình cân bằng tải. Việc triển khai tham chiếu dựa trên phần mềm cân bằng tải HAproxy.
FWaaS
Firewall-as-a-Service (FWaaS) API cho phép áp dụng tường lửa vào đối tượng Openstack như project, router, hay router port.
Nguồn tài liệu:
- https://docs.openstack.org/neutron/train/admin
- https://docs.openstack.org/neutron/train/admin/intro-os-networking.html