CentOS上的K8s服務發現機制主要通過以下方式實現:
- DNS服務發現:
- 基于CoreDNS(默認DNS服務器),為Service和Pod分配域名,如
service-name.namespace.svc.cluster.local
,支持動態解析服務IP。
- 支持SRV記錄解析端口,如
_http._tcp.service-name.namespace.svc.cluster.local
。
- 環境變量:
- Pod啟動時,Kubernetes注入集群內所有Service的IP和端口,格式為
{SERVICE_NAME}_SERVICE_HOST
和{SERVICE_NAME}_SERVICE_PORT
,但僅在Pod創建時更新,不推薦用于動態場景。
- Service與Endpoint資源:
- Service通過Label Selector關聯Pod,定義虛擬IP(ClusterIP)和端口,流量由kube-proxy轉發至后端Pod。
- Endpoint記錄Service對應Pod的IP和端口,實時更新以應對Pod變化。
- kube-proxy組件:
- 監聽Service和Endpoint變化,通過iptables/IPVS規則實現流量轉發,屏蔽后端Pod IP變化,提供負載均衡。
- Ingress資源(外部訪問):
- 管理外部HTTP/HTTPS訪問,配合Ingress Controller實現路由、負載均衡和SSL終止。
- Service Mesh(高級場景):
- 如Istio、Linkerd,提供更細粒度的流量管理、故障恢復和可觀測性,適用于復雜微服務架構。
核心邏輯:通過DNS解析、Service抽象和kube-proxy的流量轉發,實現服務在集群內的動態發現與可靠通信,無需依賴Pod的固定IP。