VK Cloud logo

Виртуалды IP мекенжайын ұйымдастыру

Егер кіріс трафикті бірнеше біртипті виртуалды машиналардан тұратын кластер өңдесе, олар үшін виртуалды IP мекенжайын (Virtual IP, VIP) жасауға болады. Мұндай мекенжай осы виртуалды машиналар арқылы кіріс трафикті ақауға төзімді түрде өңдеуді ұйымдастыру үшін қолданылады. Технология былай жұмыс істейді: VIP кластердегі виртуалды машиналардың біріне тағайындалады, ол осы VIP-тен келетін трафикті өңдейді. Осындай мекенжайға жүгінген клиенттер осы виртуалды машинаға бағытталады. Егер виртуалды машина істен шықса, VIP кластердегі басқа виртуалды машинаға ауысады, ал трафикті өңдеу жалғасады. Виртуалды машиналар өз күйін бақылап, VIP тағайындауын VRRP протоколы арқылы басқарады.

Виртуалды IP мекенжайын баптауды көрсету үшін:

  • екі виртуалды машина жасалады, олар үшін:
    • виртуалды IP мекенжайы жасалады;
    • осы IP мекенжайына қызмет көрсету үшін keepalived іске асырылымындағы VRRP бапталады.
  • барлық қажетті баптаулар мен жұмысқа қабілеттілікті тексеру орындалатын Floating IP мекенжайы бар үшінші виртуалды машина жасалады.
Сценарийге арналған диаграмма

1. Дайындық қадамдары

  1. OpenStack клиенті орнатылғанына көз жеткізіңіз және жобада аутентификациядан өтіңіз.

  2. Виртуалды машиналар мен виртуалды IP мекенжайы орналастырылатын ішкі желіні таңдаңыз. Олар бір ішкі желіде орналасуы керек.

    Егер қажетті ішкі желі болмаса, оны жасаңыз.

    Келесі ақпаратты жазып алыңыз:

    • ішкі желінің атауы;
    • ішкі желі орналасқан желінің атауы.

    Мысал ретінде mynetwork желісіндегі mysubnet ішкі желісі пайдаланылады.

  3. Виртуалды IP мекенжайы ретінде қай IP мекенжай қолданылатынын анықтаңыз. Бұл IP мекенжайды ешбір объект (мысалы, виртуалды машина немесе жүктеме теңгергіші) пайдаланбауы керек.

    Мысал ретінде 192.168.0.254/24 мекенжайы пайдаланылады.

  4. Бұл IP мекенжайдың басқа объектілер тарапынан қолданылмайтынына көз жеткізіңіз (мысалы, виртуалды машинаның немесе жүктеме теңгергішінің портына тағайындалмауы керек). Бұған қол жеткізудің ең қарапайым тәсілдерінің бірі — таңдалған мекенжаймен OpenStack портын жасап, кейін бұл портты еш жерде қолданбау.

    Осындай портты жасау үшін OpenStack CLI ішінде команданы орындаңыз:

    openstack port create <ИМЯ_ПОРТА> --network mynetwork --fixed-ip subnet=mysubnet,ip-address=192.168.0.254
  5. kld-vm1, kld-vm-2 және kld-jumphost-vm виртуалды машиналарын жасаңыз.

    Бұл виртуалды машиналар тобының өз ішіндегі кез келген кіріс және шығыс трафикке рұқсат етілген қауіпсіздік тобына орналастырылуы керек. Мысалы, мұндай топ — default.

    Егер стандартты емес қауіпсіздік топтары қолданылса, оларда мыналарға рұқсат берілуі керек:

    • kld-vm1 және kld-vm-2 үшін SSH трафигіне;
    • kld-vm1 мен kld-vm-2 арасындағы VRRP трафигіне;
    • таңдалған виртуалды IP мекенжайына ICMP трафигіне (жұмысқа қабілеттілікті тексеру үшін).

    Келесі параметрлерді орнатыңыз:

    • Виртуалды машинаның атауы: kld-vm-1.
    • Конфигурациядағы машиналар саны: 1.
    • Операциялық жүйе: Ubuntu 22.04.
    • Желі: бұрын таңдалған желі мен ішкі желі.
    • DNS атауы: kld-vm-1.
    • Firewall баптаулары: default.
    • Сыртқы IP тағайындау: опция таңдалмағанына көз жеткізіңіз.

    Виртуалды машинаның қалған параметрлерін өз қалауыңыз бойынша таңдаңыз.

  6. kld-vm-1 және kld-vm-2 виртуалды машиналары виртуалды IP мекенжайымен жұмыс істейтін OpenStack портын анықтаңыз:

    1. kld-vm-1 виртуалды машинасы үшін:

      1. SSH арқылы қосылыңыз kld-jumphost-vm виртуалды машинасына.

      2. kld-vm-1 виртуалды машинасына SSH арқылы қосылыңыз.

      3. Команданы орындаңыз:

        ip route | grep default

        Шығыс мысалы:

        default via 192.168.0.1 dev ens3 proto dhcp src 192.168.0.11 metric 100

        Шығыстан келесі ақпаратты жазып алыңыз:

        • Желілік интерфейс атауы (dev кейін келеді): бұл мысалда ens3.
        • Желілік интерфейстің IP мекенжайы (src кейін келеді): бұл мысалда 192.168.0.11.
      4. OpenStack CLI командасын орындаңыз:

        openstack port list -c ID --server kld-vm-1 --fixed-ip ip-address=<IP-АДРЕС_СЕТЕВОГО_ИНТЕРФЕЙСА_ИЗ_ПРЕДЫДУЩЕГО_ШАГА>

        Шығыс мысалы:

        +--------------------------------------+| ID                                   |+--------------------------------------+| e1bd636a-aaaa-bbbb-cccc-a673e7cbef83 |+--------------------------------------+

        Шығыстан OpenStack портының идентификаторын жазып алыңыз.

    2. kld-vm-2 виртуалды машинасында дәл осы әрекеттерді орындаңыз.

Барлық алынған деректерді жазып алыңыз. Келтірілген мысал үшін нәтиже:

Объект

Мәні

kld-vm-1 виртуалды машинасы үшін

Желілік интерфейс атауы

ens3

Желілік интерфейстің IP мекенжайы

192.168.0.11

Желілік интерфейс үшін OpenStack портының идентификаторы

e1bd636a-aaaa-bbbb-cccc-a673e7cbef83

kld-vm-2 виртуалды машинасы үшін

Желілік интерфейс атауы

ens3

Желілік интерфейстің IP мекенжайы

192.168.0.22

Желілік интерфейс үшін OpenStack портының идентификаторы

74268d00-xxxx-yyyy-zzzz-cf9f93536d5c

Басқа

Виртуалды машиналар мен виртуалды IP мекенжайына арналған ішкі желі

192.168.0.0/24

Ішкі желінің атауы

mysubnet

Ішкі желі орналасқан желінің атауы

mynetwork

Виртуалды IP мекенжайы

192.168.0.254/24

2. keepalived орнатыңыз және баптаңыз

  1. keepalived орнатыңыз:

    1. kld-vm-1 виртуалды машинасы үшін:

      1. SSH арқылы қосылыңыз kld-jumphost-vm виртуалды машинасына.

      2. kld-vm-1 виртуалды машинасына SSH арқылы қосылыңыз.

      3. Командаларды орындаңыз:

        sudo apt updatesudo apt install keepalived
    2. kld-vm-2 виртуалды машинасында дәл осы әрекеттерді орындаңыз.

  2. keepalived баптаңыз:

    1. kld-jumphost-vm виртуалды машинасына SSH арқылы қосылыңыз.

    2. kld-vm-1 виртуалды машинасына SSH арқылы қосылыңыз.

    3. /etc/keepalived/keepalived.conf файлын өңдеп, оның мазмұнын келесімен ауыстырыңыз:

      global_defs{  router_id KLD-VM-1}vrrp_instance VI_254{  state MASTER  interface ens3  virtual_router_id 254  priority 120  advert_int 1  authentication  {    auth_type PASS    auth_pass <ПАРОЛЬ_ДЛЯ_АУТЕНТИФИКАЦИИ>  }  virtual_ipaddress  {    192.168.0.254/24  }}

    Конфигурациялық файлда:

    • router_idkeepalived маршрутизаторының идентификаторы, бұл мән әр конфигурация үшін әртүрлі.

    • vrrp_instance — VRRP инстансының баптаулары. VRRP инстансының атауы тек жергілікті деңгейде ғана маңызды, сондықтан әртүрлі виртуалды машиналардағы конфигурациялар үшін бірдей болуы мүмкін.

      • statekeepalived жұмысты бастайтын рөл: MASTER немесе SLAVE. Кейін шеберді таңдау нәтижесіне қарай рөл өзгеруі мүмкін.
      • interface — VRRP жұмыс істейтін интерфейс атауы. Интерфейс атауы тек жергілікті деңгейде ғана маңызды, сондықтан әртүрлі виртуалды машиналардағы конфигурациялар үшін бірдей болуы мүмкін.
      • virtual_router_id — 0-ден 255-ке дейінгі VRRP маршрутизаторының идентификаторы. Екі конфигурацияда да бірдей болуы керек.
      • priority — VRRP шеберін таңдау жүргізілетін басымдық. Бұл жағдайда шебер kld-vm-1 болады, өйткені оның басымдығы ең жоғары.
      • advert_int — VRRP хабарламаларын тарату аралығы (секундпен).
      • authentication — аутентификация параметрлері. Бұл жағдайда аутентификация пароль (PASS) бойынша орындалады. Парольдер (auth_pass мәні) барлық конфигурацияларда бірдей болуы керек.
      • virtual_ipaddress — виртуалды IP мекенжайы. Мәндер барлық конфигурацияларда бірдей болуы керек.

      Параметрлер туралы толығырақ keepalived құжаттамасында қараңыз.

  3. keepalived іске қосыңыз:

    1. kld-vm-1 виртуалды машинасы үшін:

      1. kld-jumphost-vm виртуалды машинасына SSH арқылы қосылыңыз.

      2. kld-vm-1 виртуалды машинасына SSH арқылы қосылыңыз.

      3. Команданы орындаңыз:

        sudo systemctl start keepalived
      4. keepalived күйін тексеру үшін команданы орындаңыз:

        sudo systemctl status keepalived

        Шығыс мысалы:

        ● keepalived.service - Keepalive Daemon (LVS and VRRP)     Loaded: loaded (/lib/systemd/system/keepalived.service; enabled; vendor preset: enabled)     Active: active (running) since Mon 2023-01-09 10:55:35 UTC; 21h ago     ...

        keepalived running күйінде болуы керек.

    2. kld-vm-2 виртуалды машинасында дәл осы әрекеттерді орындаңыз.

3. IP Source Guard баптаңыз

Виртуалды машиналарда орнатылған keepalived тек 192.168.0.11 және 192.168.0.22 IP мекенжайларынан ғана емес, сонымен қатар 192.168.0.254 виртуалды IP мекенжайынан да трафик жібере алуы керек. VK Cloud ішіндегі OpenStack порттарында IP Source Guard механизмі қолданылатындықтан, виртуалды машиналар порттары үшін виртуалды IP мекенжайынан келетін трафикке рұқсат беріңіз:

  1. kld-vm-1 үшін:

    openstack port set e1bd636a-aaaa-bbbb-cccc-a673e7cbef83 --allowed-address ip-address=192.168.0.254/24
  2. kld-vm-2 үшін:

    openstack port set 74268d00-xxxx-yyyy-zzzz-cf9f93536d5c --allowed-address ip-address=192.168.0.254/24

4. Виртуалды IP мекенжайының жұмысқа қабілеттілігін тексеріңіз

Екі терминал сессиясын ашыңыз:

  1. Бірінші сессияда:

    1. SSH арқылы қосылыңыз kld-jumphost-vm виртуалды машинасына.

    2. Виртуалды IP мекенжайын үздіксіз пингтеуді іске қосыңыз:

      ping 192.168.0.254

      IP мекенжайы сәтті пингтелуі керек.

  2. Екінші сессияда:

    1. kld-jumphost-vm виртуалды машинасына SSH арқылы қосылыңыз.

    2. kld-vm-1 виртуалды машинасына SSH арқылы қосылыңыз.

    3. keepalived процесін тоқтатыңыз:

      sudo systemctl stop keepalived

      Бұл виртуалды машина шебер рөлінде болғандықтан және трафикті өңдеуді тоқтатқандықтан, енді виртуалды IP мекенжайына келіп түсетін трафикті өңдеу kld-vm-2 виртуалды машинасына ауысады. Бірінші терминал сессиясында іске қосылған пинг процесі үзілмеуі керек.

    4. keepalived процесін қайта іске қосыңыз:

      sudo systemctl start keepalived

      Виртуалды машина қайтадан шебер рөлін өзіне алып, виртуалды IP мекенжайына келіп түсетін трафикті өңдей бастайды.

    5. Команданы орындаңыз:

      ip address show dev ens3

      Виртуалды IP мекенжайы шығыста бар екенін тексеріңіз:

      ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000    link/ether fa:16:3e:a3:82:f2 brd ff:ff:ff:ff:ff:ff    altname enp0s3    inet 192.168.0.4/24 metric 100 brd 192.168.0.255 scope global dynamic ens3       valid_lft 523420sec preferred_lft 523420sec    inet 192.168.0.254/24 scope global secondary ens3       valid_lft forever preferred_lft forever

Пайдаланылмайтын ресурстарды жойыңыз

Егер жасалған ресурстар енді қажет болмаса, оларды жойыңыз:

  1. Виртуалды машиналарды жойыңыз.
  2. kld-jumphost-vm виртуалды машинасына тағайындалған Floating IP мекенжайын жойыңыз.
  3. Виртуалды IP мекенжайы тағайындалған портты жойыңыз.
  4. Виртуалды машиналар орналастырылған ішкі желіні және желіні жойыңыз.