SVC模型原理主要涉及到Kubernetes(k8s)中的Service(svc)的工作機制。在Kubernetes中,Service是一種通過標籤選擇器(Label selector)匹配一組Pod,對外提供訪問服務機制。每個Service可以理解為一個微服務,它對一組Pod進行輪詢訪問。
工作原理如下:
當Kubernetes創建Service時,會根據標籤選擇器來查找Pod,並據此創建與Service同名的endpoint對象。Endpoint對象存儲在etcd中,記錄了Service對應的所有Pod的訪問地址。
只有當Service配置了選擇器,Endpoint controller才會自動創建對應的Endpoint對象。否則,不會生成Endpoint對象。
當Service接收到前端Client請求時,它會通過Endpoint找到要轉發到哪個Pod進行訪問。至於要轉發到哪個節點的Pod,由負載均衡kube-proxy在起初就決定好了。
ClusterIP主要在每個node節點使用iptables,將發向ClusterIP:port的數據轉發到kube-proxy中。然後kube-proxy內部實現有負載均衡的方法,並查詢到這個Service下的Endpoints,找到對應的Pod的地址和對應連線埠,進而把數據轉發給對應的Pod的地址和連線埠。
訪問Service的請求,不論是Cluster IP + TargetPort的方式;還是用Node節點的IP+NodePort的方式,都被Node節點的Iptables規則重定向到Kube-proxy監聽Service服務代理連線埠。Kube-proxy接收到Service的訪問請求後,根據負載策略,轉發到後端的Pod。
在很多情況下,Service只是一個概念,而真正將Service的作用實現的是kube-proxy服務進程。
以上就是SVC模型在Kubernetes中的原理。