k8s之service解釋以及定義
服務(Service)
RC、RS 和 Deployment 只是保證了支撐服務的微服務 Pod 的數量。但是沒有解決如何訪問這些服務的問題。
一個 Pod 只是一個運行服務的實例,隨時可能在節點上停止,然后再新的節點上用一個新的 IP 啟動一個新的 Pod,因此不能使用確定的 IP 和端口號提供服務。這對于業務來說,就不能根據 Pod 的 IP 作為業務調度。kubernetes 就引入了 Service 的概 念,它為 Pod 提供一個入口,主要通過 Labels 標簽來選擇后端Pod,這時候不論后端 Pod 的 IP 地址如何變更,只要 Pod 的 Labels 標簽沒變,那么 業務通過 service 調度就不會存在問題。
同時 service 對綁定的 Pod 提供了負載均衡的功能,我們業務直接使用 service 即可。
當聲明Service的時候,會自動生成一個cluster IP,這個IP是虛擬IP。我們就可以通過這個IP來訪問后端的Pod,當然,如果集群配置了DNS服務,比如現在 的CoreDNS,那么也可以通過Service的名字來訪問,它會通過DNS自動解析Service的IP地址。
Service 對外暴露服務的方式
1、ClusterIP (默認) :在集群的內部 IP 上公開 Service 。這種類型使得 Service 只能從集群內訪問,一般這種類型的 Service 上層會掛一個 Ingress,通過 Ingress 暴露服務;
2、NodePort:在每個選定 Node 的相同端口上公開 Service,使用 <NodeIP>:<NodePort> 即可從集群外部訪問 Service;
3、LoadBalancer:使用云廠商的 K8S 集群,即可使用這種方式的暴露 Service,自建的服務一般不支持。使用 LoadBalancer ,會生成一個 IP 地址,通過這個即可訪問 Service, 通知這個 IP 也是高可用的;
4、ExternalName: 通過返回帶有該名稱的 CNAME 記錄,使用任意名稱(由 spec 中的externalName指定)公開 Service。不使用代理。這種類型需要kube-dns的v1.7或更高版本。
什么是 CNAME:這種記錄允許您將多個名字映射到同一臺計算機。
例如:當您擁有多個域名需要指向同一服務器IP,此時您就可以將一個域名做A記錄指向服務器IP,然后將其他的域名做別名(即CNAME)到A記錄的域名上;那么當您的服務器IP地址變更時,您就可以不必對一個一個域名做更改指向了,只需要更改A記錄的那個域名到服務器新IP上,其他做別名(即CNAME)的那些域名的指向將自動更改到新的IP地址上(以上操作均需要在DNS處執行)。

浙公網安備 33010602011771號