ProHoster > Блог > Isakoso > Iriri wa pẹlu data ni etcd Kubernetes iṣupọ taara (laisi K8s API)
Iriri wa pẹlu data ni etcd Kubernetes iṣupọ taara (laisi K8s API)
Npọ sii, awọn alabara n beere lọwọ wa lati pese iraye si iṣupọ Kubernetes lati ni anfani lati wọle si awọn iṣẹ laarin iṣupọ: ki wọn le sopọ taara si data data tabi iṣẹ kan, lati so ohun elo agbegbe kan pọ pẹlu awọn ohun elo laarin iṣupọ…
Fun apẹẹrẹ, iwulo wa lati sopọ lati ẹrọ agbegbe rẹ si iṣẹ kan memcached.staging.svc.cluster.local. A pese agbara yii nipa lilo VPN laarin iṣupọ eyiti alabara sopọ si. Lati ṣe eyi, a kede awọn subnets ti pods, awọn iṣẹ ati titari iṣupọ DNS si alabara. Nitorinaa, nigbati alabara kan gbiyanju lati sopọ si iṣẹ naa memcached.staging.svc.cluster.local, ibeere naa lọ si iṣupọ DNS ati ni idahun gba adirẹsi iṣẹ yii lati inu nẹtiwọki iṣẹ iṣupọ tabi adirẹsi adarọ-ese.
A tunto awọn iṣupọ K8s nipa lilo kubeadm, nibiti subnet iṣẹ aiyipada jẹ 192.168.0.0/16, ati awọn nẹtiwọki ti pods ni 10.244.0.0/16. Nigbagbogbo ohun gbogbo ṣiṣẹ daradara, ṣugbọn awọn aaye meji wa:
Subnet 192.168.*.* nigbagbogbo lo ninu awọn nẹtiwọọki ọfiisi alabara, ati paapaa diẹ sii nigbagbogbo ni awọn nẹtiwọọki ile idagbasoke. Ati lẹhinna a pari pẹlu awọn ija: awọn olulana ile ṣiṣẹ lori subnet yii ati VPN titari awọn subnet wọnyi lati iṣupọ si alabara.
A ni ọpọlọpọ awọn iṣupọ (igbejade, ipele ati/tabi ọpọlọpọ awọn iṣupọ dev). Lẹhinna, nipasẹ aiyipada, gbogbo wọn yoo ni awọn subnets kanna fun awọn adarọ-ese ati awọn iṣẹ, eyiti o ṣẹda awọn iṣoro nla fun iṣẹ nigbakanna pẹlu awọn iṣẹ ni ọpọlọpọ awọn iṣupọ.
A ti gba aṣa ti lilo oriṣiriṣi awọn subnets fun awọn iṣẹ ati awọn adarọ-ese laarin iṣẹ akanṣe kanna - ni gbogbogbo, ki gbogbo awọn iṣupọ ni awọn nẹtiwọọki oriṣiriṣi. Sibẹsibẹ, nọmba nla ti awọn iṣupọ wa ni iṣẹ ti Emi kii yoo fẹ lati yiyi pada lati ibere, nitori wọn nṣiṣẹ ọpọlọpọ awọn iṣẹ, awọn ohun elo ipinlẹ, ati bẹbẹ lọ.
Ati lẹhinna a beere lọwọ ara wa: bawo ni a ṣe le yi subnet pada ninu iṣupọ ti o wa tẹlẹ?
Wiwa ti awọn ipinnu
Iwa ti o wọpọ julọ ni lati tun ṣe gbogbo awọn iṣẹ pẹlu iru ClusterIP. Bi aṣayan, le ni imọran ati eyi:
Ilana atẹle naa ni iṣoro: lẹhin ohun gbogbo ti tunto, awọn adarọ-ese wa pẹlu IP atijọ bi olupin orukọ DNS ni /etc/resolv.conf.
Niwọn igba ti Emi ko tun rii ojutu naa, Mo ni lati tun gbogbo iṣupọ naa tunto pẹlu kubeadm atunkọ ati tun bẹrẹ lẹẹkansi.
Ṣugbọn eyi ko dara fun gbogbo eniyan… Eyi ni awọn ifihan alaye diẹ sii fun ọran wa:
Flannel ti lo;
Awọn iṣupọ wa mejeeji ninu awọn awọsanma ati lori ohun elo;
Emi yoo fẹ lati yago fun tun-ṣiṣẹ gbogbo awọn iṣẹ inu iṣupọ;
O nilo lati ṣe ohun gbogbo pẹlu nọmba ti o kere julọ ti awọn iṣoro;
Iṣẹ akọkọ ni lati rii daju pe ninu iṣupọ ti a fi ranṣẹ nipa lilo kubeadm pẹlu subnet iṣẹ kan 192.168.0.0/16, rọpo rẹ pẹlu 172.24.0.0/16.
Ati pe o ṣẹlẹ pe a ti nifẹ lati rii kini ati bii o ṣe fipamọ Kubernetes ni etcd, kini a le ṣe pẹlu rẹ… Nitorina a ronu: “Kilode ti kii ṣe imudojuiwọn data nikan ni etcd, rọpo awọn adirẹsi IP atijọ (subnet) pẹlu awọn tuntun? »
Lẹhin wiwa awọn irinṣẹ ti a ti ṣetan fun ṣiṣẹ pẹlu data ni etcd, a ko rii ohunkohun ti o yanju iṣoro naa patapata. (Ni ọna, ti o ba mọ nipa eyikeyi awọn ohun elo fun ṣiṣẹ pẹlu data taara ni etcd, a yoo ni riri fun awọn ọna asopọ.) Sibẹsibẹ, ibẹrẹ ti o dara ni etcdhhelper lati OpenShift(O ṣeun si awọn onkọwe rẹ!).
IwUlO yii le sopọ si etcd nipa lilo awọn iwe-ẹri ati ka data lati ibẹ nipa lilo awọn aṣẹ ls, get, dump.
Fi etcdhhelper kun
Ero ti o tẹle jẹ ọgbọn: “Kini o ṣe idiwọ fun ọ lati ṣafikun ohun elo yii nipa fifi agbara lati kọ data si ati bẹbẹ lọ?”
O di ẹya ti a tunṣe ti etcdhhelper pẹlu awọn iṣẹ tuntun meji changeServiceCIDR и changePodCIDR. lori re o le wo koodu naa nibi.
Kini awọn ẹya tuntun ṣe? Algoridimu changeServiceCIDR:
ṣẹda deserializer;
ṣajọ ikosile deede lati rọpo CIDR;
a lọ nipasẹ gbogbo awọn iṣẹ pẹlu iru ClusterIP ninu iṣupọ:
pinnu iye lati etcd sinu ohun Go;
lilo ikosile deede a rọpo awọn baiti meji akọkọ ti adirẹsi naa;
fi adiresi IP kan fun iṣẹ naa lati inu subnet tuntun;
ṣẹda a serializer, iyipada awọn Go ohun sinu protobuf, kọ titun data to ati be be lo.
Išẹ changePodCIDR pataki iru changeServiceCIDR - nikan dipo ti satunkọ awọn sipesifikesonu iṣẹ, a se o fun ipade ati ayipada .spec.PodCIDR si titun kan subnet.
Ṣaṣeṣe
Yi iṣẹ CID pada
Eto fun imuse iṣẹ naa rọrun pupọ, ṣugbọn o kan akoko isunmi lakoko ti gbogbo awọn adarọ-ese ti o wa ninu iṣupọ naa tun ṣe. Lẹhin ti n ṣalaye awọn igbesẹ akọkọ, a yoo tun pin awọn ero lori bii, ni imọ-jinlẹ, akoko idinku le dinku.
Awọn igbesẹ igbaradi:
fifi sọfitiwia pataki ati apejọ patched etcdhelper;
A fipamọ fun ara wa etcdhelper.go, ṣe igbasilẹ awọn igbẹkẹle, gba:
wget https://raw.githubusercontent.com/flant/examples/master/2020/04-etcdhelper/etcdhelper.go
go get go.etcd.io/etcd/clientv3 k8s.io/kubectl/pkg/scheme k8s.io/apimachinery/pkg/runtime
go build -o etcdhelper etcdhelper.go
4. Yi subnet iṣẹ pada ni Kubernetes iṣakoso ofurufu farahan. Ninu awọn faili /etc/kubernetes/manifests/kube-apiserver.yaml и /etc/kubernetes/manifests/kube-controller-manager.yaml yi paramita --service-cluster-ip-range si subnet tuntun kan: 172.24.0.0/16 dipo 192.168.0.0/16.
5. Niwọn bi a ti n yi subnet iṣẹ pada si eyiti kubeadm fun awọn iwe-ẹri fun apiserver (pẹlu), wọn nilo lati tun gbejade:
Jẹ ki a wo iru awọn ibugbe ati awọn adirẹsi IP ti ijẹrisi lọwọlọwọ ti fun:
openssl x509 -noout -ext subjectAltName </etc/kubernetes/pki/apiserver.crt
X509v3 Subject Alternative Name:
DNS:dev-1-master, DNS:kubernetes, DNS:kubernetes.default, DNS:kubernetes.default.svc, DNS:kubernetes.default.svc.cluster.local, DNS:apiserver, IP Address:192.168.0.1, IP Address:10.0.0.163, IP Address:192.168.199.100
Išọra Ni akoko yii, ipinnu agbegbe duro ṣiṣẹ ninu iṣupọ, nitori ninu awọn adarọ-ese ti o wa ninu /etc/resolv.conf Adirẹsi CoreDNS atijọ (kube-dns) ti forukọsilẹ, ati kube-aṣoju yi awọn ofin iptables pada lati inu subnet atijọ si tuntun. Siwaju sii ninu nkan naa o ti kọ nipa awọn aṣayan ti o ṣeeṣe lati dinku akoko isinmi.
Jẹ ki a ṣatunṣe ConfigMap ni aaye orukọ kube-system:
kubectl -n kube-system edit cm kubelet-config-1.16
- ropo nibi clusterDNS si adiresi IP tuntun ti iṣẹ kube-dns: kubectl -n kube-system get svc kube-dns.
kubectl -n kube-system edit cm kubeadm-config
- a yoo ṣe atunṣe data.ClusterConfiguration.networking.serviceSubnet si titun kan subnet.
Niwọn igba ti adirẹsi kube-dns ti yipada, o jẹ dandan lati ṣe imudojuiwọn atunto kubelet lori gbogbo awọn apa:
6. Jẹ ki a tun atunbere gbogbo awọn apa iṣupọ ọkan nipasẹ ọkan.
7. Ti o ba lọ kuro ni o kere kan ipade podCIDR atijọ, lẹhinna kube-controller-manager kii yoo ni anfani lati bẹrẹ, ati pe awọn pods ninu iṣupọ ko ni ṣeto.
Ni otitọ, iyipada podCIDR le ṣee ṣe paapaa rọrun (fun apẹẹrẹ, bẹ). Ṣugbọn a fẹ lati kọ ẹkọ bi a ṣe le ṣiṣẹ pẹlu etcd taara, nitori pe awọn ọran wa nigba ṣiṣatunṣe awọn nkan Kubernetes ni bbl - awọn nikan ṣee ṣe iyatọ. (Fun apẹẹrẹ, o ko le yipada aaye Iṣẹ nikan laisi akoko idaduro spec.clusterIP.)
Abajade
Nkan naa jiroro lori iṣeeṣe ti ṣiṣẹ pẹlu data ni etcd taara, i.e. fori Kubernetes API. Nigba miiran ọna yii gba ọ laaye lati ṣe "awọn ohun ti o ni ẹtan". A ṣe idanwo awọn iṣẹ ṣiṣe ti a fun ni ọrọ lori awọn iṣupọ K8s gidi. Sibẹsibẹ, ipo imurasilẹ wọn fun lilo ni ibigbogbo jẹ PoC (ẹri ti imọran). Nitorinaa, ti o ba fẹ lo ẹya ti a tunṣe ti ohun elo etcdhelper lori awọn iṣupọ rẹ, ṣe bẹ ninu ewu tirẹ.