一、什麼是k8sclusterip
k8s ClusterIP是一種可通過服務對象訪問的虛擬IP地址,用於將入口流量轉發到k8s集群中運行的服務。它是k8s中最常見的服務類型之一,能夠橋接服務和pod之間的通信,也可作為入口流量的負載均衡器。
k8s ClusterIP是在“服務”的級別上分配的,它獨立於內部pod IP和外部集群IP。 ClusterIP可通過輕鬆修改服務,同時保持穩定的DNS名稱,從而簡化許多外部依賴項,例如應用程序的變更通知和日誌記錄。
ClusterIP默認情況下有端口號,可以使用kubectl expose xxx的方式暴露端口或者手動修改yml進行配置
二、ClusterIP的優勢
1、簡化集群內部的服務發現,ClusterIP可通過外部流量負載均衡器調用,在保留內部IP地址的同時將集群IP與服務名稱重命名。這樣可以輕鬆對服務名稱進行管理,而無需擔心重命名時會影響基礎設施。
2、k8s集群IP可以實現負載均衡,它將請求路由轉發給為Web重複部署的所有副本。這極大地增加了Web服務的可用性,因為即使其中一些副本崩潰,請求也仍然可以向其他副本轉發。
3、通過將提供的正確標籤添加到Deployment或Pod模板中,k8s ClusterIP可以實現對服務的動態標記或發現。這意味着,在需要調整標記或其他信息時,可以在無中斷的情況下修改pod的元數據標籤,從而可以輕鬆地更改關聯的集群IP。
三、ClusterIP的使用場景
k8s ClusterIP地址通常用於具有後端應用程序的服務,例如負責從後端數據存儲中檢索數據的Web應用程序。對於此類基於k8s容器的應用程序,我們可以使用k8s ClusterIP向外部提供請求路由,從而提供對後端應用程序的密切控制。
以下是一個使用ClusterIP的例子:
apiVersion: v1
kind: Service
metadata:
name: myservice
spec:
selector:
app: app1
ports:
- protocol: TCP
port: 8080
targetPort: 80
四、ClusterIP的實現原理
在k8s中,每個service都會分配一個ClusterIP,這個ClusterIP只會在集群範圍內被綁定的服務所識別。
當一個服務如上述所示被創建時,k8s控制平面會將其被暴露出來的部分狀態存儲到etcd數據庫中,這個服務的IP地址是由k8s控制平面分配的,並且該IP地址是虛擬的。
由於該虛擬IP是由k8s分配的,所以不會與其他pod或節點衝突。在每個節點上,kube-proxy組件都會監聽這些虛擬IP,並將它們綁定到節點的網絡堆棧中,以便在服務中進行流量路由。
五、ClusterIP的實例
下面我們來看一個實例,如何使用K8s ClusterIP來部署一個後端Web應用。
1、配置後端應用的deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: backend-webapp
spec:
replicas: 3
selector:
matchLabels:
app: backend-webapp
template:
metadata:
labels:
app: backend-webapp
spec:
containers:
- name: webapp-container
image: myregistry/webapp:v1
ports:
- containerPort: 3000
2、定義服務對象,並使用ClusterIP暴露後端應用程序
apiVersion: v1
kind: Service
metadata:
name: backend
spec:
selector:
app: backend-webapp
ports:
- name: http
protocol: TCP
port: 80
targetPort: 3000
在上述部署中,我們使用ClusterIP為後端應用程序創建了一個虛擬IP地址並將其映射到k8s集群中的每個實例。然後,我們創建了一個Service對象,用於將客戶端的http請求路由到各個實例。
六、小結
本文詳細闡述了k8s ClusterIP的作用、優勢以及實現原理。通過對clusterIP相關知識的講解,我們更好地理解了在k8s集群中,應用程序和服務之間的關聯關係。同時,通過實例的講解,大家更好地掌握了ClusterIP的使用。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/151736.html