kubectl туннель жұмыс істеп тұрғанда және API-нің жеке мекенжайы әлі де ping-ке жауап беріп тұрғанда атау іздеуде сәтсіздікке ұшырайды. Маршрут дұрыс; клиент кластердің жеке аймағы туралы ешқашан естімеген шешушіден сұрайды. Ең жиі екі түзету қолданылады: виртуалды желінің шешушісін әр VPN клиентіне жіберу немесе атауды hosts жазбасымен немесе шартты бағыттаушымен жергілікті түрде бекіту. Олар бірдей симптомды әртүрлі жауапкершілікпен шешеді, ал оларды шатастыру топтардың соңғы нүкте қайта құрылған сайын hosts файлдарын өңдеуіне әкеледі.

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

Бірдеңені өзгертуден бұрын іздеуді өзіңіз орындаңыз. Linux-те getent hosts немесе Windows-та nslookup клиенттің жалпы жауап алатынын көрсетеді; уақыттың бітуі немесе NXDOMAIN шешушіге нұсқайды, ал дұрыс емес мекенжайлы жауап ескірген жазбаға немесе ашық өтуге нұсқайды.

Содан кейін kubectl шын мәнінде қай серверге қосылатынын растаңыз. kubeconfig контексті URL сақтайды, ал VPN маршруты оны қайта жазбайды: егер контекст ашық соңғы нүктені атаса, DNS мінсіз болуы мүмкін, бірақ команда сәтсіз аяқталады.

getent hosts api.internal.example
kubectl config view --minify -o jsonpath='{.clusters[0].cluster.server}'
kubectl -v=8 get nodes 2>&1 | head -40

Үшінші сигнал — іздеуден кейінгі қателіктің пішіні. Жеке мекенжайға шешілген атау кейін TCP уақытының бітуіне тап болса, бұл өрт қабырғасы немесе рұқсат етілген желі мәселесі. Ашық мекенжайға шешілген атау сұраныстың жеке аймақтан шығып кеткенін білдіреді. Осы үш нәтижені бөлек ұстаңыз; әрқайсысы сізді басқа жауаптыға жібереді.

А нұсқасы: виртуалды желінің шешушісін туннельге жіберіңіз

VPN сервері виртуалды желінің ішінде жұмыс істесе, клиенттер сервер хосты сияқты шешушіні пайдалана алады. OpenVPN Community-де сервер DNS параметрін жібереді; Access Server сол параметрді әкімшілік интерфейсте көрсетеді, ал клиенттер профильді қайта жүктеуі керек, себебі DNS директивасы оның ішінде жүреді.

# server.conf
push "dhcp-option DNS 10.0.0.4"
push "route 10.0.0.4 255.255.255.255"

Маршрут жолы split tunnel профильдерінде маңызды. Шешуші мекенжайын жіберу оны қолжетімді етумен бірдей емес: егер туннельден тек кластердің ішкі желісі өтсе, 10.0.0.4-ке сұраныс жергілікті LAN арқылы шығып өледі. Шешуші үшін хост маршрутын жіберіңіз немесе оның ішкі желісін туннельге қосыңыз.

Қабылдаушы тараптың да саясаты бар. Клиент мекенжай ауқымынан қолжетімді шешуші одан келетін сұраныстарды бәрібір қабылдамауы мүмкін, ал виртуалды желіге байланған жеке аймақ тек сол желінің DNS жолымен келетін клиенттерге жауап береді. Егер іздеу жіберілгеннен кейін уақыты бітсе, клиентке қайта тию алдында шешушінің өз журналдарын қараңыз.

Клиентте не қолданылғанын тексеріңіз: systemd-resolved Linux-те resolvectl status, macOS-та scutil --dns, Windows-та ipconfig /all. Жіберілген DNS сервер ешқашан көрінбесе, профиль қайта жүктелмеген.

В нұсқасы: hosts жазбалары және шартты бағыттау

hosts жазбасы — мүмкін болатын ең кіші түзету және ең нәзік. Ол бір атауды бір машинадағы бір мекенжайға байланыстырады, сондықтан демонстрацияға жарайды және жеке соңғы нүкте немесе оның IP-сі қайта құрылғанда бұзылады. Ол сондай-ақ нақты олқылықты топтың қалғанынан жасырады.

Шартты бағыттаушы әр клиентке DNS жібермей-ақ жақсырақ масштабталады. dnsmasq бір аймақты VNet шешушісіне жіберіп, қалғанын тыныш қалдыра алады: server=/cluster.internal/10.0.0.4. Windows DNS-те шартты бағыттаушылар бар, ал Windows клиенттері сол бөлу үшін NRPT ережесін пайдалана алады. Бағыттаушыға әлі де VNet шешушісіне маршрут керек.

Бағыттау қарапайым шолуды жергілікті ұстайды, бұл split tunnel-да маңызды. Ол сондай-ақ жеке аймақ сұраныстарын журналға жазу үшін бір орын және бағыттаушы хост көшкенде бұзылатын бір орын береді.

Жауапкершілік бойынша таңдаңыз, қолайлылық бойынша емес

VPN профилін басқарсаңыз және тек API емес, әрбір жеке атаудың жұмыс істеуін қаласаңыз, шешушіні жіберіңіз. Клиенттер қалғанының бәрі үшін жергілікті DNS сақтауы керек болса немесе VPN-ді кластерден басқа топ басқарса, бағыттаушыны таңдаңыз.

hosts жазбалары — диагностика, орналастыру емес. API қолжетімді екенін дәлелдеу үшін біреуін пайдаланыңыз, содан кейін оны жойып, шешуші жолын түзетіңіз; оны орнында қалдыру маршрут сұрағын кейінірек қазына іздеуге айналдырады. Қай нұсқаны таңдасаңыз да, аймақты, шешуші мекенжайын және сұранысты тасымалдайтын маршрутты жазып қойыңыз.

API соңғы нүктесін тексеріңіз, тек атауын емес

Іздеу сәтті болған соң, API нұсқасының соңғы нүктесін кластер CA-сымен алыңыз. curl --cacert ca.crt https://api.internal.example:6443/version TLS және авторизация қателерін DNS-тен ажыратады. 403 атау мен қосылым жұмыс істейтінін, ал сәйкестендіру жұмыс істемейтінін білдіреді.

Сондай-ақ клиент мекенжай ауқымына кластердің рұқсат етілген желілері немесе өрт қабырғасы рұқсат беретінін тексеріңіз. Жеке кластерлер көбіне API трафигін тек VNet немесе peer ауқымдарынан қабылдайды, сондықтан басқа пулдан мекенжай беретін туннель желі қабатында қосылып, API деңгейінде тасталады.

Эскалациялағанда төрт фактіні жазыңыз: клиент пайдаланған шешуші, ол қайтарған мекенжай, таңдалған kubeconfig контекстіндегі сервер URL-і және сәтсіз болған бірінші операция. Бұл жазба келесі инженерге DNS, маршруттау немесе өрт қабырғасы саясатын өзгерту керек пе екенін айтады және келесі hosts файлын өңдеуді тоқтатады.

Іздеуден бастаңыз, аймақ иесіне сәйкес келетін шешуші жолын таңдаңыз, содан кейін соңғы нүктені тексеріңіз. Үшеуі де өтсе, қалған мәселе — авторизация, атауды шешу емес.

Қатысты мақалалар