Tìm hiểu Network Namespace và Kiến trúc Neutron.
Network Namespace.
-
Namespace được sử dụng để cô lập, khoanh vùng các định danh - các định danh ở đây có thể là process id, routing table, mount point, user id.
-
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; Các thiết bị mạng trên hệ thống nếu không có cấu hình đặc biệt nào thì nó sẽ nằm cùng trên một network namespace mặc định. Các thiết bị mạng có thể được tạo, xóa hoặc chuyển từ namespace này sang namespace khác.
-
Mỗi network 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).
- 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...
).Lợi ích của Namespace
-
Overlapping IPs: Một lợi ích lớn của việc triển khai namespace trong Neutron là các người dùng có thể tạo các địa chỉ IP chồng chéo, điều này đem lại sự tự do cho người dùng cloud vì họ có thể tự do tạo bất kỳ subnet nào mà không sợ bị trùng dải địa chỉ với người dùng khác.
-
Linux Network Namespace được yêu cầu cho node mà chạy neutron-l3-agent hoặc neutron-dhcp-agent nếu overlapping IPs được sử dụng.
- L3 agent: neutron-l3-agent được thiết kế để sử dụng network namespaces để cung cấp nhiều router ảo độc lập, mà không ảnh hưởng đến các router khác hoặc cơ chế định tuyến của compute node mà nó được đặt trên.
Một số câu lệnh làm việc với network namespace.
- Liệt kê các network namespace:
ip netns list
[root@os-controller ~]# ip netns list qrouter-c1e9e77b-41ff-4c88-b28a-4460ca8df627 (id: 2) qdhcp-4fa7b8b7-9c83-48c8-b0f2-7a088f95342f (id: 1) qdhcp-0fb7bb30-ae0d-4bc6-8455-2871f72f1b74 (id: 0)
- Thực thi câu lệnh trong namespace:
ip netns exec <namespace> <command>
``` [root@os-controller ~]# route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface default gateway 0.0.0.0 UG 100 0 0 eth0 192.168.30.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0 192.168.40.0 0.0.0.0 255.255.255.0 U 101 0 0 eth1 [root@os-controller ~]# ip netns exec qdhcp-0fb7bb30-ae0d-4bc6-8455-2871f72f1b74 route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface default gateway 0.0.0.0 UG 0 0 0 ns-aa407ac9-74 link-local 0.0.0.0 255.255.0.0 U 0 0 0 ns-aa407ac9-74 192.168.50.0 0.0.0.0 255.255.255.0 U 0 0 0 ns-aa407ac9-74
## Neutron Architecture
Openstack Neutron là một dịch vụ độc lập mà triển khai một số tiến trình trên một số lượng các node. Các tiến trình này tương tác với nhau và với các dịch vụ Openstack khác. Tiến trình chính của Neutron là neutron-server, một daemon Python expose Openstack Networking API và truyền yêu cầu của người dùng đến một plug-ins phù hợp để xử lý sau đó.
Các thành phần của Openstack networking:
**neutron-server (neutron-server and neutron-*-plugin)**: Dịch vụ này chạy trên network node để cung cấp Networking API và phần mở rộng của nó. Nó cũng thực thi mô hình mạng và địa chỉ ip trên từng port. Dịch vụ neutron-server yêu cầu truy cập gián tiếp đến database thông qua các plugin - mà giao tiếp với database sử dụng AMQP.
**plugin agent(neutron-*-agent)**: chạy trên mỗi compute node để quản lý cấu hình của switch ảo trên đó. Plug-in sẽ được dùng để xác định agent nào đang chạy. Dịch vụ này yêu cầu truy cập message queue và các yêu cầu khác phụ thuộc vào plug-in nào được sử dụng.
**DHCP-Agent(neutron-l3-agent)**: Cung cấp dịch vụ DHCP cho mạng của khách hàng. Trên mọi plug-ins thì agent này đều có nhiệm vụ giống nhau là quản lý cấu hình DHCP. DHCP agent yêu cầu truy cập message queue và các yêu cầu khác tùy vào plug-in.
**L3 agent(neutron-l3-agent)**: Cung cấp các cấu hình mạng ở layer 3/Nat forwarding để mạng ngoài truy cập, giao tiếp với mạng khách hàng. L3 agent yêu cầu truy cập message queue và các yêu cầu khác tùy vào plug-in.
**network provider service(SDN server/services)**: Cung cấp thêm dịch vụ cho networking. Dịch vụ SDN có thể giao tiếp với *neutron-server*, *neutron-plugin* và *neutron-agent* thông qua các kênh giao tiếp như REST-API.
Sơ đồ dưới đây mô tả kiến trúc và luồng hoạt động của các thành phần trong Openstack Networking:

## ML2 Plugin
Modular Layer 2(ml2) plugin cho phép Openstack Networking sử dụng đồng thời nhiều công nghệ mạng layer 2 giống các công nghệ được tìm thấy ở các data center thật. ML2 phân biệt hai loại driver:
- **Type driver**:
- Thể hiện cách thức mà Openstack network được thực hiện về mặt kĩ thuật(ví dụ: VXLAN)
- Mỗi loại mạng được quản lý bởi một ML2 type driver.
- **Mechanism drivers**:
- Xác địn cơ chế để truy cập một mạng Openstack của một loại mạng nhất định. (Ví dụ Open vSwitch mechanism driver).
- Mechanism driver chịu trách nhiệm lấy thông tin được thiết lập bởi type driver và đảm bảo áp dụng chúng cho đúng cho mechanism driver mà đã được bật.
- Mechanism driver có thể sử dụng các L2 agent(qua RPC) và/hoặc có thể tương tác trực tiếp với các thiết bị hoặc controller bên ngoài(các thiết bị trên máy chủ)
- Nhiều Type driver và mechanism driver có thể được sử dụng đồng thòi để truy cập các port khác nhau trên cùng một mạng ảo.
### ML2 Driver support Matrix
| Type driver/Mechanism driver| Flat | VLAN | VXLAN | GRE |
|-----------------------------|------|------|-------|-----|
| Open vSwitch | yes | yes | yes | yes |
| Linux Bridge | yes | yes | yes | no |
| SRIOV | yes | yes | no | no |
| Open vSwitch | yes | yes | no | no |
| L2 population | no | no | yes | yes |
### Cấu hình
#### Cấu hình type driver
Để cấu hình bật type driver trong ML2 plugin, sửa file **/etc/neutron/plugins/ml2/ml2_conf.ini**:
[ml2] type_drivers = flat,vlan,vxlan,gre
#### Cấu hình mechanism driver.
Để cấu hình bật mechanism driver, sửa file **/etc/neutron/plugins/ml2/ml2_conf.ini**
[ml2] mechanism_drivers = ovs,l2pop ```
Tài liệu tham khảo
-
https://docs.openstack.org/security-guide/networking/architecture.html
-
https://object-storage-ca-ymq-1.vexxhost.net/swift/v1/6e4619c416ff4bd19e1c087f27a43eea/www-assets-prod/presentation-media/HK-Openstack-Namespaces1-.pdf