VK Cloud logo

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

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

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-контроллерін орнатыңыз

Орнату кезінде PROXY протоколын пайдалану режимін таңдаңыз, өйткені бұл TCP жүктеме балансировщигімен толыққанды өзара әрекеттесу үшін қажет. Егер Ingress-контроллерін осы протоколды қолдамай орнатсаңыз, онда контроллер сұраулардың тікелей көзі туралы ақпаратты қамтитын тақырыптарды өңдей алмайды.

PROXY протоколын қолдайтын NGINX Ingress Controller орнату үшін:

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

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

    helm install nginx-ingress-tcp nginx-stable/nginx-ingress --set-string 'controller.config.entries.use-proxy-protocol=true' --create-namespace --namespace example-nginx-ingress-tcp
  3. Ingress-контроллерінің орнатылуы аяқталғанын және контроллердің сыртқы IP-мекенжай алғанын күтіңіз.

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

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

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

    NAME                            TYPE     CLUSTER-IP    EXTERNAL-IP                PORT(S) AGEnginx-ingress-tcp-nginx-ingress LoadBalancer ... <балансировщикке тағайындалған IP-мекенжай> ... ...

Браузерде http://<балансировщикке тағайындалған IP-мекенжай> адресіне өтіп, Ingress-контроллерінің жұмысын тексеріңіз. Егер контроллер дұрыс бапталса, HTTP 404 күйі бар бет көрсетіледі.

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

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

Төменде Ingress-контроллерінде SSL/TLS-сессияларды терминирлей отырып Ingress ресурсын қалай жасау керегі көрсетіледі.

Ingress ресурсін жасау үшін:

  1. Сертификат туралы деректерді қамтитын Kubernetes секретін жасаңыз. Ол HTTPS-трафикпен жұмыс істеген кезде Ingress-контроллері тарапынан пайдаланылады.

    Бұл секретте cafe.example.com доменінде жарияланған қосымшаларға қол жеткізу үшін пайдаланылатын NGINX өздігінен қол қойылған сертификатының жария және жабық бөліктері бар.

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

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

    kubectl apply -f ./cafe-secret.yaml

    cafe-secret секреті жасалады.

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

    kubectl describe secret cafe-secret

    Секрет туралы негізгі ақпарат шығарылады.

  5. cafe.example.com хостына келетін сұрауларды өңдейтін Ingress ресурсін жасаңыз:

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

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

      kubectl apply -f ./cafe-ingress.yaml

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

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

    kubectl describe ingress cafe-ingress

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

    Name:             cafe-ingressLabels:           <none>Namespace:        defaultAddress:          <балансировщикке тағайындалған IP-мекенжай>Ingress Class:    nginxDefault backend:  <default>TLS:  cafe-secret terminates cafe.example.comRules:  Host              Path  Backends  ----              ----  --------  cafe.example.com                    /tea      tea-svc:80 (...)                    /coffee   coffee-svc:80 (...)

    Балансировщикке тағайындалған Ingress IP-мекенжайы Ingress-контроллеріне тағайындалған IP-мекенжаймен сәйкес келуі керек екеніне назар аударыңыз. Бұл мекенжай VK Cloud платформасының TCP-балансировщигіне тиесілі, ол кіріс трафикті Ingress-контроллеріне бағыттайды.

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

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

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

    curl -k --resolve cafe.example.com:443:<Ingress IP-мекенжайы> https://cafe.example.com/coffee

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

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

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

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

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

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

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

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