在 Kubernetes 中英支,服務(wù)是一種抽象,用于定義一組 Pod 的訪問方式,提供了穩(wěn)定的網(wǎng)絡(luò)終結(jié)點蔽介。服務(wù)為應(yīng)用程序的組件提供了一個統(tǒng)一的入口,使得這些組件之間可以相互發(fā)現(xiàn)和通信煮寡,而無需了解底層的網(wǎng)絡(luò)細節(jié)虹蓄。
主要組成部分:
-
Pod:
- Pod 是服務(wù)的實際運行單元。Service 將流量負載均衡到 Pod幸撕,使得在應(yīng)用程序升級或擴展時薇组,Pod 的 IP 地址和端口可能發(fā)生變化時,服務(wù)仍然可以提供穩(wěn)定的訪問方式坐儿。
-
Service:
- Service 定義了一組 Pod律胀,并提供一個固定的虛擬 IP 地址和端口,作為對這組 Pod 的入口挑童。Service 可以通過多種方式暴露累铅,如 ClusterIP、NodePort站叼、LoadBalancer 等娃兽。
-
Selector:
- Selector 是一個用于標(biāo)識將包括在服務(wù)中的 Pod 的標(biāo)簽選擇器。Service 使用標(biāo)簽選擇器來匹配關(guān)聯(lián)的 Pod尽楔。
-
Endpoint:
- Endpoint 是 Service 后面實際運行的 Pod 的 IP 地址和端口投储。Endpoints Controller 負責(zé)動態(tài)更新 Service 的 Endpoint。
Service 類型:
-
ClusterIP:
- 默認類型阔馋。在集群內(nèi)部創(chuàng)建一個虛擬 IP玛荞,僅在集群內(nèi)部可訪問。
-
NodePort:
- 在每個節(jié)點上綁定一個靜態(tài)端口呕寝,允許從集群外訪問 Service勋眯。
-
LoadBalancer:
- 在云服務(wù)提供商中創(chuàng)建一個外部負載均衡器,自動分配外部 IP,并將流量導(dǎo)向 Service客蹋。
-
ExternalName:
- 提供了一個服務(wù)的 CNAME 記錄塞蹭,通過這個 CNAME 記錄可以訪問外部服務(wù),而不是通過 ClusterIP讶坯。
創(chuàng)建 Service 的示例:
以下是一個創(chuàng)建 ClusterIP 類型的 Service 的示例 YAML 文件:
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
selector:
app: my-app
ports:
- protocol: TCP
port: 80
targetPort: 8080
type: ClusterIP
在這個示例中:
-
selector
指定了 Service 匹配的 Pod 的標(biāo)簽選擇器番电。 -
ports
定義了 Service 暴露的端口以及要路由到的目標(biāo)端口。
創(chuàng)建這個 Service 后辆琅,其他 Pod 可以通過 my-service
訪問匹配標(biāo)簽選擇器的 Pod漱办,而不用關(guān)心 Pod 的具體 IP 地址和端口。這種抽象使得服務(wù)的維護更加靈活婉烟,不受底層 Pod 變化的影響娩井。