Для работы с openstack cli необходимы следующие пакеты (Названия актуальны для altlinux p10:
python3-module-openstackclient
python3-module-octaviaclient (Для работы loadbalancer)
python3-module-neutronclient (Для работы loadbalancer)
Для подключения клиента openstack нужно экспортировать следующие переменные:
OS_AUTH_URL=
OS_PROJECT_NAME=""
OS_USER_DOMAIN_NAME=""
OS_USERNAME=""
OS_PASSWORD=
OS_PROJECT_DOMAIN_NAME="" / OS_PROJECT_DOMAIN_ID=""
Из этих 2х переменных должна быть импортирована только 1
OS_PROJECT_DOMAIN_NAME используется для логина из-под пользователя
OS_PROJECT_DOMAIN_ID используется для логина из-под администратора
Если подключаться от админа, то OS_USER_DOMAIN_NAME="Default", OS_PROJECT_DOMAIN_ID="default"
Есть ещё переменные, но базово они не нужны, подробнее https://docs.oracle.com/html/E78304_03/openstack-envars.html
Если между Кибер Инфраструктурой и клиентом нет доверия - необходимо к каждой команде openstack добавлять опцию --insecure
Создание домена:
openstack domain create "$domain_name"
Создание проекта в домене:
openstack project create "$project_name" --domain "$domain_name"
Создание пользователя:
openstack user create "$username" --password "$password" --domain "$domain_name"
Выдать роль для пользователя и присоединить к проекту:
openstack role add --user "$user_id" --project "$project_name" admin
Где «admin» это привилегия, подробнее https://docs.openstack.org/keystone/latest/admin/service-api-protection.html
Задать лимиты для пользователя:
openstack quota set --cores "$CORES_LIMIT" --ram "$RAM_LIMIT" --gigabytes "$GIGABYTES_LIMIT" --floating-ips "$FLOATING_IPS_LIMIT" "$project_name"
Компоненты сети:
Создание сети:
openstack network create $net_name
Создание подсети с dhcp:
openstack subnet create --dhcp --subnet-range 192.168.123.0/24 --allocation-pool start=192.168.123.100,end=192.168.123.200 --gateway 192.168.123.1 --network $net_name $subnet_name
Создание маршрутизатора:
openstack router create --enable-snat --external-gateway public $router_name #Пока что маршрутизатор не подсоединен к локальной сети $net_name
openstack port create --network $net_name --fixed-ip subnet=$subnet_name,ip-address=192.168.123.1 $port_name #Создали порт для маршрутизатора в локальной сети
openstack router add port $router_name $port_name #Присоединили порт к маршрутизатору
openstack router set --route destination=$subnet2,gateway=$router1 $router2 #Добавить статический маршрут роутеру
Компоненты ВМ:
Создание порта для вм:
openstack port create --network $net_name --fixed-ip subnet=$subnet_name,ip-address=192.168.123.2 $port_name
Создание flavor:
openstack flavor create --ram 1024 --vcpus 1 $flavor_name
Загрузка image:
openstack image create --file image_name.qcow2 --disk-format qcow2 $image_name
Создание ключа:
openstack keypair create --public-key ~/.ssh/id_rsa.pub $key_name
Создание ВМ:
Без порта:
openstack server create --image $image_name --boot-from-volume 10 --network $net_name --flavor $flavor_name --key-name $key_name $server_name
С портом:
openstack server create --image $image_name --boot-from-volume 10 --port $port_name --flavor $flavor_name --key-name $key_name $server_name
#Опция boot-from-volume используется если в качестве image используется образ диска (raw,qcow2…)
Прикрепить floating ip к порту:
openstack floating ip create --port $port_name public
#public -- Внешняя сеть.
Компоненты балансировщика нагрузки:
Пример создания HTTPS -- HTTPS балансировщика, основанного на алгоритме ROUND_ROBIN
Создание порта для балансировщика:
openstack port create --network $net_name --fixed-ip subnet=$subnet_name,ip-address=192.168.123.10 $lb_port_name
Создание самого балансировщика:
openstack loadbalancer create --name lb_name --vip-port-id $lb_port_name
Создание пула балансировки:
openstack loadbalancer pool create --name $lb_pool_name --lb-algorithm ROUND_ROBIN --protocol HTTPS --loadbalancer $lb_name
Создание первого участника балансировки:
openstack loadbalancer member create --address 192.168.123.2 --protocol-port 443 --name $member_name $lb_pool_name
Создание второго участника балансировки:
openstack loadbalancer member create --address 192.168.123.3 --protocol-port 443 --name $member_name $lb_pool_name
Создание слушателя:
openstack loadbalancer listener create --protocol HTTPS --protocol-port 443 --default-pool $lb_pool_name $lb_name
Создание плавающего ip:
openstack floating ip create --port $port_name public
#public -- Внешняя сеть.
Создание тома:
openstack volume create --image $image_name --size 10 $vol_name
Добавить том к ВМ:
openstack server add volume $server_id $vol_id--device /dev/sd*
#Здесь используются именно id элементов, с именами работать не будет
Отсоединить том от ВМ:
openstack server remove volume $server_id $vol_id
Удалить том:
openstack volume delete $vol_name
Компоненты групп безопасности:
Создание группы безопасности:
openstack security group create $sg_name
Создание правила для группы безопасности:
openstack security group rule create --ingress --protocol tcp --dst-port 44 $sg_name
Прикрепить группу безопасности к порту:
openstack port set --security-group $sg_name $port_name
Указание группы безопасности при создании ВМ без порта:
openstack server create --image $image_name --boot-from-volume 10 --network $net_name --security-group $sg_name --flavor $flavor_name --key-name $key_name $server_name
Openstack cli работает, в основном, с ID компонентов, для их просмотра можно ввести:
openstack loadbalancer list
Для подробного просмотра компонента можно ввести:
openstack loadbalancer show $lb_id
Для более узконаправленного вывода можно использовать опции:
-c Для вывода определенного столбика
-f Для определения формата вывода, по умолчанию table
Например:
openstack loadbalancer list -c ID #В выводе будет только столбик с ID
openstack loadbalancer list -c ID -f value #В выводе будет только столбик с ID и без табличного оформления
Решение проблемы простейшее:
sed -i 's|^tmpfs\s\+/tmp\s\+tmpfs\s\+nosuid\s\+0 0|tmpfs\t/tmp\ttmpfs\tnosuid,size=2G\t0 0|' /etc/fstab
reboot
Я считаю что NetworkManager сильно проще в понимании и конфигурировании, так же при обновлении ядра netplan может легко поломаться. Поэтому я обычно настраиваю NetworkManager, следующим образом:
Для начала - советую поставить пароль для пользователя altlinux, иначе в случае чего-то непредвиденного зайти более не получится.
passwd altlinux
Установим необходимые пакеты;
apt-get update && apt-get install NetworkManager{,-tui} vim-console -y
Создаем файл для netplan, который будет всё редиректить на NetworkManager:
vim /etc/netplan/01-er-netplan-fix.yaml
network: version: 2 renderer: NetworkManager
Убираем конфиг-файл netplan, полученный по cloudinit:
mv /etc/netplan/50-cloud-init.yaml ./
Теперь создадим файл для NetworkManager, где скажем, что нужно контролировать все интерфейсы:
vim /etc/NetworkManager/conf.d/manage-all.conf
[keyfile] unmanaged-devices=none
Применяем настройки netplan:
netplan apply
Заходим в nmtui и убеждаемся, что порт автоматически включается:
nmtui
Включаем NetworkManager
systemctl enable --now NetworkManager
После этого всего, далеко не факт что NetworkManager будет получать новую адресацию по cloudinit. Возможно прийдется конфигурировать новые сетевые интерфейсы вручную
Данное решение взято с https://askubuntu.com/questions/1442352/migrate-ubuntu-server-from-netplan-to-networkmanager-without-disconnection-poss