Sunday, January 19, 2025

[Openstack] Phần 8: Self-service networks

-

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 driver linuxbridge.
  • 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ó plugin router được tải.
  • allow_overlapping_ips = true: Khi được đặt thành true, 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ành true, 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ùng neutron.

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ùng nova.

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ột vlanid duy nhất, và các gói tin trên mạng vật lý được gắn thêm vlanid để 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ột vni duy nhất, và các gói tin trên mạng vật lý được gắn thêm vni để 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.

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ạng provider được ánh xạ tới PROVIDER_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ành true), 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.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

4,956FansLike
256FollowersFollow
223SubscribersSubscribe
spot_img

Related Stories