1. Tổng quan.
Self-service networks là một tính năng trong OpenStack, cho phép người dùng tự tạo và quản lý các mạng ảo trong môi trường điện toán đám mây. Với self-service networks, người dùng có thể tạo ra các mạng ảo riêng biệt và tùy chỉnh các thuộc tính như địa chỉ IP, dải địa chỉ, cấu hình mạng và bảo mật mạng theo nhu cầu của họ. Self-service networks giúp cải thiện đáng kể quy trình triển khai và quản lý các ứng dụng và dịch vụ trong môi trường điện toán đám mây. Các nhà quản trị có thể giảm thiểu thời gian và chi phí để triển khai, cấu hình và quản lý các mạng ảo bằng cách cho phép người dùng tự thực hiện các tác vụ này. Ngoài ra, tính năng này còn giúp tăng tính linh hoạt cho người dùng khi triển khai các ứng dụng và dịch vụ, đồng thời giúp họ đáp ứng nhanh chóng với các yêu cầu mới và thay đổi trong doanh nghiệp.
2. Cài đặt các thành phần Networking của OpenStack.
Câu lệnh apt install
được sử dụng để cài đặt các gói phần mềm liên quan đến việc triển khai dịch vụ mạng trong OpenStack. Cụ thể:
neutron-server
: là dịch vụ trung tâm quản lý mạng trong OpenStack.neutron-plugin-ml2
: là một plugin cho phép sử dụng nhiều loại driver mạng khác nhau, nhưng trong trường hợp này chỉ sử dụng driverlinuxbridge
.neutron-linuxbridge-agent
: là một agent chạy trên compute node, chịu trách nhiệm kết nối các máy ảo với các virtual network trên host.neutron-l3-agent
: là một agent chạy trên compute node, chịu trách nhiệm cung cấp tính năng router giữa các virtual network trên host.neutron-dhcp-agent
: là một agent chạy trên compute node, chịu trách nhiệm cấp phát địa chỉ IP và cấu hình DHCP cho các máy ảo.neutron-metadata-agent
: là một agent chạy trên compute node, cung cấp dịch vụ metadata cho các máy ảo.
Việc cài đặt các gói phần mềm này sẽ tạo ra các thành phần cần thiết để triển khai mạng trong OpenStack.
apt install neutron-server neutron-plugin-ml2 \
neutron-linuxbridge-agent neutron-l3-agent neutron-dhcp-agent \
neutron-metadata-agent -y
3. Cấu hình các thành phần Networking của OpenStack.
Trong file cấu hình /etc/neutron/neutron.conf
, phần cấu hình [database]
được sử dụng để chỉ định thông tin kết nối tới cơ sở dữ liệu của Neutron.
[database]
# ...
connection = mysql+pymysql://neutron:NEUTRON_DBPASS@controller/neutron
Cụ thể:
connection
: Đây là URL kết nối tới cơ sở dữ liệu MySQL/MariaDB được sử dụng bởi Neutron server. URL bao gồm username, password, hostname (ở đây làcontroller
) và tên database (neutron
).transport_url
: Đây là URL kết nối tới message broker (ở đây là RabbitMQ) được sử dụng để gửi và nhận các tin nhắn giữa các thành phần của Neutron.
Tại [DEFAULT]
bạn config lại như sau:
[DEFAULT]
# ...
core_plugin = ml2
service_plugins = router
allow_overlapping_ips = true
transport_url = rabbit://openstack:RABBIT_PASS@controller
auth_strategy = keystone
notify_nova_on_port_status_changes = true
notify_nova_on_port_data_changes = true
Trong đó:
core_plugin = ml2
: Đây là plugin cốt lõi được sử dụng bởi Neutron.ml2
là viết tắt của Modular Layer 2, một plugin cho phép sử dụng nhiều công nghệ mạng cùng một lúc.service_plugins = router
: Đây là danh sách các plugin dịch vụ mà Neutron sẽ tải. Trong trường hợp này, chỉ có pluginrouter
được tải.allow_overlapping_ips = true
: Khi được đặt thànhtrue
, Neutron sẽ cho phép các dự án (còn được gọi là tenant) sử dụng cùng một dải địa chỉ IP.transport_url = rabbit://openstack:RABBIT_PASS@controller
: Đây là URL kết nối đến dịch vụ RabbitMQ, một hệ thống tin nhắn AMQP được sử dụng bởi các dịch vụ OpenStack để giao tiếp với nhau.auth_strategy = keystone
: Đây là phương thức xác thực mà Neutron sẽ sử dụng.keystone
là dịch vụ xác thực và ủy quyền của OpenStack.notify_nova_on_port_status_changes = true
vànotify_nova_on_port_data_changes = true
: Khi được đặt thànhtrue
, Neutron sẽ thông báo cho dịch vụ Nova về bất kỳ thay đổi nào đối với trạng thái hoặc dữ liệu của cổng mạng. Nova là dịch vụ máy ảo của OpenStack.
Phần [keystone_authtoken]
chứa các cài đặt liên quan đến xác thực 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
Cụ thể:
www_authenticate_uri = http://controller:5000
: Đây là URL của dịch vụ Keystone, nơi Neutron sẽ gửi các yêu cầu xác thực.auth_url = http://controller:5000
: Đây cũng là URL của dịch vụ Keystone. Nó sẽ được sử dụng để xác thực các yêu cầu từ các dịch vụ khác.memcached_servers = controller:11211
: Đây là địa chỉ của dịch vụ memcached, một hệ thống lưu trữ bộ nhớ đệm được sử dụng bởi Keystone để cải thiện hiệu suất.auth_type = password
: Đây là phương thức xác thực mà Neutron sẽ sử dụng khi giao tiếp với Keystone.project_domain_name = default
: Đây là tên miền mà dự án (còn được gọi là tenant) thuộc về.user_domain_name = default
: Đây là tên miền mà người dùng thuộc về.project_name = service
: Đây là tên của dự án mà người dùng thuộc về.username = neutron
: Đây là tên người dùng sẽ được sử dụng để xác thực với Keystone.password = NEUTRON_PASS
: Đây là mật khẩu sẽ được sử dụng để xác thực với Keystone. Trong trường hợp này,NEUTRON_PASS
nên được thay thế bằng mật khẩu thực của người dùngneutron
.
Phần [nova]
chứa các cài đặt liên quan đến việc tương tác với dịch vụ Nova.
[nova]
# ...
auth_url = http://controller:5000
auth_type = password
project_domain_name = default
user_domain_name = default
region_name = RegionOne
project_name = service
username = nova
password = NOVA_PASS
Trong đó:
auth_url = http://controller:5000
: Đây là URL của dịch vụ Keystone, nơi Neutron sẽ gửi các yêu cầu xác thực.auth_type = password
: Đây là phương thức xác thực mà Neutron sẽ sử dụng khi giao tiếp với Keystone.project_domain_name = default
: Đây là tên miền mà dự án (còn được gọi là tenant) thuộc về.user_domain_name = default
: Đây là tên miền mà người dùng thuộc về.region_name = RegionOne
: Đây là tên của khu vực mà dịch vụ Nova đang hoạt động.project_name = service
: Đây là tên của dự án mà người dùng thuộc về.username = nova
: Đây là tên người dùng sẽ được sử dụng để xác thực với Keystone.password = NOVA_PASS
: Đây là mật khẩu sẽ được sử dụng để xác thực với Keystone. Trong trường hợp này,NOVA_PASS
nên được thay thế bằng mật khẩu thực của người dùngnova
.
Phần [oslo_concurrency]
của OpenStack Neutron chứa các cài đặt liên quan đến đồng bộ hóa và khóa.
[oslo_concurrency]
# ...
lock_path = /var/lib/neutron/tmp
Khi cấu hình lock_path = /var/lib/neutron/tmp
thì đây là đường dẫn mà Neutron sẽ sử dụng để lưu trữ các file khóa. Các file khóa này được sử dụng để đảm bảo rằng chỉ có một tiến trình hoặc luồng có thể thực hiện một tác vụ cụ thể tại một thời điểm, giúp tránh xung đột.
Cấu hình plugin Modular Layer 2 (ML2).
Modular Layer 2 (ML2) là một plugin cho Neutron trong OpenStack, cho phép bạn cấu hình và quản lý các mạng ảo. ML2 được thiết kế để hỗ trợ nhiều loại mạng (như VLAN, VXLAN, flat, GRE) và nhiều loại cơ sở hạ tầng phần cứng mạng.
Thông tin cấu hình trong file /etc/neutron/plugins/ml2/ml2_conf.ini
:
[ml2]
# ...
type_drivers = flat,vlan,vxlan
tenant_network_types = vxlan
mechanism_drivers = linuxbridge,l2population
extension_drivers = port_security
type_drivers = flat,vlan,vxlan
: Đây là danh sách các loại mạng mà plugin ML2 hỗ trợ.flat
là mạng không có VLAN,vlan
là mạng với VLAN, vàvxlan
là mạng ảo VXLAN.tenant_network_types = vxlan
: Đây là loại mạng mà Neutron sẽ sử dụng cho các mạng của tenant. Trong trường hợp này, nó sẽ sử dụng VXLAN.mechanism_drivers = linuxbridge,l2population
: Đây là danh sách các driver cơ chế mà ML2 sẽ sử dụng.linuxbridge
là driver cầu Linux, vàl2population
là driver dùng để tối ưu hóa quá trình quảng bá ARP/MAC.extension_drivers = port_security
: Đây là danh sách các driver mở rộng mà ML2 sẽ sử dụng.port_security
là driver dùng để áp dụng các chính sách bảo mật cho cổng.
Phần [ml2_type_flat]
của OpenStack Neutron chứa các cài đặt cho loại mạng flat
trong plugin ML2.
[ml2_type_flat]
# ...
flat_networks = provider
Trong đó flat_networks = provider
là danh sách các tên mạng flat
mà Neutron có thể sử dụng. Trong trường hợp này, chỉ có một mạng flat
có tên là provider
. Mạng flat
không sử dụng VLAN hoặc bất kỳ công nghệ ảo hóa mạng nào khác, mà thay vào đó, nó cho phép tất cả các máy ảo trên cùng một mạng flat
giao tiếp với nhau như nếu chúng đều được kết nối trực tiếp với cùng một switch.
Phần [ml2_type_vxlan]
của OpenStack Neutron chứa các cài đặt cho loại mạng vxlan
trong plugin ML2.
[ml2_type_vxlan]
# ...
vni_ranges = 1:1000
Trong đó vni_ranges = 1:1000
là phạm vi của các giá trị VNI (VXLAN Network Identifier) mà Neutron có thể sử dụng cho các mạng VXLAN. Trong trường hợp này, Neutron có thể sử dụng bất kỳ giá trị VNI nào từ 1 đến 1000.
VXLAN là một công nghệ ảo hóa mạng cho phép tạo ra các mạng lưới lớp 2 ảo trên một mạng lưới lớp 3. Mỗi mạng VXLAN được xác định bởi một giá trị VNI duy nhất. Trong ví dụ này, bạn có thể tạo ra tối đa 1000 mạng VXLAN khác nhau, mỗi mạng có một giá trị VNI duy nhất từ 1 đến 1000.
- Vni_ranges trong mạng VXLAN có chức năng tương tự như
vlanid
trong mạng VLAN:- Trong mạng VLAN,
vlanid
được sử dụng để phân biệt giữa các VLAN khác nhau trên cùng một mạng vật lý. Mỗi VLAN có mộtvlanid
duy nhất, và các gói tin trên mạng vật lý được gắn thêmvlanid
để chỉ rõ chúng thuộc về VLAN nào. - Tương tự, trong mạng VXLAN,
vni
(VXLAN Network Identifier) được sử dụng để phân biệt giữa các mạng VXLAN khác nhau trên cùng một mạng vật lý. Mỗi mạng VXLAN có mộtvni
duy nhất, và các gói tin trên mạng vật lý được gắn thêmvni
để chỉ rõ chúng thuộc về mạng VXLAN nào. vni_ranges
trong cấu hình OpenStack Neutron chỉ định phạm vi các giá trịvni
mà Neutron có thể sử dụng khi tạo mới mạng VXLAN.
- Trong mạng VLAN,
Phần [securitygroup]
có tùy chọn enable_ipset
giúp bật hoặc tắt tính năng ipset trong security group. Trong cấu hình này, tính năng đã được bật.
[securitygroup]
# ...
enable_ipset = true
Cấu hình Linux Bridge Agent.
Phần này của file cấu hình /etc/neutron/plugins/ml2/linuxbridge_agent.ini
của OpenStack Neutron chứa các cài đặt cho Linux bridge, VXLAN và nhóm bảo mật.
[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
Trong đó:
[linux_bridge] physical_interface_mappings = provider:PROVIDER_INTERFACE_NAME
: Đây là cấu hình cho Linux bridge.physical_interface_mappings
ánh xạ một tên mạng tới một interface vật lý trên node mạng. Trong trường hợp này, mạngprovider
được ánh xạ tớiPROVIDER_INTERFACE_NAME
, bạn cần thay thếPROVIDER_INTERFACE_NAME
bằng tên của interface mạng vật lý trên máy chủ của bạn.[vxlan] enable_vxlan = true local_ip = OVERLAY_INTERFACE_IP_ADDRESS l2_population = true
: Đây là cấu hình cho VXLAN.enable_vxlan = true
cho phép sử dụng VXLAN.local_ip
là địa chỉ IP của interface mạng được sử dụng cho việc truyền tải VXLAN, bạn cần thay thếOVERLAY_INTERFACE_IP_ADDRESS
bằng địa chỉ IP thực của interface này.l2_population = true
cho phép tối ưu hóa quá trình quảng bá ARP/MAC.[securitygroup] enable_security_group = true firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
: Đây là cấu hình cho nhóm bảo mật.enable_security_group = true
cho phép sử dụng nhóm bảo mật.firewall_driver
xác định driver tường lửa được sử dụng, trong trường hợp này làIptablesFirewallDriver
của iptables.
Cấu hình layer-3 agent
Phần [DEFAULT]
trong file cấu hình /etc/neutron/l3_agent.ini
của OpenStack Neutron chứa các cài đặt mặc định cho agent L3.
Trong đó interface_driver = linuxbridge
là driver interface mà agent L3 sẽ sử dụng. Trong trường hợp này, nó sẽ sử dụng Linux bridge. Linux bridge là một phần mềm tạo ra một switch mạng ảo trong kernel Linux, cho phép bạn kết nối nhiều interface với nhau.
[DEFAULT]
# ...
interface_driver = linuxbridge
Cấu hình DHCP agent
Phần [DEFAULT]
trong file cấu hình /etc/neutron/dhcp_agent.ini
của OpenStack Neutron chứa các cài đặt mặc định cho agent DHCP.
[DEFAULT]
# ...
interface_driver = linuxbridge
dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq
enable_isolated_metadata = true
Trong đó:
interface_driver = linuxbridge
: Đây là driver của interface mà agent DHCP sẽ sử dụng. Trong trường hợp này, nó sẽ sử dụng Linux bridge. Linux bridge là một phần mềm tạo ra một switch mạng ảo trong kernel Linux, cho phép bạn kết nối nhiều interface với nhau.dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq
: Đây là driver DHCP mà agent DHCP sẽ sử dụng. Trong trường hợp này, nó sẽ sử dụng Dnsmasq. Dnsmasq là một server nhỏ và nhẹ cho DNS, DHCP và BOOTP, phù hợp cho việc cung cấp các dịch vụ mạng cho mạng nhỏ.enable_isolated_metadata = true
: Khi cài đặt này được bật (đặt thànhtrue
), agent DHCP sẽ cung cấp một máy chủ metadata proxy trên mỗi mạng. Điều này cho phép các máy ảo truy cập dịch vụ metadata của OpenStack mà không cần đến một mạng riêng biệt.
Quay lại phần cấu hình Networking controller node để tiếp tục.