Exposing Services in Kubernetes
Kuna njia tofauti za kufunua huduma katika Kubernetes ili endpoints za ndani na endpoints za nje ziweze kuzifikia. Usanidi huu wa Kubernetes ni muhimu sana kwani msimamizi anaweza kumpa ufikiaji wa wahalifu kwenye huduma ambazo hawapaswi kuwa na uwezo wa kuzifikia.
Uchambuzi wa Kiotomatiki
Kabla ya kuanza kutambua njia ambazo K8s inatoa kufunua huduma hadharani, jua kwamba ikiwa unaweza kuorodhesha majina ya nafasi, huduma na ingresses, unaweza kupata kila kitu kilichofunuliwa hadharani kwa:
ClusterIP
ClusterIP huduma ni chaguo-msingi la Kubernetes huduma. Inakupa huduma ndani ya kikundi chako ambayo programu nyingine ndani ya kikundi chako zinaweza kufikia. Hakuna upatikanaji wa nje.
Hata hivyo, hii inaweza kufikiwa kwa kutumia Kubernetes Proxy:
Sasa, unaweza kutembea kupitia API ya Kubernetes ili kupata huduma kwa kutumia mpangilio huu:
http://localhost:8080/api/v1/proxy/namespaces/<NAMESPACE>/services/<SERVICE-NAME>:<PORT-NAME>/
Kwa mfano, unaweza kutumia URL ifuatayo:
http://localhost:8080/api/v1/proxy/namespaces/default/services/my-internal-service:http/
kupata huduma hii:
Mbinu hii inahitaji uendeshe kubectl
kama mtumiaji aliye na uthibitisho.
NodePort
Wakati NodePort unapotumiwa, bandari maalum inapatikana kwenye Nodes zote (zinawakilisha Mashine za Virtual). Trafiki inayoelekezwa kwenye bandari hii maalum kisha inaelekezwa kwa mpangilio kwenye huduma. Kwa kawaida, mbinu hii haipendekezwi kutokana na mapungufu yake.
Mfano wa maelezo ya NodePort:
Ikiwa haujataja nodePort katika yaml (ni bandari itakayofunguliwa) bandari katika eneo la 30000–32767 itatumika.
LoadBalancer
Inafunua Huduma kwa njia ya kutumia balansa ya mzigo ya mtoa huduma wa wingu. Kwenye GKE, hii itaanzisha Balansa ya Mzigo wa Mtandao ambayo itakupa anwani moja ya IP ambayo itapeleka trafiki yote kwenye huduma yako.
Unalazimika kulipa kwa Balansa ya Mzigo kwa kila huduma iliyofunuliwa, ambayo inaweza kuwa ghali.
ExternalName
Kutoka kwa nyaraka: Huduma za aina ya ExternalName hufanya ramani ya Huduma kwa jina la DNS, sio kwa kuchagua kawaida kama my-service
au cassandra
. Unaweza kutaja Huduma hizi kwa kutumia parameter ya spec.externalName
.
Ufafanuzi huu wa Huduma, kwa mfano, unafanya ramani ya Huduma ya my-service
katika nafasi ya majina ya prod
hadi my.database.example.com
:
Upon searching for the host my-service.prod.svc.cluster.local
, the cluster DNS Service returns a CNAME
record with the value my.database.example.com
. Accessing my-service
works in the same way as other Services but with the crucial difference that redirection happens at the DNS level rather than via proxying or forwarding.
Anwani za IP za Kigeni
Trafiki inayoingia kwenye kikundi na IP ya kigeni (kama IP ya marudio), kwenye bandari ya Huduma, itaelekezwa kwa moja ya mwisho wa Huduma. externalIPs
hazisimamiwi na Kubernetes na ni jukumu la msimamizi wa kikundi.
Katika maelezo ya Huduma, externalIPs
inaweza kutajwa pamoja na aina yoyote ya ServiceTypes
. Katika mfano hapa chini, "my-service
" inaweza kufikiwa na wateja kwenye "80.11.12.10:80
" (externalIP:port
)
Ingress
Tofauti na mifano yote iliyotajwa hapo juu, Ingress SI aina ya huduma. Badala yake, inakaa mbele ya huduma nyingi na hufanya kama "router" mjanja au njia ya kuingia kwenye kikundi chako.
Unaweza kufanya mambo mengi tofauti na Ingress, na kuna aina nyingi za watawala wa Ingress zenye uwezo tofauti.
Watawala wa Ingress wa GKE wa chaguo-msingi wataanzisha HTTP(S) Load Balancer kwako. Hii itakuruhusu kufanya mwelekeo kulingana na njia na subdomain kwa huduma za nyuma. Kwa mfano, unaweza kutuma kila kitu kwenye foo.yourdomain.com kwa huduma ya foo, na kila kitu chini ya njia ya yourdomain.com/bar/ kwa huduma ya bar.
YAML kwa kitu cha Ingress kwenye GKE na L7 HTTP Load Balancer inaweza kuonekana kama hii:
Marejeo
Last updated