Awon pod ti n sise OpenVPN sidecar kuna ninu yiyanju oruko ni ona ti a mo: oruko cluster n duro, oruko ti o jinna n dahun titi pod yoo fi tun bere, ati faili resolver ti o satunse yoo pada. Ko si nkan ninu ilana yii ti o je ikuna tunnel. Pod ni faili resolver kan ati awon oruko meji, faili le to awon server lele ni titọ, sugbon ko le se apejuwe awon agbegbe. Ojutu ti o pe ni resolver ti n sise ninu pod ti o si ni pipin naa, nitorina faili yoo wa ni irorun ati pe ko si eto imulo ti yoo ni idi lati tun kọ ọ.

Idi ti iyipada ti o se n pare nigbagbogbo

Faili je ti kubelet, kii se tire. Labẹ dnsPolicy: ClusterFirst kubelet n da a lati tọka si DNS cluster, o si tun da a ni gbogbo igba ti container ba bere. Ohunkohun ti o ba yipada nipasẹ kubectl exec n gbe ninu ipele ti a le kọ ti container, nitorina atunbere, yiyọ kuro tabi rollout n ju u danu. Apejuwe pod si tun gbe eto imulo kanna, idi niyẹn ti faili kanna fi pada.

Pipe dnsPolicy: None daduro atunda ati pe o tun yọ yiyanju cluster kuro. O gba faili ti o n sakoso ati pe o padanu awon oruko ti o nilo. Iyipada yii ni gbogbo isoro naa: resolv.conf ko mo ero agbegbe, o kan mo awon server ti a dan wo ni titọ, nitorina ko le fi cluster.local ranse si adirẹsi kan ati agbegbe ikọkọ si omiran.

Sise resolver kan ninu pod, lori loopback

Dari pod si server oruko kan soso lori loopback, lẹhinna jẹ ki container CoreDNS ti o pin aaye oruko netiwọọki pod dahun lori ebute 53. Ṣeto eto imulo si None, fun pod ni adirẹsi kan naa, ki o si fi container DNS kun lẹgbẹẹ VPN ati ohun elo:

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-corefile

Awon container mẹta pin aaye oruko netiwọọki kan, nitorina 127.0.0.1:53 lati container ohun elo de CoreDNS laisi iṣẹ, laisi port-forward ati laisi yiyi kọja netiwọọki cluster. Gbigbe Corefile lati ConfigMap n pa a mọ gẹgẹ bi idawọle ti a ti ṣe ẹya dipo faili ti a n satunse ni aaye. resolv.conf ti a da yoo ni server oruko kan ati ko si ohun miiran, ipo ti a le ronu lori rẹ.

Awon alaye meji n jani lẹnu nibi. Aworan osise so ebute 53 gẹgẹ bi root, ati diẹ ninu awon eto imulo cluster nilo ki o kọ eyi ni gbangba. Gbogbo container ninu pod dale lori container kan naa ti n sise, nitorina fi readiness probe kun lori oruko ti ko lewu ki o si jẹ ki ohun elo farada awon ikuna ibẹrẹ.

Fun gbogbo agbegbe ikọkọ ni upstream tirẹ

Corefile je atokọ awon agbegbe, ọkọọkan n pe server ti o le dahun rẹ. Bulọọki kan bo agbegbe tunnel, bulọọki ti o mu ohun gbogbo wa ni ipari ati pe o mu ohun gbogbo ti ko si bulọọki kedere ti o beere. Bulọọki ti o mu ohun gbogbo gbọdọ tọka si upstream gidi, ko gbọdọ pada si pod rara: .:53 { forward . 10.100.0.10 } tun lo resolver cluster nitori o ti n fi awon oruko gbangba ranse si awon resolver ti node tikararẹ. Ko si ohun miiran ninu pod ti o nilo lati mọ netiwọọki ti oruko kan wa.

.:53 {
  errors
  cache 30
  forward . 10.100.0.10
}

svc.acme.internal:53 {
  errors
  cache 30
  forward . 192.168.240.1
}

Ka adirẹsi cluster lati iṣẹ kube-dns ninu kube-system dipo kikopa ọkan lati inu nkan, nitori CIDR iṣẹ yatọ. Adirẹsi tunnel wa lati iye dhcp-option DNS ti server OpenVPN fi ranse, tabi lati server alaṣẹ agbegbe yẹn. Ti resolver cluster rẹ ko ba dahun si awon oruko gbangba, fi adirẹsi resolver node sinu bulọọki ti o mu ohun gbogbo, ti a ka lori node kii se ninu pod.

Ma dari bulọọki ti o mu ohun gbogbo si /etc/resolv.conf, eyi ni ila kan ti o fa ifamọra ati pakute ninu eto gbẹtẹ yii. Labẹ dnsPolicy: None faili pod tikararẹ ni server oruko kan soso 127.0.0.1, nitorina ibi-afẹde yẹn ni CoreDNS funrararẹ ati gbogbo ibeere ti ko baamu n tun sọ titi akoko yoo fi tan. Bulọọki ti a pe ni svc.acme.internal baamu oruko yẹn ati gbogbo oruko labẹ rẹ, eyi ti o bo db.svc.acme.internal ati yọ svc.acme.internal.example.net kuro. Aami ipari je ti ohun ikọ, nitori awon oruko agbegbe ni a n ṣatunṣe si irisi ti o peye; aala suffix ni o pinnu ibi ti ibeere yoo de.

Pinnu boya gbigbe lọ je ti resolver cluster

Ti gbogbo ẹru iṣẹ ninu aaye oruko ba nilo agbegbe tunnel, bulọọki gbigbe lọ ninu ConfigMap CoreDNS labẹ kube-system din owo ju sidecar fun pod kọọkan. Iyipada yẹn wa ni ipele cluster: o nilo ẹtọ alabojuto ati atunbere imuṣẹ ti gbogbo eniyan dale lori rẹ. Fi mọ agbegbe kan naa nikan, kii se gbongbo rara. Adirẹsi tunnel ti ẹru iṣẹ kan yoo di resolver ti gbogbo pod fun agbegbe, ati ni ọjọ ti tunnel ba ṣubu gbogbo cluster yoo padanu oruko naa.

Sidecar n pa radius bugbamu mọ ninu pod kan, eyi ni aiyipada ti o dara ju nigbati awon iṣẹ diẹ nikan ba nilo netiwọọki jijinna. Ohunkohun ti o ba yan, kọ ẹ sile iru resolver ti o ni agbegbe, nitori ẹni ti o tẹle ti n yanju timeout yoo beere.

Awon oruko ti n yanju nigbati awon asopọ tun kuna

Yiyanju je ọkan ninu awon ohun meji ti tunnel gbọdọ gbe; ekeji ni ona ipada, ati netiwọọki pod n fi i pamọ daradara. Ti server OpenVPN funrararẹ ba n sise gẹgẹ bi pod, awon ofin ti o fi kun ninu container yẹn ko n sakoso ijabọ ti o jade nipasẹ node. Ikuna yẹn din: awon pod lori node ti o tun sise server nikan ni o gba idahun, gbogbo ohun miiran si tan akoko.

Sise server pẹlu hostNetwork: true n da a pada sinu aaye oruko node, nibi ti ofin FORWARD ati itumọ orisun ti n sise. Tumọ adagun onibara ni ijade, bibẹẹkọ ko si node jijinna ti o ni ona ipada si adirẹsi tunnel bi 10.8.0.6. Wo awon itọsọna mejeeji ṣaaju ki o to fi ọwọ kan Corefile lẹẹkansi. Tunnel ti o gbe ibeere sugbon kii gbe idahun n pese timeout kanna ti resolver ti ko gba ibeere rara.

Fi idi rẹ mulẹ lati pod tuntun, kii se lati inu igba ti o ṣe atunse

Beere awon agbegbe mejeeji ni gbangba, lẹhinna tun ibeere ṣe lẹhin ti a ba ropo pod. Eto ti o wa ninu container ti n sise nikan kii se eto:

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 +short

Ti bata akọkọ ba dahun ti bata lẹhin iyipada ko dahun, Corefile tọ ati apejuwe pod kii tọ. Ti awon mejeeji ba dahun sugbon ohun elo ko le sopọ, dẹkun ṣiṣatunṣe DNS ki o dan ona TCP wo pẹlu nc -vz db.svc.acme.internal 5432 lati inu container. Tọju awon ti dig jade sinu tikẹẹti, nitori eyi ni ohun ti o ya isoro oruko kuro ninu isoro ipa-ona.

Àwọn àpilẹ̀kọ tó jọra