Kubernetes 中的 Service

一、簡介

Kubernetes 中的 Service 是一個重要的概念,它將一組 Pod 封裝成一個邏輯單元,並提供網路訪問,對外暴露一個統一的 IP 和埠號。這樣,無論後端 Pod 如何變化,用戶都可以使用相同的地址訪問服務。

Service 是基於 Labels 進行匹配的,使用 Selector 進行 Pod 的篩選,從而建立了後端 Pod 到 Service 的映射關係,並提供負載均衡和服務發現功能。同時,Service 還支持多種負載均衡演算法和多種協議,如 TCP、UDP、HTTP、HTTPS。

二、基本使用

在 Kubernetes 中創建 Service 有多種方式,其中最簡單的方式是使用 kubectl expose 命令,如下所示:

kubectl expose deployment nginx --port=80 --type=LoadBalancer

這樣就創建了一個 Service,它會自動將所有具有 label app=nginx 的 Pod 進行負載均衡,並向外部暴露埠號 80。

另一種常見的方法是使用 YAML 文件進行定義,如下所示:

apiVersion: v1
kind: Service
metadata:
  name: nginx
spec:
  selector:
    app: nginx
  ports:
  - name: http
    port: 80
    targetPort: 80

這裡的 selector 指定了將哪些 Pod 加入到 Service 中,ports 用於指定埠號和協議。

三、負載均衡和服務發現

Service 提供了內置的負載均衡功能,可以將請求分發到後端 Pod 上,從而實現高可用性。同時,Service 還支持不同的負載均衡演算法,例如 round-robin、least connections、IP hash、random 等等。

服務發現是指通過 DNS 或其他方式,自動獲取服務的 IP 和埠,從而使客戶端無需知道後端 Pod 的具體 IP 和埠。這樣,當 Pod 發生變化時,Service 可以自動更新 DNS 記錄,從而實現無縫的服務遷移。

四、Session Affinity

在默認情況下,Service 使用 round-robin 的負載均衡演算法,將每個請求按順序分配到不同的後端 Pod 上。但是,在某些場景下,需要確保同一個用戶的請求都被分配到同一個後端 Pod 上,從而實現 session 的持久化。這時可以使用 Session Affinity。

Session Affinity 可以指定一個 key,例如用戶的 ID,將同一個 key 的請求都路由到同一個後端 Pod 上。可以選擇兩種模式,一種是 ClientIP,根據客戶端 IP 進行負載均衡,一種是 None,禁用 Session Affinity。

使用 YAML 文件可以指定 Session Affinity,如下所示:

apiVersion: v1
kind: Service
metadata:
  name: nginx
spec:
  selector:
    app: nginx
  ports:
  - name: http
    port: 80
    targetPort: 80
  sessionAffinity: ClientIP

五、網路策略

Kubernetes 中的網路策略允許對 Service 的訪問進行精細控制,可以限制來自特定 Pod 的流量、限制訪問特定的埠、禁止訪問特定 IP 地址等等。

具體實現上,需要定義一個 NetworkPolicy 對象,其中包含了需要限制的 Pod 的選擇器和限制規則。例如,下面的 YAML 文件表示禁止來自 label app=nginx 的 Pod 訪問本 Service 的 8080 埠:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: nginx-policy
spec:
  podSelector:
    matchLabels:
      app: nginx
  policyTypes:
  - Ingress
  ingress:
  - from:
    - podSelector: {}
    ports:
    - port: 8080

六、安全性

在 Kubernetes 中,Service 可以通過 TLS 加密來保證網路傳輸的安全性。可以通過設置 Secret 對象來管理證書和私鑰,然後在 Service 中指定使用 TLS 加密。

使用 YAML 文件可以指定 TLS 加密,如下所示:

apiVersion: v1
kind: Service
metadata:
  name: nginx
spec:
  selector:
    app: nginx
  ports:
  - name: http
    port: 80
    targetPort: 80
  - name: https
    port: 443
    targetPort: 443
  tls:
  - secretName: tls-secret

這裡的 tls 指定了使用哪個 Secret 對象來進行 TLS 加密。

七、總結

Kubernetes 中的 Service 是一個重要的概念,它提供了負載均衡、服務發現、Session Affinity、網路策略和安全性等多種功能。在實際應用中,需要根據具體情況選擇不同的負載均衡演算法和 Session Affinity 模式,同時也需要注意安全性和網路策略的設置。

原創文章,作者:QSJWI,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/372381.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
QSJWI的頭像QSJWI
上一篇 2025-04-24 06:40
下一篇 2025-04-24 06:40

相關推薦

  • Kubernetes安裝Drone教程

    本文將通過多個方面詳細介紹如何在Kubernetes中安裝Drone,讓您快速上手使用。 一、前置條件 1、已經安裝了Kubernetes環境 2、擁有一個Github賬戶 3、已…

    編程 2025-04-27
  • CentOS安裝Kubernetes教程

    一、安裝必備組件 在開始安裝Kubernetes之前,需要安裝一些必備組件: sudo yum install -y yum-utils device-mapper-persist…

    編程 2025-04-25
  • 深入了解systemd service

    一、什麼是systemd service systemd是一個Linux系統初始化的系統和服務管理器,它為系統的引導和服務管理提供了新的解決方案。systemd service是s…

    編程 2025-04-24
  • 使用Kubernetes(K8s)搭建分散式系統

    一、Kubernetes概述 Kubernetes是一個用於自動部署、擴展和管理容器化應用程序的開源平台。其提供了高可用性、自我修復能力和易於擴展的特徵,使得大規模、高度可用的分布…

    編程 2025-04-24
  • Docker.service文件詳解

    一、docker.service文件介紹 Docker是一種流行的開源容器化技術,可以在多個操作系統上運行,包括Linux、Windows和MacOS。Docker提供一個平台來構…

    編程 2025-04-23
  • k8scpu: Kubernetes資源調度中的CPU管理

    在Kubernetes中,我們可以使用k8scpu來管理CPU資源。這個工具可以幫助我們確保每個容器都有足夠的CPU資源來運行應用程序,同時避免浪費資源。本文將從多個方面對k8sc…

    編程 2025-04-23
  • Kubernetes和Kafka在微服務架構中的應用

    一、Kubernetes和Kafka的基本介紹 Kubernetes是Google開源的容器集群管理系統,用於自動化部署、擴展和管理容器化應用程序。它簡化了容器的部署和管理,使得應…

    編程 2025-04-23
  • 如何安裝Kubernetes(K8s)

    一、安裝前的準備工作 在進行K8s的安裝前,請確保您已完成以下步驟: 1、準備至少2台伺服器,一台作為master,一個或多個作為node; 2、確保所有伺服器上已經安裝了Dock…

    編程 2025-04-23
  • Kubernetes

    一、什麼是Kubernetes Kubernetes是一個開源的、可移植的、擴展的容器編排引擎,用於管理容器化應用程序和服務的部署、擴展和運行。 Kubernetes被設計成可擴展…

    編程 2025-04-23
  • Vue-cli-service build –mode詳解

    一、模式概述 Vue-cli-service是一個基於webpack的項目腳手架,用於快速搭建Vue項目。在Vue-cli-service的build命令中,我們可以通過指定mod…

    編程 2025-04-22

發表回復

登錄後才能評論