VK Cloud logo

Ingress-контроллерін HTTP-балансировщикпен жайып орналастыру

Ingress-контроллерін VK Cloud платформасының HTTP жүктеме балансировщигімен бірге жайып орналастыруға болады. Төменде мысал ретінде контроллердің жұмысқа қабілеттілігін тексеру үшін қарапайым демо-қосымшалар мен Ingress ресурсы жасалады.

Төменде NGINX Ingress Controller жайып орналастырылады деп болжанады. Алайда ұсынылған тәсілдерді басқа Ingress-контроллерлерге, мысалы, Traefik-ке де бейімдеуге болады. Мұндай жайып орналастыру кезінде Ingress үшін жүктеме балансировщигінің ережелеріне worker-түйіндерді қолмен қосу қажет. Бұл worker-топ өлшемін қолмен өзгерткенде де, автомасштабтауды қосқанда да дұрыс.

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

  1. Жасаңыз Kubernetes кластерін өзекті нұсқада, егер бұл әлі жасалмаған болса.

    Кластерді жасаған кезде Сыртқы IP тағайындау опциясын таңдаңыз.

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

  2. Тексеріңіз, кластерде NGINX Ingress (ingress-nginx) аддоны орнатылмаған болуы керек. Көрсету мақсатында Ingress-контроллері қолмен орнатылады.

  3. Тексеріңіз, kubectl көмегімен кластерге қосыла алуыңыз керек.

  4. Утилита әлі орнатылмаған болса, Helm орнатыңыз.

  5. Утилита әлі орнатылмаған болса, curl орнатыңыз.

2. Демо-қосымшаларды жайып орналастырыңыз

Осы қосымшаларға қолжетімділік Ingress-контроллері арқылы Ingress ресурсының көмегімен ұйымдастырылады.

Көрсету үшін NGINX-тен Cafe мысалындағы tea және coffee қосымшалары пайдаланылады. Әр қосымша ReplicaSet-тен, Deployment-тен және осы Deployment-ке сәйкес келетін Service-тен тұрады.

Демо-қосымшаларды жайып орналастыру үшін:

  1. cafe.yaml манифесін жүктеп алыңыз.

  2. Осы манифесті кластерде қолданыңыз:

    kubectl apply -f ./cafe.yaml

Қосымшалар компоненттерінің күйін тексеру үшін команданы орындаңыз:

kubectl get svc,rs,deployment -n default

Команданың шығысы мынаған ұқсас болуы керек:

NAME                 TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)   AGEservice/coffee-svc   ClusterIP   ...              <none>        80/TCP    ...service/tea-svc      ClusterIP   ...              <none>        80/TCP    ...NAME                                DESIRED   CURRENT   READY   AGEreplicaset.apps/coffee-7c86d7d67c   2         2         2       ...replicaset.apps/tea-5c457db9        3         3         3       ...NAME                     READY   UP-TO-DATE   AVAILABLE   AGEdeployment.apps/coffee   2/2     2            2           ...deployment.apps/tea      3/3     3            3           ...

3. Ingress-контроллерін орнатыңыз

  1. NGINX үшін Helm-репозиторийін қосыңыз:

    helm repo add nginx-stable https://helm.nginx.com/stablehelm repo update
  2. Команданы орындап, NodePort сервисімен Ingress-контроллерін орнатыңыз:

    helm install nginx-ingress-http nginx-stable/nginx-ingress \ --create-namespace --namespace example-nginx-ingress-http \ --set controller.service.type=NodePort \ --set controller.service.httpsPort.enable=false \ --set controller.service.externalTrafficPolicy=Local
  3. Ingress-контроллерінің орнатылуы аяқталғанын және контроллерге порт тағайындалғанын күтіңіз.

    Ingress-контроллерінің күйін тексеру үшін команданы орындаңыз:

    kubectl get svc -n example-nginx-ingress-http

    Команданың шығысы мынаған ұқсас болуы керек:

    NAME                               TYPE       CLUSTER-IP     EXTERNAL-IP   PORT(S)                     AGEnginx-ingress-http-nginx-ingress   NodePort   ...            <none>        80:<тағайындалған порт>/TCP   ...

4. HTTP жүктеме балансировщигін жасаңыз

HTTP жүктеме балансировщигі SSL/TLS қосылыстарын терминирлейді және тек HTTP-трафикті Ingress-контроллеріне қайта бағыттайды.

Балансировщикті баптау үшін:

  1. Қажетті деректерді жинаңыз:

    • Кластер түйіндері орналасқан желі мен ішкі желінің атаулары.
    • Кластердің master-түйіндері мен worker-түйіндеріне сәйкес келетін Cloud Servers сервисі инстанстарының атаулары.
    • Алдыңғы қадамда Ingress-контроллеріне тағайындалған порт нөмірі.
  2. Балансировщик жасаңыз:

    1. VK Cloud жеке кабинетіне өтіңіз.
    2. Қажетті кластер орналасқан жобаны таңдаңыз.
    3. Виртуалды желілер → Жүктеме балансировщиктері бөліміне өтіңіз.
    4. Қосу батырмасын басыңыз.
    5. Ашылған терезеде:
      1. балансировщик атауын орнатыңыз (кез келген).

      2. Кластердегілермен бірдей желі мен ішкі желіні таңдаңыз.

      3. DNS атауын орнатыңыз (кез келген).

      4. Сыртқы IP тағайындау опциясының қосулы екеніне көз жеткізіңіз.

      5. Әрбір трафик түрі үшін өңдеу параметрлерін орнатыңыз:

        1. Балансировка ережелері блогында + Ереже қосу сілтемесін басыңыз.

        2. Тағайындау протоколы ретінде HTTP таңдаңыз, оған Ingress-контроллеріне тағайындалған портты орнатыңыз.

        3. Рұқсат етілген CIDR блогында + Мекенжай қосу сілтемесін басыңыз. 0.0.0.0/0 енгізіңіз.

        4. X-Forwarded-For тақырыбын жіберу опциясын таңдаңыз.

        5. Келесі инстанстарға қолдану блогында кластердің master-түйіндері мен worker-түйіндеріне сәйкес келетін барлық Cloud Servers сервисі инстанстарын қосыңыз.

          Барлық инстанстар үшін 1 мәніне тең бірдей салмақтарды орнатыңыз.

        6. Келесі қадам батырмасын басыңыз.

        7. Қосу батырмасын басыңыз.

    Балансировщикті жасау операциясы басталады, ол біраз уақыт алады.

  3. Балансировщик жасалғаннан кейін оның жария IP-мекенжайын көшіріп алыңыз, ол Ingress арқылы жарияланған ресурстарға қол жеткізу үшін қажет болады.

5. Ingress ресурсін жасаңыз

Ingress ресурсы coffee-svc және tea-svc сервистерін cafe.example.com доменінде Ingress-контроллері арқылы жариялап, осылайша қосымшаларға қолжетімділік ұсынады.

Төменде бұған дейін бапталған HTTP жүктеме балансировщигінен келетін тек HTTP-трафикпен жұмыс істейтін Ingress ресурсын қалай жасау керегі көрсетіледі:

  1. cafe-ingress.yaml манифест файлын келесі мазмұнмен жасаңыз:

  2. Осы манифесті кластерде қолданыңыз:

    kubectl apply -f ./cafe-ingress.yaml

    cafe-ingress Ingress ресурсы жасалады.

  3. Келесі команданы орындап, ресурс сәтті жасалғанын тексеріңіз:

    kubectl describe ingress cafe-ingress

    Команданың шығысы мынаған ұқсас болуы керек:

    Name:             cafe-ingress-httpLabels:           <none>Namespace:        defaultAddress:Ingress Class:    nginxDefault backend:  <default>Rules:  Host              Path  Backends  ----              ----  --------  cafe.example.com                    /tea      tea-svc:80 (10.100.54.15:8080,10.100.54.16:8080,10.100.54.17:8080)                    /coffee   coffee-svc:80 (10.100.54.13:8080,10.100.54.14:8080)

6. Қосымшалардың қолжетімділігін тексеріңіз

  1. default аттар кеңістігіндегі барлық подтар тізімін алып, tea және coffee атаулары бар подтардың бар екеніне көз жеткізіңіз:

    kubectl get pods
  2. Команданы орындаңыз:

    curl -k --resolve cafe.example.com:443:<HTTP-балансировщиктің жария IP-мекенжайы> https://cafe.example.com/coffee

    Сұрауға coffee ішіндегі екі подтың бірі жауап беруі керек. Жауапта жауап берген подтың атауы (Server name) болады, мысалы:

    Server address: ...:8080Server name: coffee-7c86d7d67c-zsmwzDate: ...URI: /coffeeRequest ID: ...

    Осындай жауаптардың алынуы Ingress-контроллерінің дұрыс бапталғанын білдіреді:

    • VK Cloud HTTP жүктеме балансировщигімен өзара әрекеттеседі (ол SSL/TLS-сессияларын терминирлейді);
    • жайып орналастырылған қосымшаларға сәйкес келетін сервистерге қолжетімділік береді.

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

Жұмыс істеп тұрған кластер тарифтеледі және есептеу ресурстарын тұтынады. Егер Ingress-контроллерінің жұмысын тексеру үшін жасалған Kubernetes ресурстары сізге енді қажет болмаса, оларды жойыңыз:

  1. Манифест файлдарында сипатталған ресурстарды, example-nginx-ingress-http қосымшасын, сондай-ақ example-nginx-ingress-http аттар кеңістігін және онымен байланысты ресурстарды жойыңыз:

    kubectl delete -f ./cafe-ingress.yamlkubectl delete -f ./cafe.yamlhelm uninstall nginx-ingress-http -n example-nginx-ingress-httpkubectl delete namespace example-nginx-ingress-http
  2. Тоқтатыңыз жасалған кластерді, оны кейінірек пайдалану үшін, немесе жойыңыз оны біржола.