Trong mô hình tích hợp OpenStack, Neutron là một phần quan trọng để cung cấp dịch vụ mạng cho các instance trên hệ thống. Khi triển khai OpenStack, nếu muốn cho phép các instance trong môi trường OpenStack có thể giao tiếp được với nhau và giao tiếp được ra bên ngoài mạng Internet, cần phải triển khai và cấu hình Neutron trên các node compute. Cụ thể, khi cấu hình Neutron trên node compute, cần cài đặt các gói phần mềm Neutron như neutron-linuxbridge-agent và neutron-metadata-agent, sau đó cấu hình các tùy chọn như IP cho network node, địa chỉ IP của rabbitMQ, keystone, neutron trên network node. Khi đã hoàn tất các bước cấu hình, các instance trong môi trường OpenStack sẽ có thể giao tiếp được với nhau và kết nối được ra bên ngoài mạng Internet thông qua Neutron trên node compute.
1. Install the components
neutron-linuxbridge-agent
là một trong các agent của Neutron được sử dụng để kết nối các máy ảo (VM) trên các host với các mạng ảo (virtual network) được tạo ra trên OpenStack. Nó cung cấp một số tính năng quan trọng như sau:
- Quản lý bridge:
neutron-linuxbridge-agent
có khả năng quản lý các bridge Linux, tạo và xóa các bridge tương ứng với các mạng ảo trên host. - Quản lý interface:
neutron-linuxbridge-agent
quản lý các interface mạng ảo, tạo ra các interface để kết nối VM với các mạng ảo. - Cung cấp cơ chế truy cập mạng:
neutron-linuxbridge-agent
sử dụng Linux bridge để cung cấp cơ chế truy cập mạng cho VM, tức là các VM sẽ được gắn vào các interface của bridge để kết nối với các mạng ảo. - Cung cấp tính năng bảo mật:
neutron-linuxbridge-agent
cung cấp tính năng bảo mật bằng cách sử dụng iptables để đảm bảo rằng lưu lượng mạng được định tuyến đúng cách và các gói tin không được chuyển tiếp hoặc chặn lại.
apt install neutron-linuxbridge-agent -y
2. Configure the common component
Trong file cấu hình /etc/neutron/neutron.conf, các thành phần có ý nghĩa như sau:
– [DEFAULT]: Định nghĩa một số thông tin mặc định:
transport_url
: là địa chỉ URL của message broker, thông thường sử dụng RabbitMQ, để các dịch vụ OpenStack có thể trao đổi thông tin với nhau thông qua messaging.auth_strategy
: định nghĩa phương thức xác thực được sử dụng cho các yêu cầu của neutron. Trong trường hợp này, keystone được sử dụng để xác thực.
– [keystone_authtoken
]: định nghĩa thông tin xác thực keystone. Trong đó:
www_authenticate_uri
: địa chỉ URL của Identity Service (Keystone) để xác thực.auth_url
: địa chỉ URL của Identity Service (Keystone) để xác thực.memcached_servers
: địa chỉ memcached server, được sử dụng để lưu trữ token keystone.auth_type
: xác định loại xác thực được sử dụng, trong trường hợp này là password.project_domain_name
: tên domain của project, được sử dụng để xác thực.user_domain_name
: tên domain của user, được sử dụng để xác thực.project_name
: tên project của user neutron, được sử dụng để xác thực.username
: tên user của user neutron, được sử dụng để xác thực.password
: password của user neutron, được sử dụng để xác thực.
– [oslo_concurrency
]: định nghĩa các thông số về concurrency như lock path, để các service có thể sử dụng chung một lock file để tránh xung đột.
[DEFAULT]
# ...
transport_url = rabbit://openstack:RABBIT_PASS@controller
auth_strategy = keystone
[keystone_authtoken]
# ...
www_authenticate_uri = http://controller:5000
auth_url = http://controller:5000
memcached_servers = controller:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = neutron
password = NEUTRON_PASS
[oslo_concurrency]
# ...
lock_path = /var/lib/neutron/tmp
3. Configure networking options
Bạn có thể triển khai dịch vụ Networking bằng một trong hai kiến trúc được đại diện bởi các tùy chọn 1 và 2.
Tùy chọn 1 triển khai kiến trúc đơn giản nhất chỉ hỗ trợ kết nối các máy ảo đến các mạng cung cấp (bên ngoài). Không có các mạng tự phục vụ (riêng tư), bộ định tuyến hoặc địa chỉ IP nổi. Chỉ có quản trị viên hoặc người dùng đặc quyền khác có thể quản lý các mạng cung cấp.
Tùy chọn 2 bổ sung cho tùy chọn 1 với các dịch vụ tầng 3 hỗ trợ kết nối các máy ảo đến các mạng tự phục vụ. Người dùng demo hoặc người dùng không có đặc quyền khác có thể quản lý các mạng tự phục vụ bao gồm các bộ định tuyến cung cấp kết nối giữa các mạng tự phục vụ và các mạng cung cấp. Ngoài ra, các địa chỉ IP nổi cung cấp kết nối tới các máy ảo sử dụng các mạng tự phục vụ từ các mạng bên ngoài như Internet.
Các mạng tự phục vụ thường sử dụng các mạng chồng lên. Các giao thức mạng chồng lên như VXLAN bao gồm các tiêu đề bổ sung làm tăng chi phí và giảm không gian có sẵn cho tải hoặc dữ liệu người dùng. Mà không có kiến thức về cơ sở hạ tầng mạng ảo, các máy ảo cố gắng gửi các gói tin bằng cách sử dụng đơn vị truyền tải tối đa Ethernet mặc định (MTU) là 1500 byte. Dịch vụ Networking tự động cung cấp giá trị MTU chính xác cho các máy ảo qua DHCP. Tuy nhiên, một số hình ảnh đám mây không sử dụng DHCP hoặc bỏ qua tùy chọn MTU DHCP và yêu cầu cấu hình bằng siêu dữ liệu hoặc một tập lệnh.
Có thể sử dụng cả hai tùy chọn này trong OpenStack networking, tuy nhiên, mỗi tùy chọn có những ứng dụng khác nhau.
Provider networks là tùy chọn truyền thống trong OpenStack, được sử dụng để kết nối các mạng vật lý và mạng ảo. Với tùy chọn này, OpenStack sử dụng các driver plugin khác nhau để kết nối các mạng vật lý với các mạng ảo trong OpenStack. Các mạng vật lý này có thể được quản lý bởi nhà cung cấp dịch vụ và cung cấp cho khách hàng của họ.
Self-service networks cho phép khách hàng tự tạo các mạng ảo và gán IP cho các máy ảo của họ. Các mạng này được quản lý bởi OpenStack và được cấu hình thông qua các driver plugin khác nhau.
Việc sử dụng cả hai tùy chọn này cùng nhau có thể đáp ứng nhiều nhu cầu khác nhau của khách hàng, từ việc cung cấp mạng ảo cho khách hàng đến việc quản lý các mạng vật lý cho nhà cung cấp dịch vụ.
Bạn hãy lựa chọn 1 trong 2 hoặc cả 2 lựa chọn dưới đây:
3.1. Provider networks
Trong file cấu hình /etc/neutron/plugins/ml2/linuxbridge_agent.ini
trên compute node, các thành phần có ý nghĩa như sau:
[linux_bridge]
: driver ML2 sử dụng Linux bridge.physical_interface_mappings
được cấu hình để chỉ định các interface vật lý (physical interface) kết nối đến switch network bên ngoài.provider
là tên network type sử dụng Linux bridge.PROVIDER_INTERFACE_NAME
là tên của interface kết nối đến switch mà mạngprovider
được kết nối tới.[vxlan]
: nếuenable_vxlan
được cấu hình làtrue
, VXLAN (Virtual Extensible LAN) sẽ được sử dụng để tạo các mạng overlay.local_ip
được sử dụng để chỉ định địa chỉ IP của compute node trên overlay network.[securitygroup]
:enable_security_group
được cấu hình để cho phép các security group rule được áp dụng bởi Linux bridge agent.firewall_driver
được sử dụng để chỉ định driver để tạo và quản lý firewall rule. Ở đây sử dụngneutron.agent.linux.iptables_firewall.IptablesFirewallDriver
, một driver tạo và quản lý firewall rule bằng iptables.
[linux_bridge]
physical_interface_mappings = provider:PROVIDER_INTERFACE_NAME
[vxlan]
enable_vxlan = false
[securitygroup]
# ...
enable_security_group = true
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
3.2. Self-service networks
Trong file /etc/neutron/plugins/ml2/linuxbridge_agent.ini
, các thành phần được giải thích như sau:
– [linux_bridge]
: định nghĩa cấu hình cho Linux bridge plugin với physical_interface_mappings
: mapping giữa các tên network interface vật lý trên compute node và các tên mạng được định nghĩa trong OpenStack. Ví dụ: provider:PROVIDER_INTERFACE_NAME
sẽ map mạng provider
trong OpenStack với interface PROVIDER_INTERFACE_NAME
trên compute node.
– [vxlan]
: định nghĩa cấu hình cho VXLAN plugin:
enable_vxlan
: cho phép sử dụng VXLAN plugin.local_ip
: địa chỉ IP của compute node trên interface được sử dụng để giao tiếp với mạng overlay VXLAN.l2_population
: bật tính năng L2 population cho VXLAN. Khi tính năng này được bật, các thông tin về địa chỉ MAC và IP sẽ được phân phối trên các compute node để tăng hiệu suất của mạng overlay.
– [securitygroup]
: định nghĩa cấu hình cho tính năng Security Group:
enable_security_group
: cho phép sử dụng tính năng Security Group.firewall_driver
: driver được sử dụng để triển khai tính năng Security Group. Trong trường hợp này, sử dụng driveriptables
của Linux.
[linux_bridge]
physical_interface_mappings = provider:PROVIDER_INTERFACE_NAME
[vxlan]
enable_vxlan = true
local_ip = OVERLAY_INTERFACE_IP_ADDRESS
l2_population = true
[securitygroup]
# ...
enable_security_group = true
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
Configure the Compute service to use the Networking service.
Trong file cấu hình /etc/nova/nova.conf
, các thành phần sau được sử dụng để xác thực và truy cập dịch vụ neutron
:
auth_url
: URL của Identity service endpoint để xác thực với Keystone. Trong trường hợp này, địa chỉ làhttp://controller:5000
để truy cập dịch vụ Keystone đang chạy trên node controller.auth_type
: Chế độ xác thực. Trong trường hợp này, sử dụng xác thựcpassword
để sử dụng tên người dùng và mật khẩu để xác thực với Keystone.project_domain_name
: Tên miền mà project đang sử dụng, ở đây làdefault
.user_domain_name
: Tên miền mà người dùng đang sử dụng, ở đây làdefault
.region_name
: Tên khu vực, ở đây làRegionOne
.project_name
: Tên project để xác thực với Keystone, ở đây làservice
.username
: Tên người dùng để xác thực với Keystone, ở đây làneutron
.password
: Mật khẩu người dùng để xác thực với Keystone, ở đây làNEUTRON_PASS
.
[neutron]
# ...
auth_url = http://controller:5000
auth_type = password
project_domain_name = default
user_domain_name = default
region_name = RegionOne
project_name = service
username = neutron
password = NEUTRON_PASS
Trong hệ thống Linux, có thể sử dụng network bridge để kết nối các mạng khác nhau và cho phép các máy chủ hoạt động trong một mạng ảo. Tuy nhiên, để sử dụng được network bridge, kernel của hệ thống cần được hỗ trợ bởi các bộ lọc bridge. Trong trường hợp này, để đảm bảo kernel của hệ thống hỗ trợ bộ lọc bridge, cần kiểm tra rằng tất cả các giá trị sysctl sau đều được đặt thành 1. Giá trị net.bridge.bridge-nf-call-iptables
cho phép các gói tin qua bridge được xử lý bởi iptables. Giá trị net.bridge.bridge-nf-call-ip6tables
cho phép các gói tin IPv6 qua bridge được xử lý bởi ip6tables. Khi cả hai giá trị này được đặt thành 1, kernel của hệ thống đã được hỗ trợ bởi các bộ lọc bridge và có thể sử dụng network bridge để kết nối các mạng khác nhau.
sysctl net.bridge.bridge-nf-call-iptables
sysctl net.bridge.bridge-nf-call-ip6tables
Khở động lại 2 dịch vụ nova-compute và neutron-linuxbridge-agent.
service nova-compute restart
service neutron-linuxbridge-agent restart
Phần tiếp theo, chúng ta sẽ cài đặt và cấu hình Horizon service.