成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

關于 K8s Service,你真的理解了嗎?詳細版了解一下

運維 云計算
在生產環境中,Service 不僅可以幫助實現服務間的可靠通信,還能為外部用戶提供負載均衡和高可用的訪問入口。?

一、相關概念

1. 什么是Service?

在 Kubernetes 中,Service 是一種抽象的資源,它提供了穩定的訪問接口,將外部或集群內部的流量路由到對應的 Pod 上。 Pod 是 Kubernetes 中的基本調度單元,但它們是臨時的,IP 地址和生命周期都可能發生變化。Service 為 Pod 提供一個穩定的訪問方式,解決了 Pod 的動態 IP 問題。

Kubernetes 的 Service 有幾種不同的類型,能夠幫助我們根據不同的需求將服務暴露給外部用戶或者集群內部的其他服務。

2. Service的核心概念

(1) Pod 和 Service

在 Kubernetes 中,Pod 是部署應用的基本單位。每個 Pod 都會有一個 IP 地址,但這個 IP 地址只在 Pod 生命周期內有效。當 Pod 被銷毀、重建或調度到其他節點時,Pod 的 IP 地址會發生變化。這使得直接依賴 Pod IP 地址來訪問服務變得不可行。

Service 解決了這個問題,它為一組 Pod 提供一個穩定的訪問入口,不會隨著 Pod 的變化而變化。Service 將流量路由到匹配標簽的 Pod 上,并為客戶端提供一個固定的 IP 地址和 DNS 名稱來訪問這些 Pod。

(2) Service 和 Endpoints

Endpoints 是與 Service 關聯的資源,它記錄了與該 Service 匹配的 Pod 的 IP 地址。當 Service 創建時,Kubernetes 會根據標簽選擇器(selector)找到符合條件的 Pod,并自動生成 Endpoints,確保流量能夠正確地路由到這些 Pod。

容易混淆的幾個端口的關系:

3. Service 類型

Kubernetes 提供了幾種不同的 Service 類型,適應不同的網絡通信需求。每種類型都有自己的特性和應用場景。

(1) ClusterIP(默認類型)

功能:ClusterIP 類型的 Service 只能在集群內部訪問,外部無法直接訪問該服務。它為服務分配一個虛擬 IP 地址(ClusterIP),客戶端通過該 IP 與服務進行通信。

用途:適用于集群內部的微服務通信,常見于服務間通信。

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  selector:
    app: my-app  # 選擇標簽為 app=my-app 的 Pod
  ports:
    - protocol: TCP
      port: 80        # 服務對外暴露的端口
      targetPort: 8080  # 實際服務運行的 Pod 端口
  clusterIP: 10.96.0.1  # Kubernetes 自動分配 ClusterIP

這個 Service 會將請求轉發到符合條件的 Pod 上(標簽為 app=my-app)。 訪問該服務時,Kubernetes 會自動通過虛擬 IP 地址 10.96.0.1 來路由流量。

(2) NodePort

功能:NodePort 類型的 Service 將服務暴露到每個 Node 上的指定端口,外部客戶端可以通過訪問任意 Node 的 IP 地址和指定端口來訪問該服務。

用途:適用于開發和測試場景,或者希望通過某個特定端口暴露服務的場景。

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  selector:
    app: my-app
  ports:
    - protocol: TCP
      port: 80         # 外部客戶端訪問的端口
      targetPort: 8080  # Pod 上的目標端口
      nodePort: 30001    # 每個 Node 暴露的端口
  type: NodePort

在這個例子中,nodePort 為 30001,可以通過集群中任意一個節點的 NodeIP:30001 訪問服務。

(3) LoadBalancer

功能:LoadBalancer 類型的 Service 會在云環境中創建一個外部負載均衡器,將外部流量自動分發到集群中的多個 Pod 上。

用途:適用于需要對外暴露服務,并且需要自動負載均衡的生產環境。

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  selector:
    app: my-app
  ports:
    - protocol: TCP
      port: 80         # 外部訪問的端口
      targetPort: 8080  # Pod 上的目標端口
  type: LoadBalancer

創建該 Service 后,Kubernetes 會自動請求云平臺(如 AWS、阿里云,華為云)創建一個負載均衡器,將流量轉發到集群中的 Pod 上。

(4) ExternalName

功能:ExternalName 類型的 Service 將流量路由到外部的 DNS 名稱,而不是內部的 Pod。

用途:適用于需要訪問集群外部服務(如外部數據庫或第三方 API)的場景。

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  type: ExternalName
  externalName: example.com  # 外部服務的 DNS 名稱

在這種配置下,my-service 將請求轉發到 example.com,而不是集群內部的 Pod。

二、Service 工作原理

1. Pod 的 IP 和生命周期管理

每個 Pod 都有一個自己的 IP 地址,當 Pod 被刪除或重新調度時,IP 地址會發生變化。Kubernetes 會監控這些變化,并確保流量能夠正確地轉發到新的 Pod 上。

2. 標簽選擇器

Service 通過標簽選擇器來匹配需要暴露的 Pod。當 Service 創建時,Kubernetes 會根據該標簽選擇器找到所有匹配的 Pod,并通過 Endpoints 記錄它們的 IP 地址。

3. DNS 解析

Kubernetes 會為每個 Service 分配一個 DNS 名稱,Pod 可以通過 DNS 名稱訪問 Service,而不需要關心具體的 IP 地址。這使得服務發現變得非常容易。

三、Service常用操作

1. 創建service

# 命令行創建,通過暴露deployment創建Service
kubectl expose deployment <deployment-name> --type=<service-type> --port=<port> --target-port=<target-port>

kubectl expose deploy nginx  --port=80 --target-port=80  --type=NodePort

# 基于yaml文件創建
# 創建Service資源清單
apiVersion: v1
kind: Service
metadata:
  name: nginx
spec:
  selector:
    app: nginx
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8080
      nodePort: 30080  # 指定節點上的端口
type: type: NodePort

# 創建
kubectl apply -f service.yaml

2. 查看service

# 查看所有service信息
kubectl get svc
kubectl get svc -o wide -n prod

# 查看指定service的詳細信息
kubectl get svc nginx -o yaml -n prod
kubectl describe svc nginx -n prod

# 查看Service的endpoint信息
kubectl get endpoints <service-name>
kubectl get ep nginx

3. 編輯更新Service

注意:修改后,service會立即重啟

kubectl edit service <service-name> 
  
kubectl edit svc nginx -n prod

# 更新端口
kubectl patch service my-service -p '{"spec":{"ports":[{"port":80,"targetPort":8081}]}}'

4. 刪除Service

# 命令行刪除
kubectl delete svc <service-name>

kubectl delete svc nginx

# 基于yaml文件刪除
kubectl delete -f service.yaml

Service為 Pod 提供了穩定的訪問入口,解決了 Pod 生命周期變化帶來的網絡問題。通過不同類型的 Service(如 ClusterIP、NodePort、LoadBalancer 和 ExternalName),Kubernetes 可以滿足各種網絡通信需求。

在生產環境中,Service 不僅可以幫助實現服務間的可靠通信,還能為外部用戶提供負載均衡和高可用的訪問入口。

責任編輯:趙寧寧 來源: 運維李哥不背鍋
相關推薦

2023-12-14 12:55:41

Pythondel語句

2021-10-28 14:30:19

K8S Kubernetes數據持久化

2025-01-03 09:07:51

2024-03-15 08:23:26

異步編程函數

2023-05-09 08:25:26

Gaussdb數據庫開源數據庫

2023-11-06 17:37:17

技術架構任務隊列

2018-03-21 16:19:40

MVCMVPMVVM

2022-11-02 10:21:41

K8s pod運維

2019-12-26 09:15:44

網絡IOLinux

2023-06-26 07:32:43

Kubernetes容器

2025-02-17 08:18:27

C#TypeScriptJavaScript

2023-11-27 00:48:46

displayvisibility

2023-05-09 09:00:20

版本Canary框架

2023-09-27 16:29:55

開發團隊信息

2024-01-03 08:08:51

Pulsar版本數據

2024-03-20 08:31:40

KotlinExtension計算

2024-02-19 08:40:22

2023-08-03 08:36:30

Service服務架構

2024-09-11 08:02:27

k8sgitlab升級

2020-06-29 08:32:21

高并發程序員流量
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产日韩欧美一区二区 | 欧美极品视频在线观看 | 夏同学福利网 | 亚洲小视频 | 天天久久 | 日本免费一区二区三区 | 亚洲二区在线观看 | av免费在线播放 | 亚洲理论在线观看电影 | 久久99精品久久久久久国产越南 | 成人一区二区三区在线观看 | 日韩一区二区福利 | 99色综合 | 99国产精品99久久久久久 | 亚洲国产精品一区二区第一页 | 国产精品综合色区在线观看 | 国产成人精品一区二区三区在线观看 | 日日日色 | 天天综合91 | 国产精品久久久久久久久免费软件 | 亚洲成人av| av网站在线免费观看 | 欧美亚洲一区二区三区 | 狠狠骚 | 精品视频在线免费观看 | 午夜在线 | 亚洲一区在线观看视频 | 日韩精品久久久 | 一区二区三区四区在线免费观看 | 日韩中文一区二区三区 | 亚洲欧美中文日韩在线 | 夜色www国产精品资源站 | 国产视频中文字幕 | 久久久精品一区二区三区 | 国户精品久久久久久久久久久不卡 | 国产高清一区二区三区 | 在线午夜电影 | 黄a大片| 国产一区二区三区视频免费观看 | 中文字幕视频一区 | 欧美一区视频 |