1. Tổng quan.
Provider Networks trong OpenStack là mạng được cung cấp bởi nhà cung cấp internet, được sử dụng để kết nối các máy ảo với mạng bên ngoài, chẳng hạn như Internet hoặc mạng nội bộ của tổ chức.
Tại sao phải sử dụng Provider networks? Đó là vì mạng Provider cung cấp khả năng kết nối các máy ảo đến các dịch vụ bên ngoài, đáp ứng nhu cầu kết nối các ứng dụng và dịch vụ đang chạy trên máy ảo đến Internet hoặc các tài nguyên mạng bên ngoài. Các máy ảo trên OpenStack có thể kết nối đến mạng Provider thông qua một mạng ảo (virtual network) để cung cấp khả năng truy cập vào các tài nguyên bên ngoài, tạo một môi trường điện toán đám mây đầy đủ.
2. Cài đặt các thành phần Networking của OpenStack.
Các gói tin được cài đặt trong lệnh apt install
là các thành phần cần thiết của dịch vụ Networking của OpenStack:
- neutron-server: Là thành phần chính của dịch vụ Networking, cung cấp API để quản lý mạng trong hạ tầng OpenStack.
- neutron-plugin-ml2: Plugin ML2 cho phép Networking sử dụng nhiều driver mạng khác nhau. Plugin này là một phần của ML2 (Modular Layer 2) framework, là một kiến trúc plugin động cho phép Networking sử dụng nhiều driver mạng khác nhau như Open vSwitch, Linux Bridge và các driver mạng khác.
- neutron-linuxbridge-agent: Là agent cho phép Linux Bridge driver được sử dụng với Networking, cung cấp các chức năng để giao tiếp với những thiết bị mạng dựa trên Linux Bridge.
- neutron-dhcp-agent: Là agent cho phép DHCP (Dynamic Host Configuration Protocol) được sử dụng với Networking, cung cấp các địa chỉ IP cho các máy ảo trong hạ tầng OpenStack.
- neutron-metadata-agent: Là agent cho phép metadata service được sử dụng với Networking, cung cấp các thông tin metadata cho các máy ảo trong hạ tầng OpenStack.
apt install neutron-server neutron-plugin-ml2 \
neutron-linuxbridge-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 đến cơ sở dữ liệu MySQL cho dịch vụ Neutron.
[database]
# ...
connection = mysql+pymysql://neutron:NEUTRON_DBPASS@controller/neutron
Trong đóconnection
: Chứa thông tin kết nối đến cơ sở dữ liệu MySQL. neutron
là tên người dùng được tạo ra trên MySQL để sử dụng bởi Neutron service, NEUTRON_DBPASS
là mật khẩu của người dùng neutron
, controller
là tên hoặc địa chỉ IP của node MySQL.
Phần cấu hình [DEFAULT]
cấu hình như sau:
[DEFAULT]
# ...
core_plugin = ml2
service_plugins =
auth_strategy = keystone
transport_url = rabbit://openstack:RABBIT_PASS@controller
notify_nova_on_port_status_changes = true
notify_nova_on_port_data_changes = true
Trong đó:
core_plugin = ml2
: Đây là plugin dịch vụ mạng cốt lõi, trong trường hợp này là ML2 (Modular Layer 2) plugin, cho phép sử dụng nhiều driver khác nhau để triển khai các mạng ảo.- service_plugins =: Các plugin dịch vụ mạng phụ được sử dụng. Nếu bạn không chỉ định service_plugins, Neutron sẽ sử dụng các plugin mặc định. Tuy nhiên, không có plugin dịch vụ mặc định cụ thể nào được định nghĩa trong Neutron. Thay vào đó, các plugin mặc định sẽ phụ thuộc vào cấu hình cụ thể của bạn và phiên bản OpenStack bạn đang sử dụng.
- Dưới đây là một số plugin dịch vụ mạng phụ phổ biến mà bạn có thể sử dụng trong Neutron:
- service_plugins =: Các plugin dịch vụ mạng phụ được sử dụng. Nếu bạn không chỉ định service_plugins, Neutron sẽ sử dụng các plugin mặc định. Tuy nhiên, không có plugin dịch vụ mặc định cụ thể nào được định nghĩa trong Neutron. Thay vào đó, các plugin mặc định sẽ phụ thuộc vào cấu hình cụ thể của bạn và phiên bản OpenStack bạn đang sử dụng.
- service_plugins =: Các plugin dịch vụ mạng phụ được sử dụng. Nếu bạn không chỉ định service_plugins, Neutron sẽ sử dụng các plugin mặc định. Tuy nhiên, không có plugin dịch vụ mặc định cụ thể nào được định nghĩa trong Neutron. Thay vào đó, các plugin mặc định sẽ phụ thuộc vào cấu hình cụ thể của bạn và phiên bản OpenStack bạn đang sử dụng.
- service_plugins =: Các plugin dịch vụ mạng phụ được sử dụng. Nếu bạn không chỉ định service_plugins, Neutron sẽ sử dụng các plugin mặc định. Tuy nhiên, không có plugin dịch vụ mặc định cụ thể nào được định nghĩa trong Neutron. Thay vào đó, các plugin mặc định sẽ phụ thuộc vào cấu hình cụ thể của bạn và phiên bản OpenStack bạn đang sử dụng.
- service_plugins =: Các plugin dịch vụ mạng phụ được sử dụng. Nếu bạn không chỉ định service_plugins, Neutron sẽ sử dụng các plugin mặc định. Tuy nhiên, không có plugin dịch vụ mặc định cụ thể nào được định nghĩa trong Neutron. Thay vào đó, các plugin mặc định sẽ phụ thuộc vào cấu hình cụ thể của bạn và phiên bản OpenStack bạn đang sử dụng.
- service_plugins =: Các plugin dịch vụ mạng phụ được sử dụng. Nếu bạn không chỉ định service_plugins, Neutron sẽ sử dụng các plugin mặc định. Tuy nhiên, không có plugin dịch vụ mặc định cụ thể nào được định nghĩa trong Neutron. Thay vào đó, các plugin mặc định sẽ phụ thuộc vào cấu hình cụ thể của bạn và phiên bản OpenStack bạn đang sử dụng.
- Dưới đây là một số plugin dịch vụ mạng phụ phổ biến mà bạn có thể sử dụng trong Neutron:
auth_strategy = keystone
: Cấu hình xác thực sử dụng Keystone, cho phép đăng nhập và sử dụng các dịch vụ của OpenStack.transport_url = rabbit://openstack:RABBIT_PASS@controller
: RabbitMQ là một dịch vụ message broker được sử dụng để gửi và nhận các message giữa các thành phần của OpenStack.transport_url
chỉ định URL kết nối tới RabbitMQ server.notify_nova_on_port_status_changes = true
vànotify_nova_on_port_data_changes = true
: Khi cấu hình làtrue
, Neutron sẽ gửi thông báo tới Nova khi trạng thái hoặc thông tin của cổng thay đổi, để Nova có thể cập nhật thông tin về máy ảo và cổng tương ứng.
Trong đoạn cấu hình [keystone_authtoken]
sẽ định nghĩa các thông tin xác thực với Keystone Authentication Token.
[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: Địa chỉ URL của Identity service. Trong trường hợp này, địa chỉ là http://controller:5000.
- auth_url: Địa chỉ URL của
Identity service
, giống vớiwww_authenticate_uri
. - memcached_servers: Danh sách các memcached servers sẽ được sử dụng để lưu trữ token. Trong trường hợp này, chỉ có một server là
controller:11211
. - auth_type: Kiểu xác thực. Trong trường hợp này, sử dụng kiểu xác thực
password
. - project_domain_name: Tên domain của project. Trong trường hợp này, domain là
default
. - user_domain_name: Tên domain của user. Trong trường hợp này, domain là
default
. - project_name: Tên project được sử dụng để đăng nhập. Trong trường hợp này, sử dụng project là
service
. - username: Tên user được sử dụng để đăng nhập. Trong trường hợp này, sử dụng user là
neutron
. - password: Mật khẩu tương ứng với tên user được sử dụng để đăng nhập. Trong trường hợp này, sử dụng mật khẩu là
NEUTRON_PASS
.
Cấu hình trong block [nova]
là cấu hình xác thực (authentication) cho dịch vụ OpenStack Nova. Các thông tin được cung cấp bao gồm:
[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
auth_url
: địa chỉ URL của Keystone API endpoint để xác thực.auth_type
: loại xác thực sử dụng. Trong trường hợp này làpassword
.project_domain_name
: tên domain của project sử dụng dịch vụ, mặc định làdefault
.user_domain_name
: tên domain của user, mặc định làdefault
.region_name
: tên vùng (region) trong Keystone, mặc định làRegionOne
.project_name
: tên project sử dụng dịch vụ, trong trường hợp này làservice
.username
: tên user được sử dụng để xác thực, trong trường hợp này lànova
.password
: mật khẩu được sử dụng để xác thực usernova
.
Phần [oslo_concurrency]
được sử dụng để định cấu hình các thông số về đồng thời hoá (concurrency) trong Neutron. Trong phần này, lock_path
là đường dẫn đến thư mục chứa các file lock được sử dụng để đồng bộ hóa truy cập đến các tài nguyên chung của Neutron. Các file lock này được sử dụng để đảm bảo rằng các tiến trình đồng thời của Neutron không thể cùng truy cập vào cùng một tài nguyên và gây ra xung đột hoặc lỗi. Trong ví dụ trên, lock_path
được đặt là /var/lib/neutron/tmp
.
[oslo_concurrency]
# ...
lock_path = /var/lib/neutron/tmp
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.
File cấu hình /etc/neutron/plugins/ml2/ml2_conf.ini
chứa các thiết lập cần thiết để cấu hình và điều khiển plugin ML2. Các thiết lập này bao gồm loại mạng được hỗ trợ, cơ sở hạ tầng phần cứng mạng, cấu hình cho các driver cụ thể và nhiều hơn nữa.
[ml2]
# ...
type_drivers = flat,vlan
tenant_network_types =
mechanism_drivers = linuxbridge
extension_drivers = port_security
Các giá trị được cấu hình trong file ml2_conf.ini gồm:
- type_drivers: Chỉ định các driver cho các loại network, loại mạng mà ML2 hỗ trợ (ví dụ: flat, vlan, vxlan).
- tenant_network_types:
- Loại mạng mà người dùng cuối (tenants) có thể tạo.
- Chỉ định các loại mạng ảo được dùng trong tenant, ở đây không có giá trị nào, có nghĩa là tất cả các loại mạng ảo đều cho phép sử dụng.
- mechanism_drivers: Chỉ định driver được sử dụng để điều khiển switch layer-2, trong trường hợp này sử dụng driver LinuxBridge.
- extension_drivers: Chỉ định các driver được sử dụng để cung cấp các tính năng mở rộng cho ML2. Ở đây chỉ sử dụng driver
port_security
để cung cấp chức năng bảo mật port.
Khi bạn cấu hình OpenStack để sử dụng flat networks (mạng phẳng), chúng ta chỉ định rằng tất cả các máy ảo (VMs) sẽ nằm trên cùng một mạng con và sẽ không được phân chia thành các mạng con riêng biệt.
Trong đoạn cấu hình flat_networks: provider
chỉ định rằng mạng có tên provider
sẽ được cấu hình như một flat networks.
[ml2_type_flat]
# ...
flat_networks = provider
Dòng enable_ipset = true
trong phần [securitygroup]
cho biết rằng chế độ IP set đã được bật. IP set là một tính năng trong Linux giúp quản lý và tìm kiếm các địa chỉ IP một cách hiệu quả. Khi enable_ipset
được đặt thành true
, OpenStack sẽ sử dụng IP set để tăng hiệu suất của các tính năng bảo mật, như việc áp dụng các quy tắc bảo mật cho từng địa chỉ IP.
[securitygroup]
# ...
enable_ipset = true
Cấu hình Linux Bridge Agent.
Trong file cấu hình /etc/neutron/plugins/ml2/linuxbridge_agent.ini
, ta có các thiết lập như sau:
[linux_bridge]
: ở đây, physical_interface_mappings
chỉ định các interface vật lý được sử dụng cho các flat networks.
Cụ thể, provider:PROVIDER_INTERFACE_NAME
cho biết mạng provider được kết nối đến interface PROVIDER_INTERFACE_NAME
.
[linux_bridge]
physical_interface_mappings = provider:PROVIDER_INTERFACE_NAME
Phần enable_vxlan
là một thiết lập trong cấu hình Neutron của OpenStack nằm trong [vxlan]
.
Khi enable_vxlan
được đặt thành false
, điều này có nghĩa là bạn không sử dụng VXLAN (Virtual Extensible LAN) như là một phương pháp tạo mạng overlay. Mạng overlay là một mạng ảo được tạo trên mạng vật lý hiện có, cho phép bạn tạo ra các mạng con ảo và định tuyến giữa chúng mà không cần thay đổi cấu hình mạng vật lý.
VXLAN là một giao thức phổ biến được sử dụng để tạo mạng overlay trong các môi trường ảo hóa và đám mây. Nếu bạn không sử dụng VXLAN, bạn có thể sử dụng một phương pháp tạo mạng overlay khác như GRE, hoặc sử dụng flat networks hoặc VLAN nếu không cần đến chức năng mạng overlay.
[vxlan]
enable_vxlan = false
[securitygroup]
: enable_security_group
được đặt thành true
cho phép tính năng nhóm bảo mật và firewall_driver
được đặt thành neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
chỉ định firewall driver được sử dụng là IptablesFirewallDriver
.
[securitygroup]
# ...
enable_security_group = true
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
Cấu hình DHCP Agent.
Trong file cấu hình /etc/neutron/dhcp_agent.ini
, ta có các thông số cấu hình cho DHCP agent trong OpenStack Networking, cụ thể:
interface_driver = linuxbridge
: chỉ định driver sử dụng cho việc kết nối với Linux bridge.dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq
: chỉ định driver sử dụng cho DHCP agent.enable_isolated_metadata = true
: cho phép các máy ảo được kết nối đến các mạng self-service có thể truy cập được tới metadata server của OpenStack.
[DEFAULT]
# ...
interface_driver = linuxbridge
dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq
enable_isolated_metadata = true
Quay lại phần cấu hình Networking controller node để tiếp tục.