Conas DNS a roinnt idir Kubernetes agus sidecar OpenVPN
Tá dhá shaol ainmneacha ag teastáil ó phod sidecar. Cuir aon réiteoir loopback chuig an gclústar agus an tollán, agus stop ag brath ar resolv.conf eagarthóireachta.
Teipeann ar phodanna a ritheann OpenVPN sidecar réiteach ainmneacha i bpatrún inaitheanta: crochann ainmneacha an chlústar, freagraíonn ainmneacha cianda go dtí go n-atosaítear an pod, agus filleann an comhad réiteora a chuir tú in eagar ar ais. Níl aon rud sa seicheamh sin ina locht tolláin. Tá comhad réiteora amháin agus dhá shaol ainmneacha ag pod, agus is féidir leis an gcomhad freastalaithe a liostú in ord ach ní féidir leis criosanna a chur in iúl. Is é an réiteach marthanach réiteoir a ritheann laistigh den pod agus a shealbhaíonn an roinnt, ionas go bhfanann an comhad simplí agus nach bhfuil cúis ag aon pholasaí é a athscríobh.
Cén fáth a n-imíonn an t-eagarthóireacht a rinne tú i gcónaí
Baineann an comhad leis an kubelet, ní leatsa. Faoi dnsPolicy: ClusterFirst gineann an kubelet é chun pointeáil chuig DNS an chlústar, agus déanann sé athghiniúint air gach uair a thosaíonn coimeádán. Maireann gach rud a athraíonn tú trí kubectl exec i gciseal inscríofa an choimeádáin, mar sin caitheann atosú, easeit nó rollout amach é. Iompraíonn sonraíocht an phod an polasaí céanna fós, agus sin an fáth a dtagann an comhad céanna ar ais.
Stopann socrú dnsPolicy: None an athghiniúint agus baineann sé réiteach an chlústar freisin. Faigheann tú comhad a rialaíonn tú agus caillfidh tú na hainmneacha a bhí uait. Is é an mhalartú sin an fhadhb ar fad: níl aon choincheap ag resolv.conf de chriosanna, ach freastalaithe le triail in ord amháin, mar sin ní féidir leis cluster.local a sheoladh chuig aon seoladh amháin agus crios príobháideach chuig ceann eile.
Rith aon réiteoir sa phod, ar loopback
Cuir an pod chuig aon fhreastalaí ainmneacha amháin ar loopback, ansin lig do choimeádán CoreDNS a roinneann spás ainmneacha líonra an phod freagra a thabhairt ar phort 53. Socraigh an polasaí go None, tabhair an t-aon seoladh sin don phod, agus cuir an coimeádán DNS in aice leis an VPN agus an feidhmchlár:
spec:
dnsPolicy: None
dnsConfig:
nameservers:
- 127.0.0.1
options:
- name: ndots
value: "5"
containers:
- name: dns
image: coredns/coredns
args: ["-conf", "/etc/coredns/Corefile"]
volumeMounts:
- {name: corefile, mountPath: /etc/coredns, readOnly: true}
- name: vpn
image: your-openvpn-client-image
- name: app
image: your-app-image
volumes:
- name: corefile
configMap:
name: split-dns-corefileRoinneann na trí choimeádán spás ainmneacha líonra amháin, mar sin sroicheann 127.0.0.1:53 ó choimeádán an fheidhmchláir CoreDNS gan seirbhís, gan port-forward agus gan seachbhóthar trí líonra an chlústar. Coinníonn gléasadh an Corefile ó ConfigMap é mar ionchur leaganaithe in ionad comhad a chuirtear in eagar ina áit. Ansin ní choinníonn an resolv.conf ginte ach aon fhreastalaí ainmneacha amháin agus faic eile, agus is staid í sin ar féidir leat réasúnaíocht a dhéanamh uirthi.
Bíonn dhá mhionsonra ag baint anseo. Ceanglaíonn an íomhá oifigiúil port 53 mar root, agus éilíonn roinnt polasaithe clústar ort é sin a scríobh go sainráite. Tá gach coimeádán sa phod ag brath anois ar an aon choimeádán sin a bheith suas, mar sin cuir readiness probe le hainm neamhurchóideach agus lig don fheidhmchlár teipeanna tosaithe a fhulaingt.
Tabhair a upstream féin do gach crios príobháideach
Is liosta criosanna é Corefile, agus ainmníonn gach ceann an freastalaí ar féidir leis freagra a thabhairt air. Clúdaíonn aon bhloc crios an tolláin, agus tagann an bloc a ghlacann gach rud ar deireadh agus tógann sé gach rud nár éiligh aon bhloc sainráite. Caithfidh an bloc a ghlacann gach rud díriú ar fhíor-upstream, riamh ar ais chuig an pod: úsáideann .:53 { forward . 10.100.0.10 } réiteoir an chlústar arís mar go seolann an réiteoir sin ainmneacha poiblí chuig réiteoirí an nóid féin cheana. Ní gá d'aon rud eile sa phod a fhios cá mbaineann ainm le líonra.
.:53 {
errors
cache 30
forward . 10.100.0.10
}
svc.acme.internal:53 {
errors
cache 30
forward . 192.168.240.1
}Léigh seoladh an chlústar ón tseirbhís kube-dns in kube-system seachas ceann a chóipeáil ó alt, mar go bhfuil CIDRanna seirbhíse difriúil. Tagann seoladh an tolláin ón luach dhcp-option DNS a bhrúnann an freastalaí OpenVPN, nó ón bhfreastalaí údarásach don chrios sin. Mura bhfreagraíonn do réiteoir clústar ainmneacha poiblí, cuir seoladh réiteora an nóid sa bhloc a ghlacann gach rud, léite ar an nód agus ní laistigh den pod.
Ná cuir an bloc a ghlacann gach rud chuig /etc/resolv.conf, arb é an t-aon líne mhealltach é agus gaiste sa chumraíocht chruinn seo. Faoi dnsPolicy: None tá an t-aon fhreastalaí ainmneacha 127.0.0.1 i gcomhad an phod féin, mar sin is é CoreDNS féin an sprioc sin agus athfhilltear gach fiosrú nach bhfuil comhoiriúnach go dtí go dtéann sé as feidhm. Meaitseálann bloc darb ainm svc.acme.internal an t-ainm sin agus gach ainm faoina bhun, a chlúdaíonn db.svc.acme.internal agus a eisiann svc.acme.internal.example.net. Tá an ponc deiridh cosmaideach, mar go ndéantar ainmneacha crios a normalú go foirm láncháilithe; is í an teorainn iarmhíre a shocraíonn cá dtiteann fiosrú.
Cinntigh an mbaineann an t-ardú leis an réiteoir clústar
Má theastaíonn crios an tolláin ó gach ualach oibre san ainmspás, is saoire bloc arda in ConfigMap CoreDNS faoi kube-system ná sidecar in aghaidh an phod. Tá an t-athrú sin ar scála clústar: teastaíonn cearta riarthóra uaidh agus atosú ar imscaradh a bhfuil gach duine ag brath air. Cuir teorainn leis an aon chrios sin, riamh leis an bhfréamh. Ansin éiríonn seoladh tolláin aon ualaigh oibre ina réiteoir ag gach pod don chrios, agus an lá a dtiteann an tollán cailleann an clústar ar fad an t-ainm.
Coinníonn an sidecar an ga pléasctha laistigh d'aon phod amháin, arb é an réamhshocrú níos fearr é nuair nach dteastaíonn an líonra cianda ach ó bheagán seirbhísí. Cibé rud a roghnaíonn tú, scríobh síos cén réiteoir a shealbhaíonn an crios, mar go bhfiafróidh an chéad duine eile a dhífhabhtaíonn timeout.
Ainmneacha a réitítear agus na naisc fós ag teip
Tá réiteach ar cheann den dá rud a chaithfidh an tollán a iompar; is é an ceann eile an cosán ar ais, agus folaíonn líonra an phod go maith é. Má ritheann an freastalaí OpenVPN féin mar phod, ní rialaíonn rialacha a chuireann tú leis sa choimeádán sin trácht a fhágann tríd an nód. Tá an teip sin cúng: ní bhfuair ach podanna ar an nód a ritheann an freastalaí freagraí, agus chuaigh gach rud eile as feidhm.
Cuireann rith an fhreastalaí le hostNetwork: true ar ais é in ainmspás an nóid, áit a mbíonn éifeacht ag riail FORWARD agus ag aistriú foinse. Aistrigh an pool cliant ar an mbealach amach, nó níl aon bhealach ar ais ag aon nód cianda chuig seoladh tolláin mar 10.8.0.6. Seiceáil an dá threo sula dteagmhaíonn tú leis an Corefile arís. Táirgeann tollán a iompraíonn an fiosrú agus ní an freagra an timeout céanna go beacht le réiteoir nár ghlac an fiosrú riamh.
Fíoraigh ó phod nua, ní ón seisiún a dheisigh tú
Fiafraigh go sainráite faoin dá chrios, ansin déan an fiosrú a athdhéanamh tar éis an pod a athsholáthar. Ní cumraíocht í cumraíocht nach bhfuil ann ach i gcoimeádán atá ag rith:
kubectl exec -it deploy/app -- dig @127.0.0.1 kubernetes.default.svc.cluster.local +short
kubectl exec -it deploy/app -- dig @127.0.0.1 db.svc.acme.internal +short
kubectl delete pod -l app=your-app
kubectl wait --for=condition=Ready pod -l app=your-app --timeout=90s
kubectl exec -it deploy/app -- dig @127.0.0.1 db.svc.acme.internal +shortMá fhreagraíonn an chéad phéire agus mura bhfreagraíonn an péire tar éis an athsholáthair, tá an Corefile ceart agus níl sonraíocht an phod ceart. Má fhreagraíonn an dá cheann agus mura féidir leis an bhfeidhmchlár ceangal fós, stop ag dífhabhtú DNS agus tástáil an cosán TCP le nc -vz db.svc.acme.internal 5432 ó laistigh den choimeádán. Coinnigh aschur dig sa ticéad, mar is é an t-airteafact é a scarann fadhb ainmniúcháin ó fhadhb ródaithe.