ExternalDNS орнату және пайдалану
ExternalDNS Ingress немесе Service ресурстарымен жұмыс істеген кезде DNS жазбаларын басқаруды автоматтандыруға мүмкіндік береді. Егер бұл ресурстар ExternalDNS талаптарына сәйкес бапталған болса, онда олар жасалғаннан кейін бірден домендік атау арқылы қолжетімді болады.
ExternalDNS VK Cloud-тағы DNS сервисімен плагин арқылы интеграцияланады. Төменде ExternalDNS-ті кластерге қалай орнату және бұл құралды Ingress және Service ресурстарымен қалай пайдалану керектігі көрсетіледі.
-
Егер бұл әлі жасалмаса, ExternalDNS жұмыс істейтін DNS-аймақты жасаңыз.
Мысал ретінде төменде
example.comаймағы пайдаланылады. -
Сыртқы IP мекенжайы бар және интернеттен қолжетімді өзекті нұсқадағы Kubernetes кластерін жасаңыз.
Кластердің қалған параметрлерін өз қалауыңыз бойынша таңдаңыз.
-
kubectlкөмегімен кластерге қосыла алатыныңызға көз жеткізіңіз.Қосылу үшін VK Cloud жеке кабинетінен жүктелген кластер конфигурациясының файлын (kubeconfig) пайдаланыңыз.
-
Егер утилита әлі орнатылмаса, 3.0.0 немесе одан жоғары нұсқадағы Helm-ді орнатыңыз.
Орнату үшін кластермен үйлесімді Helm нұсқасын таңдаңыз.
-
Кластерге арналған kubeconfig файлын көрсететін орта айнымалысын орнатыңыз. Бұл ExternalDNS орнату кезінде
kubectlжәнеhelmутилиталарымен жұмысты жеңілдетеді.Сіздің kubeconfig файлыңызға жол төмендегі мысалдан өзгеше болуы мүмкін.
Linux (bash)/macOS (zsh)Windows (PowerShell)export KUBECONFIG="/home/user/.kube/kubernetes-cluster-1234_kubeconfig.yaml"
ExternalDNS осы VK Cloud пайдаланушысының деректемелерін API VK Cloud-пен өзара әрекеттесу және DNS ресурстық жазбаларын басқару үшін қолданады.
Пайдаланушыны дайындап, барлық қажетті деректемелерді алыңыз:
-
Бар пайдаланушыны таңдаңыз немесе жобаға жаңа пайдаланушыны шақырыңыз.
Пайдаланушыға қойылатын талаптар:
-
API арқылы қолжеткізу белсендірілген болуы тиіс.
-
ExternalDNS DNS-аймақ аясында ресурстық жазбалармен жұмыс істей алуы үшін келесі рөлдердің біреуі тағайындалған болуы тиіс:
- Желі әкімшісі (ең аз қажетті рөл).
- Жоба әкімшісі.
- Суперадминистратор.
- Жоба иесі.
-
-
API VK Cloud-қа қол жеткізу үшін қажетті деректемелерді алыңыз:
-
ExternalDNS үшін бөлінген пайдаланушының деректемелерін пайдаланып, VK Cloud жеке кабинетіне өтіңіз.
-
Бет үстіңгі жағындағы пайдаланушы атауын басып, Жоба баптаулары тармағын таңдаңыз.
-
API арқылы қолжеткізу қойындысына өтіп, келесі параметрлердің мәндерін жазып алыңыз:
- Project ID (OpenStack үшін Project ID);
- User Domain Name (пайдаланушы доменінің атауы);
- Username (пайдаланушы атауы);
- Region Name (аймақ атауы);
- Auth URL (аутентификацияға арналған URL).
-
-
Осы пайдаланушының құпиясөзін жазып алыңыз: ол да API-ға қол жеткізу үшін қажет.
-
ExternalDNS орнатылатын атаулар кеңістігін жасаңыз:
kubectl create ns external-dns -
Осы атаулар кеңістігінде API VK Cloud-қа қол жеткізу деректемелерін қамтитын құпияны жасаңыз, олар пайдаланушыны дайындау кезінде алынған:
Linux (bash)/macOS (zsh)Windows (PowerShell)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="<пароль пользователя>" -
Bitnami Helm репозиторийін қосыңыз:
helm repo add bitnami https://charts.bitnami.com/bitnami -
Helm көмегімен ExternalDNS орнату үшін қажет мәндерді (values) қамтитын файл жасаңыз:
ExternalDNS Helm-чартының (chart) жұмысына көптеген мәндер әсер етеді. Жасалған файлда ExternalDNS-пен жұмысты бастауға жеткілікті ең аз мәндер жиынтығы берілген. Төменде ExternalDNS-тің DNS VK Cloud-пен жұмысына әсер ететін ең маңызды мәндер сипатталған. VK Cloud плагиніне қатысы жоқ мәндердің сипаттамалары (
sidecars[]мәндерінен басқа барлық мәндер) чартқа арналған README.md файлында келтірілген.DNS VK Cloud-пен интеграцияны қамтамасыз ететін ExternalDNS плагинінің плагин жұмысына әсер ететін көптеген баптаулары бар. Баптаулар
sidecars[].envішіндегі орта айнымалылары арқылы беріледі. Жасалған файлда тек міндетті баптаулар ғана көрсетілген. Қажет болса, плагинге қосымша баптауларды тиісті орта айнымалыларын қосу арқылы бере аласыз. -
ExternalDNS-ті орнатыңыз:
helm -n external-dns install external-dns-vkcs bitnami/external-dns -f external-dns-vkcs-values.yaml -
Helm-чарттың сәтті жазылғанына көз жеткізіңіз:
helm -n external-dns list && kubectl -n external-dns get all
Төменде NGINX-тен Cafe мысалына негізделген бірнеше демо-қолданба жазылады. Бұл қолданбалар ExternalDNS-пен жұмыс істеуге бапталған Service және Ingress көмегімен жарияланады (интернеттен қолжетімді болады).
-
teaқолданбасына арналған манифест жасаңыз: -
Қолданбаны жазу үшін осы манифестті кластерде қолданыңыз:
kubectl apply -f tea-app.yaml -
Қолданбаның үш репликадан тұратын
ReplicaSetретінде сәтті жазылғанын тексеріңіз:kubectl get rs,pod -l app==tea -
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-svclabels:app: teaspec:type: LoadBalancerports:- port: 80targetPort: 8080protocol: TCPname: httpselector:app: teaМұнда:
-
external-dns.alpha.kubernetes.io/hostnameміндетті аннотациясы көрсетілген: сервис үшін пайдаланылуы тиіс домендік атау. -
external-dns.alpha.kubernetes.io/ttlопционалды аннотациясы көрсетілген: ExternalDNS жасайтын ресурстық жазбаға арналған секундтардағы TTL. -
LoadBalancerсервис түрі таңдалған. Мұндай сервис үшін стандартты жүктеме теңгергіші жасалады. Әдепкі бойынша теңгергіш жария IP мекенжайымен жасалатындықтан, сервиспен байланысты қолданба интернеттен қолжетімді болады.
- Сервис үшін
-
Сервисті жасау үшін осы манифестті кластерде қолданыңыз:
kubectl apply -f tea-service.yaml -
Сервистің күйін тексеріңіз:
kubectl get svc tea-svcСервиске теңгергіштің жария IP мекенжайы тағайындалғанша күтіңіз. Теңгергішті жасау ұзақ уақыт алуы мүмкін.
-
ExternalDNS қажетті ресурстық жазбаларды жасағанына көз жеткізіңіз:
-
example.comаймағына арналған ресурстық жазбалар тізімін алыңыз. -
Тізімнен ExternalDNS жасаған жазбаларды табыңыз:
-
Бір
tea.example.comA-жазбасын. -
externaldns-tea.example.comжәнеexternaldns-a-tea.example.comекі TXT-жазбасын.Бұл TXT-жазбалар қызметтік болып табылады және ExternalDNS оларды
tea-svcсервисі үшін жасалған A-жазбаның күйін бақылау үшін пайдаланады.
Егер қажетті ресурстық жазбалар болмаса, тағы бірнеше минут күтіңіз. ExternalDNS сервисте IP мекенжай тағайындалғаннан кейін ресурстық жазбаларды жасай бастайды. Бұл үшін біраз уақыт қажет.
-
-
-
Қолданбаның домендік атау арқылы қолжетімді екенін тексеріңіз. Ол үшін браузерде
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түріндегі сервиспен дұрыс жұмыс істейтінін көрсетеді.
-
Кластерге Ingress NGINX аддонының ең өзекті нұсқасын орнатыңыз.
Стандартты орнатуды орындаңыз. Ешқандай параметрлерді өзгертпеңіз, тек аддонды баптау кодын түзетіңіз:
-
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 пайдаланатын қолданба интернеттен қолжетімді болады.
-
controller.publishService.enabledөрісінеtrueмәнін беріңіз:controller:...publishService:enabled: truepathOverride: ""...Бұл Ingress ресурсына Ingress контроллерінің жария IP мекенжайы тағайындалуы үшін қажет. Бұл ExternalDNS-ке Ingress үшін дұрыс ресурстық жазбаларды жасауға мүмкіндік береді.
Аддон орнатылуы аяқталғанша күтіңіз. Бұл процесс ұзақ уақыт алуы мүмкін.
-
-
coffeeқолданбасына арналған манифест жасаңыз: -
Қолданба пайдаланатын Kubernetes сервисіне арналған манифест жасаңыз.
Мұнда сервис үшін ClusterIP түрі берілген, бұл жеткілікті, себебі қолданба Ingress көмегімен жарияланады. Мұндай сервис тек кластер ішінен ғана қолжетімді және бұрын жасалған сервистен айырмашылығы, оған бөлек жүктеме теңгергіші бөлінбейді.
-
Барлық қажетті ресурстарды жасау үшін осы манифесттерді кластерде қолданыңыз:
kubectl apply -f coffee-app.yaml -f coffee-service.yaml -
Қолданбаның сәйкес сервиспен бірге екі репликадан тұратын
ReplicaSetретінде сәтті жазылғанын тексеріңіз:kubectl get rs,pod,svc -l app==coffee -
Ingress ресурсына арналған
cafe-ingress.yamlманифестін жасаңыз.Бұл Ingress ресурсы жазылған қолданбаны жариялау үшін пайдаланылады. Қолданба
http://cafe.example.com/coffeeURL мекенжайы бойынша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-ingressannotations:external-dns.alpha.kubernetes.io/ttl: "3600"spec:ingressClassName: nginxrules:- host: cafe.example.comhttp:paths:- path: /coffeepathType: Prefixbackend:service:name: coffee-svcport:number: 80Мұнда:
external-dns.alpha.kubernetes.io/ttlопционалды аннотациясы көрсетілген: ExternalDNS жасайтын ресурстық жазбалар үшін секундтардағы TTL.- Ingress ережесі үшін
cafe.example.comхосты көрсетілген. Тек бір хост көрсетілгендіктен, осы домендік атау үшін бір ресурстық жазба жасалады. - Ingress ережесіне сәйкес,
coffee-svcсервисінің артында тұрғанcoffeeқолданбасыhttp://cafe.example.com/coffeeURL бойынша қолжетімді болады.
-
Ресурсты жасау үшін осы манифестті кластерде қолданыңыз:
kubectl apply -f cafe-ingress.yaml -
Ingress күйін тексеріңіз:
kubectl get ingress cafe-ingressIngress ресурсына жария IP мекенжайы тағайындалғанша күтіңіз. Бұл мекенжай Ingress контроллерінің мекенжайымен бірдей болады.
-
ExternalDNS қажетті ресурстық жазбаларды жасағанына көз жеткізіңіз:
-
example.comаймағы үшін ресурстық жазбалар тізімін алыңыз. -
Тізімнен ExternalDNS жасаған жазбаларды табыңыз:
-
Бір
cafe.example.comCNAME-жазбасын. -
externaldns-cafe.example.comжәнеexternaldns-cname-cafe.example.comекі TXT-жазбасын.Бұл TXT-жазбалар — қызметтік және ExternalDNS оларды
cafe-ingressIngress үшін жасалған CNAME-жазбаның күйін бақылау үшін пайдаланады.
Егер қажетті ресурстық жазбалар болмаса, тағы бірнеше минут күтіңіз. ExternalDNS ресурстық жазбаларды Ingress ресурсына IP мекенжайы тағайындалғаннан кейін жасай бастайды. Бұл үшін біраз уақыт қажет.
-
-
-
Қолданбаның домендік атау арқылы қолжетімді екенін тексеріңіз. Ол үшін браузерде
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 ресурстары енді қажет болмаса, оларды жойыңыз:
-
teaқолданбасымен байланысты барлық ресурстарды жойыңыз:kubectl delete -f cafe-ingress.yaml -f coffee-service.yaml -f coffee-app.yamlСервиспен байланысты жүктеме теңгергішін жою ұзақ уақыт алуы мүмкін.
-
coffeeқолданбасымен байланысты барлық ресурстарды жойыңыз:kubectl delete -f tea-service.yaml -f tea-app.yaml -
Ingress NGINX аддонын жойыңыз.
Аддонды және онымен байланысты ресурстарды жою ұзақ уақыт алуы мүмкін.
-
ExternalDNS жасаған ресурстық жазбаларды жойыңыз.
Мұны, егер сіз
external-dns-vkcs-values.yamlфайлын ExternalDNS орнату кезінде өзгертпеген болсаңыз, орындау қажет: онда ExternalDNSupsert-onlyсаясатын пайдаланады және Kubernetes ресурстарын жойғанда DNS-аймақтан ресурстық жазбаларды жоймайды. Егер сіз бұл файлды өзгертіп,syncсаясатын таңдасаңыз, онда бұл жазбалар автоматты түрде жойылады.Ресурстық жазбалар тізімі:
tea.example.comA-жазбасы.externaldns-tea.example.comжәнеexternaldns-a-tea.example.comTXT-жазбалары.cafe.example.comCNAME-жазбасы.externaldns-cafe.example.comжәнеexternaldns-cname-cafe.example.comTXT-жазбалары.
-
ExternalDNS-ті жойыңыз:
-
ExternalDNS бар Helm-чартты жойыңыз:
helm -n external-dns uninstall external-dns-vkcs -
external-dnsатаулар кеңістігін жойыңыз.kubectl delete ns external-dns
-
-
Тоқтатыңыз жасалған кластерді, оны кейінірек пайдалану үшін, немесе жойыңыз оны біржола.
-
example.comDNS-аймағын жойыңыз.