Kubernetes Basics
Msingi wa Kubernetes
Mwandishi asili wa ukurasa huu ni Jorge (soma chapisho lake la asili hapa)
Usanifu na Msingi
Kubernetes Inafanya Nini?
Inaruhusu kukimbia chombo/au vyombo vya kontena katika injini ya kontena.
Ratiba inaruhusu vyombo kutekeleza kazi kwa ufanisi.
Kuweka vyombo hai.
Inaruhusu mawasiliano ya vyombo.
Inaruhusu mbinu za kupeleka.
Kusimamia kiasi kikubwa cha habari.
Usanifu
Node: mfumo wa uendeshaji na podi au podi.
Pod: Kifungashio cha kontena au vyombo vingi na. Kipodi inapaswa kuwa na maombi moja tu (kwa hivyo kawaida, podi inaendesha kontena 1 tu). Podi ni njia ambayo kubernetes inaondoa teknolojia ya kontena inayotumika.
Huduma: Kila podi ina anwani ya IP ya ndani kutoka kwa safu ya ndani ya node. Walakini, inaweza pia kufunuliwa kupitia huduma. Huduma pia ina anwani ya IP na lengo lake ni kudumisha mawasiliano kati ya podi ili ikiwa moja inakufa mbadala mpya (na anwani tofauti ya ndani) itapatikana ikiwa inafunuliwa katika anwani sawa ya huduma. Inaweza kusanidiwa kama ndani au nje. Huduma pia hufanya kazi kama mizani ya mzigo wakati podi 2 zimeunganishwa kwenye huduma ile ile. Wakati huduma inapoundwa unaweza kupata vituo vya mwisho vya kila huduma inayotumika
kubectl get endpoints
Kubelet: Wakala wa nodi wa msingi. Sehemu ambayo inaweka mawasiliano kati ya nodi na kubectl, na inaweza kuendesha podi tu (kupitia seva ya API). Kubelet haisimamii kontena ambazo hazikuundwa na Kubernetes.
Kube-proxy: ni huduma inayohusika na mawasiliano (huduma) kati ya apiserver na nodi. Msingi ni IPtables kwa nodi. Watumiaji wengi wenye uzoefu wanaweza kusakinisha kube-proxies zingine kutoka kwa wauzaji wengine.
Kontena ya Sidecar: Kontena za Sidecar ni kontena ambazo zinapaswa kuendeshwa pamoja na kontena kuu katika podi. Mtindo huu wa sidecar unapanua na kuboresha utendaji wa kontena za sasa bila kuzibadilisha. Leo, Tunajua kwamba tunatumia teknolojia ya kontena kufunga mahitaji yote ya programu ili iweze kufanya kazi mahali popote. Kontena inafanya kitu kimoja tu na kinafanya kitu hicho vizuri sana.
Mchakato wa Mkuu:
Seva ya API: Ni njia ambayo watumiaji na podi hutumia kuzungumza na mchakato wa mkuu. Ombi lililothibitishwa tu linapaswa kuruhusiwa.
Mipangilio: Ratiba inahusiana na kuhakikisha kuwa Podi zinalinganishwa na Nodi ili Kubelet iweze kuziendesha. Ina akili ya kutosha kuamua ni nodi ipi ina rasilimali zaidi zilizopo na kugawa podi mpya kwake. Kumbuka kuwa ratiba haisababishi podi mpya, inawasiliana tu na mchakato wa Kubelet unaoendesha ndani ya nodi, ambayo itazindua podi mpya.
Meneja wa Kudhibiti wa Kube: Huchunguza rasilimali kama seti za nakala au kupeleka ili kuhakikisha kuwa, kwa mfano, idadi sahihi ya podi au nodi zinaendeshwa. Kwa mfano, ikiwa podi inakosekana, itawasiliana na ratiba kuanza mpya. Inadhibiti nakala, alama, na huduma za akaunti kwa API.
etcd: Uhifadhi wa data, thabiti, na usambazaji. Ni hifadhidata ya Kubernetes na uhifadhi wa funguo-na-thamani ambapo inahifadhi hali kamili ya vikundi (kila mabadiliko yanalogwa hapa). Vipengele kama Ratiba au Meneja wa Kudhibiti hutegemea tarehe hii kujua mabadiliko yaliyotokea (rasilimali zilizopo za nodi, idadi ya podi zinazoendeshwa...)
Meneja wa Kudhibiti wa Kudhibiti wa Wingu: Ni meneja maalum wa udhibiti wa mtiririko na programu, yaani: ikiwa una vikundi katika AWS au OpenStack.
Tafadhali kumbuka kwamba kwa kuwa kunaweza kuwa na nodi kadhaa (zinaendesha podi kadhaa), pia kunaweza kuwa na mchakato wa mkuu kadhaa ambapo upatikanaji wao kwa seva ya Api unagawanywa mzigo na etcd yao kusawazishwa.
Vipimo:
Wakati podi inaunda data ambayo haipaswi kupotea wakati podi inapotea inapaswa kuhifadhiwa kwenye kiasi cha kimwili. Kubernetes inaruhusu kuambatisha kiasi kwa podi ili kuhifadhi data. Kiasi kinaweza kuwa kwenye mashine ya ndani au kwenye uhifadhi wa mbali. Ikiwa unaendesha podi kwenye nodi za kimwili tofauti unapaswa kutumia uhifadhi wa mbali ili podi zote ziweze kufikia.
Mipangilio Mingine:
Ramani ya Mipangilio: Unaweza kusanidi URLs za kupata huduma. Podi itapata data kutoka hapa kujua jinsi ya kuwasiliana na huduma zingine (podi). Tafadhali kumbuka kuwa hii sio mahali pa kupakia siri!
Siri: Hii ni mahali pa kuhifadhi data za siri kama nywila, funguo za API... zilizoandikwa kwa B64. Podi itaweza kupata data hii kutumia siri inayohitajika.
Upelekaji: Hapa ndipo viungo vinavyotakiwa kutekelezwa na kubernetes vinavyoonyeshwa. Mtumiaji kawaida hatafanya kazi moja kwa moja na podi, podi zinafichwa katika Seti za Nakala (idadi ya podi sawa zilizorekebishwa), ambazo hufanywa kupitia upelekaji. Tafadhali kumbuka kuwa upelekaji ni kwa maombi yasiyo na hali. Mipangilio ya chini kwa upelekaji ni jina na picha ya kuendesha.
Seti ya Kustahiki: Kipengele hiki kimeundwa kwa maombi maalum kama benki ya data ambayo inahitaji kufikia uhifadhi sawa.
Kuingia: Hii ni usanidi unaotumiwa kufunua programu kwa umma na URL. Tafadhali kumbuka hii inaweza pia kufanywa kwa kutumia huduma za nje, lakini hii ndio njia sahihi ya kufunua programu.
Ikiwa unatekeleza Kuingia utahitaji kuunda Wakalishi wa Kuingia. Mlezi wa Kuingia ni podi ambayo itakuwa mwisho wa kupokea maombi na kuchunguza na kuzipakia kwa huduma. mlezi wa kuingia atatuma ombi kulingana na sheria za kuingia zilizosanidiwa. Tafadhali kumbuka kuwa sheria za kuingia zinaweza kuelekeza kwa njia tofauti au hata subdomains kwa huduma za ndani za kubernetes.
Mbinu bora ya usalama itakuwa kutumia mizani ya mzigo wa wingu au seva ya wakala kama kituo cha kuingia ili usiwe na sehemu yoyote ya kikundi cha Kubernetes iliyofunuliwa.
Wakati ombi ambalo halilingani na sheria yoyote ya kuingia linapokelewa, mlezi wa kuingia atalielekeza kwa "Mwisho wa Msingi". Unaweza
eleza
mlezi wa kuingia kupata anwani ya kipengele hiki.minikube addons enable ingress
Miundombinu ya PKI - Mamlaka ya Cheti CA:
CA ni mzizi wa kuaminika kwa vyeti vyote ndani ya kikundi.
Inaruhusu vipengele kuthibitisha kwa kila mmoja.
Vyeti vyote vya kikundi vinasainiwa na CA.
ETCd ina cheti chake cha kipekee.
aina:
cheti cha apiserver.
cheti cha kubelet.
cheti cha scheduler.
Hatua za Msingi
Minikube
Minikube inaweza kutumika kufanya vipimo vya haraka kwenye kubernetes bila kuwa na haja ya kupeleka mazingira kamili ya kubernetes. Itaendesha mchakato wa bwana na nodi kwenye mashine moja. Minikube itatumia virtualbox kuendesha nodi. Angalia hapa jinsi ya kuweka.
Misingi ya Kubectl
Kubectl
ni chombo cha mstari wa amri kwa vikundi vya kubernetes. Inawasiliana na seva ya Api ya mchakato wa msingi kutekeleza vitendo katika kubernetes au kuomba data.
Dashibodi ya Minikube
Dashibodi inaruhusu kuona kwa urahisi ni nini kinachofanyika kwenye minikube, unaweza kupata URL ya kufikia hapo:
Mifano ya faili za usanidi wa YAML
Kila faili ya usanidi ina sehemu 3: metadata, specification (kile kinachohitaji kuzinduliwa), hali (hali inayotakiwa). Ndani ya maelezo ya usanidi wa faili ya usanidi wa kutolewa unaweza kupata kiolezo kilichoelezwa na muundo mpya wa usanidi unaoelezea picha ya kukimbia:
Mfano wa Kutolewa + Huduma iliyotangazwa katika faili moja ya usanidi (kutoka hapa)
Kwa kuwa huduma kawaida inahusiana na kutolewa moja, ni rahisi kutangaza yote mawili katika faili moja ya usanidi (huduma iliyotangazwa katika usanidi huu inaweza kufikiwa ndani tu):
Mfano wa usanidi wa huduma ya nje
Huduma hii itapatikana kwa njia ya nje (angalia sifa za nodePort
na type: LoadBalancer
):
Hii ni muhimu kwa ajili ya majaribio lakini kwa uzalishaji unapaswa kuwa na huduma za ndani pekee na Ingress ili kufunua programu.
Mfano wa faili ya mazingira ya Ingress
Hii itafunua programu katika http://dashboard.com
.
Mfano wa faili ya usanidi wa siri
Tafadhali angalia jinsi nywila zilivyoandikwa kwa msimbo wa Base64 (ambao si salama!)
Mfano wa ConfigMap
ConfigMap ni usanidi ambao unatolewa kwa makasha ili wajue jinsi ya kutambua na kupata huduma nyingine. Katika kesi hii, kila kasha litajua kuwa jina mongodb-service
ni anwani ya kasha wanayoweza kuwasiliana nayo (kasha hili litakuwa linatekeleza mongodb):
Kisha, ndani ya mseto wa utekelezaji, anwani hii inaweza kutajwa kwa njia ifuatayo ili ipakiwe ndani ya env ya kikapu:
Mfano wa mpangilio wa kiasi
Unaweza kupata mifano tofauti ya faili za yaml za mpangilio wa uhifadhi katika https://gitlab.com/nanuchi/youtube-tutorial-series/-/tree/master/kubernetes-volumes. Tafadhali kumbuka kuwa volumes hazipo ndani ya majina ya nafasi
Majina ya Nafasi
Kubernetes inasaidia vijitengo vya kielelezo vingi vinavyoungwa mkono na kikundi cha mwili kimoja. Vijitengo hivi vya kielelezo vinaitwa majina ya nafasi. Hizi zimekusudiwa kutumiwa katika mazingira yenye watumiaji wengi waliotapakaa katika timu au miradi tofauti. Kwa vikundi vyenye watumiaji kadhaa hadi kumi, hauitaji kuunda au kufikiria majina ya nafasi kabisa. Unapaswa tuanza kutumia majina ya nafasi ili kuwa na udhibiti bora na kuandaa kila sehemu ya programu iliyosakinishwa katika kubernetes.
Majina ya nafasi hutoa eneo la majina. Majina ya rasilimali lazima yawe ya kipekee ndani ya nafasi, lakini sio kati ya majina ya nafasi. Majina ya nafasi haziwezi kuwa ndani ya nyingine na kila rasilimali ya Kubernetes inaweza kuwa katika nafasi moja tu.
Kuna majina 4 ya nafasi kwa chaguo-msingi ikiwa unatumia minikube:
kube-system: Haijamaanishwa au watumiaji kutumia na usiguse. Ni kwa ajili ya mchakato wa kudhibiti na kubectl.
kube-public: Tarehe inayopatikana kwa umma. Ina configmap ambayo ina habari za kikundi.
kube-node-lease: Inabainisha upatikanaji wa kifaa.
default: Nafasi ambayo mtumiaji atatumia kuunda rasilimali.
Tafadhali kumbuka kuwa rasilimali nyingi za Kubernetes (k.m. pods, huduma, wakala wa uigaji, na zingine) ziko katika majina ya nafasi fulani. Walakini, rasilimali zingine kama rasilimali za nafasi na rasilimali za kiwango cha chini, kama vile nodes na persistenVolumes haziko katika nafasi. Ili kuona ni rasilimali zipi za Kubernetes ziko na haziko katika nafasi:
Unaweza kuokoa jina la nafasi kwa amri zote za kubectl zinazofuata katika muktadha huo.
Helm
Helm ni msimamizi wa pakiti kwa Kubernetes. Inaruhusu kupakia faili za YAML na kuzisambaza kwenye hifadhi za umma na binafsi. Pakiti hizi huitwa Helm Charts.
Helm pia ni injini ya templeti inayoruhusu kuzalisha faili za config na mabadiliko:
Siri za Kubernetes
Siri ni kitu ambacho kina data nyeti kama nenosiri, token au ufunguo. Taarifa kama hizo zingine zingeweza kuwekwa kwenye maelezo ya Pod au kwenye picha. Watumiaji wanaweza kuunda Siri na mfumo pia hujenga Siri. Jina la kitu cha Siri lazima liwe jina la subdomain la DNS halali. Soma hapa hati rasmi.
Siri zinaweza kuwa vitu kama:
API, funguo za SSH.
Vyeti vya OAuth.
Anwani, Nenosiri (maandishi ya kawaida au b64 + kificho).
Taarifa au maoni.
Kanuni za uunganisho wa database, mistari… .
Kuna aina tofauti za siri katika Kubernetes
Aina ya Kujengwa | Matumizi |
---|---|
Opaque | data iliyoundwa na mtumiaji (Chaguo-msingi) |
kubernetes.io/service-account-token | tokeni ya akaunti ya huduma |
kubernetes.io/dockercfg | faili iliyosanidishwa ~/.dockercfg |
kubernetes.io/dockerconfigjson | faili iliyosanidishwa ~/.docker/config.json |
kubernetes.io/basic-auth | anwani za uthibitishaji wa msingi |
kubernetes.io/ssh-auth | anwani za uthibitishaji wa SSH |
kubernetes.io/tls | data kwa mteja au seva ya TLS |
bootstrap.kubernetes.io/token | data ya tokeni ya kuanzisha |
Aina ya Opaque ni ile ya chaguo-msingi, jozi ya kawaida ya funguo- thamani iliyoundwa na watumiaji.
Jinsi siri inavyofanya kazi:
Faili ya usanidi ifuatayo inaainisha siri inayoitwa mysecret
na jozi 2 za funguo-thamani username: YWRtaW4=
na password: MWYyZDFlMmU2N2Rm
. Pia inaainisha pod inayoitwa secretpod
ambayo itakuwa na username
na password
iliyoundwa katika mysecret
ikionyeshwa katika mazingira ya pembejeo SECRET_USERNAME
__ na __ SECRET_PASSWOR
. Pia ita weka siri ya username
ndani ya mysecret
kwenye njia /etc/foo/my-group/my-username
na ruhusa za 0640
.
Siri katika etcd
etcd ni duka la thamani-ufunguo linalofanana na linalopatikana kila wakati linalotumiwa kama duka la nyuma la Kubernetes kwa data zote za kikundi. Hebu tupate ufikivu wa siri zilizohifadhiwa katika etcd:
Utaweza kuona vyeti, funguo na url ziko wapi kwenye FS. Mara utakapovipata, utaweza kuunganisha kwenye etcd.
Baada ya kufanikiwa kuanzisha mawasiliano ungeweza kupata siri:
Kuongeza encryption kwa ETCD
Kwa chaguo-msingi siri zote huhifadhiwa kwa maandishi wazi ndani ya etcd isipokuwa utumie safu ya encryption. Mfano ufuatao unategemea https://kubernetes.io/docs/tasks/administer-cluster/encrypt-data/
Baada ya hapo, unahitaji kuweka bendera ya --encryption-provider-config
kwenye kube-apiserver
ili ielekeze kwenye eneo la faili ya usanidi iliyoundwa. Unaweza kuhariri /etc/kubernetes/manifest/kube-apiserver.yaml
na kuongeza mistari ifuatayo:
Endelea kushuka katika volumeMounts:
Endelea chini kwenye volumeMounts hadi hostPath:
Kuthibitisha kuwa data imefichwa
Data inaandikwa kwa njia ya siri kwenye etcd. Baada ya kuanzisha upya kube-apiserver
yako, siri mpya au iliyosasishwa inapaswa kuwa imefichwa wakati inapohifadhiwa. Ili kuthibitisha hili, unaweza kutumia programu ya mstari wa amri ya etcdctl
kupata maudhui ya siri yako.
Unda siri mpya iitwayo
secret1
kwenye eneo ladefault
:
Kutumia amri ya mstari wa amri ya etcdctl, soma siri hiyo kutoka kwa etcd:
ETCDCTL_API=3 etcdctl get /registry/secrets/default/secret1 [...] | hexdump -C
ambapo [...]
lazima iwe ni vigezo vya ziada vya kuunganisha kwenye seva ya etcd. 3. Thibitisha siri iliyohifadhiwa imeanzishwa na k8s:enc:aescbc:v1:
ambayo inaonyesha kuwa mtoa huduma wa aescbc
ameficha data inayotokana. 4. Hakikisha siri inadecode vizuri wakati inapopatikana kupitia API:
inapaswa kulingana na mykey: bXlkYXRh
, mydata imefichwa, angalia kudecode siri ili kudecode siri hiyo kikamilifu.
Kwa kuwa siri zinafichwa wakati wa kuandika, kufanya sasisho kwenye siri kutaficha yaliyomo:
Vidokezo vya mwisho:
Jaribu usiweke siri kwenye FS, pata kutoka sehemu nyingine.
Angalia https://www.vaultproject.io/ kwa kuongeza ulinzi zaidi kwa siri zako.
Marejeo
Last updated