Bosh sahifa Wiki Service

Service

Service — Kubernetes’da o‘zgaruvchan podlar to‘plamiga barqaror tarmoq endpointi va discovery nomi beruvchi abstraksiya. Podlar rollout, failure yoki scaling sabab qayta yaratiladi va IP manzili o‘zgaradi. Service label selector orqali mos podlarni topadi, client esa alohida podlarni bilmasdan Service DNS nomiga murojaat qiladi.

Selector va endpointlar

Service selector’i pod label’lariga mos keladi. Control plane mos pod IP va portlarini EndpointSlice obyektlarida saqlaydi. Data plane proxy yoki eBPF qoidalari Service virtual IP’iga kelgan trafikni tayyor endpointlardan biriga yo‘naltiradi.

Readiness probe’dan o‘tmagan pod odatda endpoint ro‘yxatidan chiqariladi. Shuning uchun pod Running bo‘lishi uning trafik olayotganini anglatmaydi. Selector xato bo‘lsa Service mavjud, lekin endpoint bo‘sh bo‘ladi.

apiVersion: v1
kind: Service
metadata:
  name: catalog
spec:
  selector:
    app: catalog
  ports:
    - port: 80
      targetPort: 8080

Bu yerda client 80-portga ulanadi, trafik poddagi 8080-portga boradi.

Service turlari

Tur Qo‘llanishi
ClusterIP Faqat cluster ichidagi virtual IP
NodePort Har node’da ma’lum portni ochadi
LoadBalancer Tashqi load balancer bilan integratsiya
ExternalName DNS CNAME orqali tashqi nomni ko‘rsatadi
Headless Virtual IPsiz pod DNS yozuvlarini beradi

LoadBalancer xatti-harakati cloud controller yoki platforma implementation’iga bog‘liq. Tashqi IP berilishi firewall, health check va narx sozlanganini avtomatik anglatmaydi.

Discovery va DNS

Cluster DNS catalog.namespace.svc kabi nomni Service IP’iga resolve qiladi. Bir namespace ichida qisqa catalog nomi ishlashi mumkin. Search domain qulay, ammo bir xil nomli Service ko‘p namespace’da bo‘lsa to‘liq nom diagnostikani aniq qiladi.

Headless Service’da DNS pod endpointlarini qaytaradi. StatefulSet stable per-pod nom va client-side discovery uchun undan foydalanadi. Client DNS cache TTL va endpoint o‘zgarishini to‘g‘ri boshqarishi kerak.

Trafik va sessiya

Service load balancing odatda connection yoki flow darajasida ishlaydi. U har HTTP requestni alohida muvozanatlamasligi mumkin; uzoq yashovchi connection bitta podda qoladi. L7 routing, path va header bo‘yicha qaror uchun Ingress, Gateway yoki service mesh proxy kerak.

Session affinity client IP asosida bir mijozni bir endpointga bog‘lashi mumkin, ammo NAT ortidagi ko‘p mijozni bir podga yig‘ishi ehtimoli bor. Stateless session yoki tashqi session store ko‘pincha barqarorroq.

Port va protokol

port Service ko‘rsatadigan port, targetPort pod ichidagi port, nodePort esa node tashqi portidir. Named port rollout vaqtida container porti o‘zgarsa Service manifestini o‘zgartirmaslikka yordam beradi. TCP, UDP va platforma qo‘llasa SCTP alohida ko‘rsatiladi.

Service virtual IP oddiy interface’da ko‘rinmasligi mumkin; u packet processing qoidasi sifatida ishlaydi. Shu sabab diagnostikada faqat ip addr emas, EndpointSlice, proxy qoidalari va CNI datapath tekshiriladi.

Xavfsizlik

Service yaratish trafikni avtomatik autentifikatsiya qilmaydi. NetworkPolicy podlar orasidagi ruxsatni, TLS va application identity esa endpoint haqiqiyligini boshqaradi. LoadBalancer yoki NodePort tasodifan tashqi exposure yaratmasligi uchun admission policy va firewall ishlatiladi.

Source IP load balancer va traffic policy’ga qarab saqlanishi yoki NAT qilinishi mumkin. IPga asoslangan authorization proxy chain’da ishonchli identity o‘rnini bosa olmaydi.

Diagnostika

Tekshiruv DNS resolution, Service porti, EndpointSlice, pod readiness, NetworkPolicy va podning haqiqiy listen porti ketma-ketligida bajariladi. Service IP’ga ulanish ishlamasa, pod IP’ga vaqtinchalik test muammoni discovery/data plane bilan application orasida ajratadi.

Bog‘liq tushunchalar

Kubernetes, Pod, ClusterIP, EndpointSlice, Load balancer, Service discovery, Ingress