VK Cloud logo

ExternalDNS орнату және пайдалану

ExternalDNS Ingress немесе Service ресурстарымен жұмыс істеген кезде DNS жазбаларын басқаруды автоматтандыруға мүмкіндік береді. Егер бұл ресурстар ExternalDNS талаптарына сәйкес бапталған болса, онда олар жасалғаннан кейін бірден домендік атау арқылы қолжетімді болады.

ExternalDNS VK Cloud-тағы DNS сервисімен плагин арқылы интеграцияланады. Төменде ExternalDNS-ті кластерге қалай орнату және бұл құралды Ingress және Service ресурстарымен қалай пайдалану керектігі көрсетіледі.

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

  1. Егер бұл әлі жасалмаса, ExternalDNS жұмыс істейтін DNS-аймақты жасаңыз.

    Мысал ретінде төменде example.com аймағы пайдаланылады.

  2. Сыртқы IP мекенжайы бар және интернеттен қолжетімді өзекті нұсқадағы Kubernetes кластерін жасаңыз.

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

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

    Қосылу үшін VK Cloud жеке кабинетінен жүктелген кластер конфигурациясының файлын (kubeconfig) пайдаланыңыз.

  4. Егер утилита әлі орнатылмаса, 3.0.0 немесе одан жоғары нұсқадағы Helm-ді орнатыңыз.

    Орнату үшін кластермен үйлесімді Helm нұсқасын таңдаңыз.

  5. Кластерге арналған kubeconfig файлын көрсететін орта айнымалысын орнатыңыз. Бұл ExternalDNS орнату кезінде kubectl және helm утилиталарымен жұмысты жеңілдетеді.

    Сіздің kubeconfig файлыңызға жол төмендегі мысалдан өзгеше болуы мүмкін.

    export KUBECONFIG="/home/user/.kube/kubernetes-cluster-1234_kubeconfig.yaml"

1. ExternalDNS үшін пайдаланушыны дайындаңыз

ExternalDNS осы VK Cloud пайдаланушысының деректемелерін API VK Cloud-пен өзара әрекеттесу және DNS ресурстық жазбаларын басқару үшін қолданады.

Пайдаланушыны дайындап, барлық қажетті деректемелерді алыңыз:

  1. Бар пайдаланушыны таңдаңыз немесе жобаға жаңа пайдаланушыны шақырыңыз.

    Пайдаланушыға қойылатын талаптар:

    • API арқылы қолжеткізу белсендірілген болуы тиіс.

    • ExternalDNS DNS-аймақ аясында ресурстық жазбалармен жұмыс істей алуы үшін келесі рөлдердің біреуі тағайындалған болуы тиіс:

      • Желі әкімшісі (ең аз қажетті рөл).
      • Жоба әкімшісі.
      • Суперадминистратор.
      • Жоба иесі.
  2. API VK Cloud-қа қол жеткізу үшін қажетті деректемелерді алыңыз:

    1. ExternalDNS үшін бөлінген пайдаланушының деректемелерін пайдаланып, VK Cloud жеке кабинетіне өтіңіз.

    2. Бет үстіңгі жағындағы пайдаланушы атауын басып, Жоба баптаулары тармағын таңдаңыз.

    3. API арқылы қолжеткізу қойындысына өтіп, келесі параметрлердің мәндерін жазып алыңыз:

      • Project ID (OpenStack үшін Project ID);
      • User Domain Name (пайдаланушы доменінің атауы);
      • Username (пайдаланушы атауы);
      • Region Name (аймақ атауы);
      • Auth URL (аутентификацияға арналған URL).
  3. Осы пайдаланушының құпиясөзін жазып алыңыз: ол да API-ға қол жеткізу үшін қажет.

2. ExternalDNS орнатыңыз

  1. ExternalDNS орнатылатын атаулар кеңістігін жасаңыз:

    kubectl create ns external-dns
  2. Осы атаулар кеңістігінде API VK Cloud-қа қол жеткізу деректемелерін қамтитын құпияны жасаңыз, олар пайдаланушыны дайындау кезінде алынған:

    kubectl -n external-dns create secret generic vkcs-auth \  --from-literal=ProjectID="<Project ID>" \  --from-literal=UserDomainName="<User Domain Name>" \  --from-literal=Username="<Username>" \  --from-literal=RegionName="<Region Name>" \  --from-literal=AuthURL="<Auth URL>" \  --from-literal=Password="<пароль пользователя>"
  3. Bitnami Helm репозиторийін қосыңыз:

    helm repo add bitnami https://charts.bitnami.com/bitnami
  4. Helm көмегімен ExternalDNS орнату үшін қажет мәндерді (values) қамтитын файл жасаңыз:

    ExternalDNS Helm-чартының (chart) жұмысына көптеген мәндер әсер етеді. Жасалған файлда ExternalDNS-пен жұмысты бастауға жеткілікті ең аз мәндер жиынтығы берілген. Төменде ExternalDNS-тің DNS VK Cloud-пен жұмысына әсер ететін ең маңызды мәндер сипатталған. VK Cloud плагиніне қатысы жоқ мәндердің сипаттамалары (sidecars[] мәндерінен басқа барлық мәндер) чартқа арналған README.md файлында келтірілген.

    DNS VK Cloud-пен интеграцияны қамтамасыз ететін ExternalDNS плагинінің плагин жұмысына әсер ететін көптеген баптаулары бар. Баптаулар sidecars[].env ішіндегі орта айнымалылары арқылы беріледі. Жасалған файлда тек міндетті баптаулар ғана көрсетілген. Қажет болса, плагинге қосымша баптауларды тиісті орта айнымалыларын қосу арқылы бере аласыз.

  5. ExternalDNS-ті орнатыңыз:

    helm -n external-dns install external-dns-vkcs bitnami/external-dns -f external-dns-vkcs-values.yaml
  6. Helm-чарттың сәтті жазылғанына көз жеткізіңіз:

    helm -n external-dns list && kubectl -n external-dns get all

3. External DNS жұмысын тексеріңіз

Төменде NGINX-тен Cafe мысалына негізделген бірнеше демо-қолданба жазылады. Бұл қолданбалар ExternalDNS-пен жұмыс істеуге бапталған Service және Ingress көмегімен жарияланады (интернеттен қолжетімді болады).

3.1. LoadBalancer түріндегі сервисті пайдаланып қолданбаны жариялаңыз

  1. tea қолданбасына арналған манифест жасаңыз:

  2. Қолданбаны жазу үшін осы манифестті кластерде қолданыңыз:

    kubectl apply -f tea-app.yaml
  3. Қолданбаның үш репликадан тұратын ReplicaSet ретінде сәтті жазылғанын тексеріңіз:

    kubectl get rs,pod -l app==tea
  4. Kubernetes сервисіне (Service) арналған tea-service.yaml манифестін жасаңыз.

    Бұл сервис жазылған қолданбаны жариялау үшін пайдаланылады. Қолданба tea.example.com домендік атауы арқылы қолжетімді болады.

    ExternalDNS сервис үшін ресурстық жазбалар жасауы үшін:

    • Сервис үшін external-dns.alpha.kubernetes.io/hostname аннотациясы берілуі тиіс.
    • Сервис LoadBalancer түрінде болуы тиіс.

    Егер ресурстық жазбалар үшін стандартты емес TTL беру керек болса, external-dns.alpha.kubernetes.io/ttl аннотациясын көрсетіңіз (әдепкі бойынша: 86400 секунд, 24 сағат).

    apiVersion: v1kind: Servicemetadata:  annotations:    external-dns.alpha.kubernetes.io/hostname: "tea.example.com"    external-dns.alpha.kubernetes.io/ttl: "3600"  name: tea-svc  labels:    app: teaspec:  type: LoadBalancer  ports:  - port: 80    targetPort: 8080    protocol: TCP    name: http  selector:    app: tea

    Мұнда:

    • external-dns.alpha.kubernetes.io/hostname міндетті аннотациясы көрсетілген: сервис үшін пайдаланылуы тиіс домендік атау.

    • external-dns.alpha.kubernetes.io/ttl опционалды аннотациясы көрсетілген: ExternalDNS жасайтын ресурстық жазбаға арналған секундтардағы TTL.

    • LoadBalancer сервис түрі таңдалған. Мұндай сервис үшін стандартты жүктеме теңгергіші жасалады. Әдепкі бойынша теңгергіш жария IP мекенжайымен жасалатындықтан, сервиспен байланысты қолданба интернеттен қолжетімді болады.

  5. Сервисті жасау үшін осы манифестті кластерде қолданыңыз:

    kubectl apply -f tea-service.yaml
  6. Сервистің күйін тексеріңіз:

    kubectl get svc tea-svc

    Сервиске теңгергіштің жария IP мекенжайы тағайындалғанша күтіңіз. Теңгергішті жасау ұзақ уақыт алуы мүмкін.

  7. ExternalDNS қажетті ресурстық жазбаларды жасағанына көз жеткізіңіз:

    1. example.com аймағына арналған ресурстық жазбалар тізімін алыңыз.

    2. Тізімнен ExternalDNS жасаған жазбаларды табыңыз:

      • Бір tea.example.com A-жазбасын.

      • externaldns-tea.example.com және externaldns-a-tea.example.com екі TXT-жазбасын.

        Бұл TXT-жазбалар қызметтік болып табылады және ExternalDNS оларды tea-svc сервисі үшін жасалған A-жазбаның күйін бақылау үшін пайдаланады.

      Егер қажетті ресурстық жазбалар болмаса, тағы бірнеше минут күтіңіз. ExternalDNS сервисте IP мекенжай тағайындалғаннан кейін ресурстық жазбаларды жасай бастайды. Бұл үшін біраз уақыт қажет.

  8. Қолданбаның домендік атау арқылы қолжетімді екенін тексеріңіз. Ол үшін браузерде http://tea.example.com мекенжайына өтіңіз.

    Қолданбадан келесі түрдегі жауап бар бет ашылуы тиіс:

    Server address: 10.100.184.219:8080Server name: tea-XXXXXXXXX-AAAAADate: 09/Feb/2024:10:09:51 +0000URI: /Request ID: <уникальный идентификатор запроса>

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

3.2. Ingress пайдаланып қолданбаны жариялаңыз

  1. Кластерге Ingress NGINX аддонының ең өзекті нұсқасын орнатыңыз.

    Стандартты орнатуды орындаңыз. Ешқандай параметрлерді өзгертпеңіз, тек аддонды баптау кодын түзетіңіз:

    1. service.beta.kubernetes.io/openstack-internal-load-balancer аннотациясының мәні false екеніне көз жеткізіңіз:

      controller:  ...  service:    annotations: {"loadbalancer.openstack.org/proxy-protocol": "true", "service.beta.kubernetes.io/openstack-internal-load-balancer": "false"}    ...

      Бұл Ingress контроллері үшін жария IP мекенжайы бар жүктеме теңгергішінің жасалуы үшін қажет. Сонда Ingress пайдаланатын қолданба интернеттен қолжетімді болады.

    2. controller.publishService.enabled өрісіне true мәнін беріңіз:

      controller:  ...  publishService:    enabled: true    pathOverride: ""    ...

      Бұл Ingress ресурсына Ingress контроллерінің жария IP мекенжайы тағайындалуы үшін қажет. Бұл ExternalDNS-ке Ingress үшін дұрыс ресурстық жазбаларды жасауға мүмкіндік береді.

    Аддон орнатылуы аяқталғанша күтіңіз. Бұл процесс ұзақ уақыт алуы мүмкін.

  2. coffee қолданбасына арналған манифест жасаңыз:

  3. Қолданба пайдаланатын Kubernetes сервисіне арналған манифест жасаңыз.

    Мұнда сервис үшін ClusterIP түрі берілген, бұл жеткілікті, себебі қолданба Ingress көмегімен жарияланады. Мұндай сервис тек кластер ішінен ғана қолжетімді және бұрын жасалған сервистен айырмашылығы, оған бөлек жүктеме теңгергіші бөлінбейді.

  4. Барлық қажетті ресурстарды жасау үшін осы манифесттерді кластерде қолданыңыз:

    kubectl apply -f coffee-app.yaml -f coffee-service.yaml
  5. Қолданбаның сәйкес сервиспен бірге екі репликадан тұратын ReplicaSet ретінде сәтті жазылғанын тексеріңіз:

    kubectl get rs,pod,svc -l app==coffee
  6. Ingress ресурсына арналған cafe-ingress.yaml манифестін жасаңыз.

    Бұл Ingress ресурсы жазылған қолданбаны жариялау үшін пайдаланылады. Қолданба http://cafe.example.com/coffee URL мекенжайы бойынша cafe.example.com доменінде қолжетімді болады.

    ExternalDNS сервис үшін ресурстық жазбалар жасауы үшін манифестте ешқандай қосымша мәндерді көрсету қажет емес: дұрыс бапталған Ingress контроллерінің болуы жеткілікті. Домендік атаулар мәндері Ingress ережелерінің spec.rules[] өрістеріндегі host өрістерінен алынады.

    Егер ресурстық жазбаларға стандартты емес TTL беру қажет болса, external-dns.alpha.kubernetes.io/ttl аннотациясын көрсетіңіз (әдепкі бойынша: 86400 секунд, 24 сағат).

    apiVersion: networking.k8s.io/v1kind: Ingressmetadata:  name: cafe-ingress  annotations:    external-dns.alpha.kubernetes.io/ttl: "3600"spec:  ingressClassName: nginx  rules:  - host: cafe.example.com    http:      paths:      - path: /coffee        pathType: Prefix        backend:          service:            name: coffee-svc            port:              number: 80

    Мұнда:

    • external-dns.alpha.kubernetes.io/ttl опционалды аннотациясы көрсетілген: ExternalDNS жасайтын ресурстық жазбалар үшін секундтардағы TTL.
    • Ingress ережесі үшін cafe.example.com хосты көрсетілген. Тек бір хост көрсетілгендіктен, осы домендік атау үшін бір ресурстық жазба жасалады.
    • Ingress ережесіне сәйкес, coffee-svc сервисінің артында тұрған coffee қолданбасы http://cafe.example.com/coffee URL бойынша қолжетімді болады.
  7. Ресурсты жасау үшін осы манифестті кластерде қолданыңыз:

    kubectl apply -f cafe-ingress.yaml
  8. Ingress күйін тексеріңіз:

    kubectl get ingress cafe-ingress

    Ingress ресурсына жария IP мекенжайы тағайындалғанша күтіңіз. Бұл мекенжай Ingress контроллерінің мекенжайымен бірдей болады.

  9. ExternalDNS қажетті ресурстық жазбаларды жасағанына көз жеткізіңіз:

    1. example.com аймағы үшін ресурстық жазбалар тізімін алыңыз.

    2. Тізімнен ExternalDNS жасаған жазбаларды табыңыз:

      • Бір cafe.example.com CNAME-жазбасын.

      • externaldns-cafe.example.com және externaldns-cname-cafe.example.com екі TXT-жазбасын.

        Бұл TXT-жазбалар — қызметтік және ExternalDNS оларды cafe-ingress Ingress үшін жасалған CNAME-жазбаның күйін бақылау үшін пайдаланады.

      Егер қажетті ресурстық жазбалар болмаса, тағы бірнеше минут күтіңіз. ExternalDNS ресурстық жазбаларды Ingress ресурсына IP мекенжайы тағайындалғаннан кейін жасай бастайды. Бұл үшін біраз уақыт қажет.

  10. Қолданбаның домендік атау арқылы қолжетімді екенін тексеріңіз. Ол үшін браузерде http://cafe.example.com/coffee мекенжайына өтіңіз.

    Қолданбадан келесі түрдегі жауап бар бет ашылуы тиіс:

    Server address: 10.100.184.220:8080Server name: coffee-YYYYYYYYY-DDDDDDate: 09/Feb/2024:13:07:11 +0000URI: /coffeeRequest ID: <уникальный идентификатор запроса>

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

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

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

  1. tea қолданбасымен байланысты барлық ресурстарды жойыңыз:

    kubectl delete -f cafe-ingress.yaml -f coffee-service.yaml -f coffee-app.yaml

    Сервиспен байланысты жүктеме теңгергішін жою ұзақ уақыт алуы мүмкін.

  2. coffee қолданбасымен байланысты барлық ресурстарды жойыңыз:

    kubectl delete -f tea-service.yaml -f tea-app.yaml
  3. Ingress NGINX аддонын жойыңыз.

    Аддонды және онымен байланысты ресурстарды жою ұзақ уақыт алуы мүмкін.

  4. ExternalDNS жасаған ресурстық жазбаларды жойыңыз.

    Мұны, егер сіз external-dns-vkcs-values.yaml файлын ExternalDNS орнату кезінде өзгертпеген болсаңыз, орындау қажет: онда ExternalDNS upsert-only саясатын пайдаланады және Kubernetes ресурстарын жойғанда DNS-аймақтан ресурстық жазбаларды жоймайды. Егер сіз бұл файлды өзгертіп, sync саясатын таңдасаңыз, онда бұл жазбалар автоматты түрде жойылады.

    Ресурстық жазбалар тізімі:

    • tea.example.com A-жазбасы.
    • externaldns-tea.example.com және externaldns-a-tea.example.com TXT-жазбалары.
    • cafe.example.com CNAME-жазбасы.
    • externaldns-cafe.example.com және externaldns-cname-cafe.example.com TXT-жазбалары.
  5. ExternalDNS-ті жойыңыз:

    1. ExternalDNS бар Helm-чартты жойыңыз:

      helm -n external-dns uninstall external-dns-vkcs
    2. external-dns атаулар кеңістігін жойыңыз.

      kubectl delete ns external-dns
  6. Тоқтатыңыз жасалған кластерді, оны кейінірек пайдалану үшін, немесе жойыңыз оны біржола.

  7. example.com DNS-аймағын жойыңыз.