k8s集群IP詳解

一、什麼是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

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-11-11 13:44
下一篇 2024-11-11 13:44

相關推薦

  • Centos7配置靜態ip

    本文將詳細闡述如何在Centos7系統中配置靜態ip。 一、查看網絡接口 在配置靜態ip之前,我們首先需要查看系統中的網絡接口,以確定我們需要配置的網卡是哪一個。 ifconfig…

    編程 2025-04-29
  • Python檢測IP連通

    Python是一門強大的編程語言,常用於網絡開發、數據分析等領域。IP地址是網絡通信的基礎,在網絡通信中,有時需要檢測IP地址是否連通。下面將從多個方面介紹Python檢測IP連通…

    編程 2025-04-28
  • 使用Go-Redis獲取Redis集群內存使用率

    本文旨在介紹如何使用Go-Redis獲取Redis集群的內存使用率。 一、Go-Redis簡介 Go-Redis是一個用於連接Redis服務器的Golang客戶端。它支持Redis…

    編程 2025-04-28
  • Treck TCP/IP Stack 輸入驗證錯誤漏洞CVE-2020-11901解析

    本文將對Treck TCP/IP Stack 輸入驗證錯誤漏洞CVE-2020-11901進行詳細解析,並提供相關代碼示例。 一、漏洞背景 Treck TCP/IP Stack是一…

    編程 2025-04-27
  • 如何解決Docker+k8s報錯413 Request Entity Too Large

    對於使用Docker容器和Kubernetes集群的開發人員,在處理HTTP請求時,常常會遇到413 Request Entity Too Large的報錯。這通常是由於請求的大小…

    編程 2025-04-27
  • Redis5.0集群擴容用法介紹

    Redis是一個內存數據庫,越來越受到開發者的歡迎。在開發中,我們經常需要考慮Redis集群的擴容問題。而Redis5.0針對集群擴容方面進行了多項優化和改進,本文將從多個方面詳細…

    編程 2025-04-27
  • k8s節點設置cpu高於多少就不調度

    本文將從以下幾個方面詳細闡述k8s節點設置cpu高於多少就不調度的相關內容: 一、k8s節點設置的概念和原理 k8s是Google開源的容器集群管理系統,用於自動化部署、擴展和管理…

    編程 2025-04-27
  • 神經網絡代碼詳解

    神經網絡作為一種人工智能技術,被廣泛應用於語音識別、圖像識別、自然語言處理等領域。而神經網絡的模型編寫,離不開代碼。本文將從多個方面詳細闡述神經網絡模型編寫的代碼技術。 一、神經網…

    編程 2025-04-25
  • Linux sync詳解

    一、sync概述 sync是Linux中一個非常重要的命令,它可以將文件系統緩存中的內容,強制寫入磁盤中。在執行sync之前,所有的文件系統更新將不會立即寫入磁盤,而是先緩存在內存…

    編程 2025-04-25
  • git config user.name的詳解

    一、為什麼要使用git config user.name? git是一個非常流行的分布式版本控制系統,很多程序員都會用到它。在使用git commit提交代碼時,需要記錄commi…

    編程 2025-04-25

發表回復

登錄後才能評論