kubernetes實踐之四十三: Service詳解
一:簡介
透過Service,可以為一組具有相同功能的容器應用提供一個統一的入口地址,並將請求負載分發到後端各個應用容器上,實現Pod的負載均衡。
二:Service定義模版重要屬性說明
1.spec.type Service的型別,指定Service的訪問方式,預設值為ClusterIP.
a.ClusterIP: 虛擬的服務IP地址,該地址用於Kubernetes叢集內部的Pod訪問,在Node 上kube-proxy透過設定的Iptables規則進行轉發。
b.NodePort: 使用宿主機的埠,使能夠訪問各Node的客戶端透過Node的IP地址和埠號就能訪問服務。
c.LoadBalancer: 使用外接負載均衡器完成到服務的負載分發
2.spec.sessionAffinity: 是否支援Session,可選值為ClientIP,預設值為空,ClientIP表示將同一個客戶端的訪問請求都轉發到同一個後端Pod。
三:Service的基本用法
1.通常用法,服務作為Pod的負載均衡器。目前的負載分發策略有:
a. RoundRobin: 輪詢模式,即輪詢將請求轉發到後端各個Pod上。
b.SessionAffinity: 基於客戶端IP地址進行回話保持的模式。
2.多埠Service,有時候一個容器應用也可能提供多個埠的服務,那麼在Service定義中也可以相應地設定為將多個埠對應到多個應用服務。
3.外部服務Service
在某些環境中,應用系統需要將一個外部資料庫作為後端服務進行連線,或將另一個叢集或Namespace中的服務作為服務的後端,這時可以透過建立一個無Label Selector的Service來實現(此時需要建立一個和該Service同名的Endpoint)。
4.Headless Service, 在某些應用場景中,開放人員希望自己控制負載均衡的策略,不使用Service提供的預設負載均衡的功能,或者應用程式希望知道屬於同組的其他例項。 此種服務不為Service設定ClusterIP,僅透過Label Selector 找後端的Pod列表返回給呼叫的客戶端。
四:叢集外部訪問Pod或Service的方法
1.將容器應用的埠號對映到物理機
a. 透過設定容器級別的hostPort,將容器應用的埠對映到物理機上
b.透過設定Pod級別的hostNetwork=true,該Pod中所以容器的埠號都被直接對映到物理機上。
2.將Service的埠號對映到物理機
a.透過配置nodePort對映到物理機,同時設定Service的型別為NodePort
b.透過設定LoadBalancer對映到雲服務商提供的LoadBalancer地址。
透過Service,可以為一組具有相同功能的容器應用提供一個統一的入口地址,並將請求負載分發到後端各個應用容器上,實現Pod的負載均衡。
二:Service定義模版重要屬性說明
1.spec.type Service的型別,指定Service的訪問方式,預設值為ClusterIP.
a.ClusterIP: 虛擬的服務IP地址,該地址用於Kubernetes叢集內部的Pod訪問,在Node 上kube-proxy透過設定的Iptables規則進行轉發。
b.NodePort: 使用宿主機的埠,使能夠訪問各Node的客戶端透過Node的IP地址和埠號就能訪問服務。
c.LoadBalancer: 使用外接負載均衡器完成到服務的負載分發
2.spec.sessionAffinity: 是否支援Session,可選值為ClientIP,預設值為空,ClientIP表示將同一個客戶端的訪問請求都轉發到同一個後端Pod。
三:Service的基本用法
1.通常用法,服務作為Pod的負載均衡器。目前的負載分發策略有:
a. RoundRobin: 輪詢模式,即輪詢將請求轉發到後端各個Pod上。
b.SessionAffinity: 基於客戶端IP地址進行回話保持的模式。
2.多埠Service,有時候一個容器應用也可能提供多個埠的服務,那麼在Service定義中也可以相應地設定為將多個埠對應到多個應用服務。
點選(此處)摺疊或開啟
-
apiVersion: v1
-
kind: Service
-
metadata:
-
name: webapp
-
spec:
-
ports:
-
- port: 8080
-
targetPort: 8080
-
name: web
-
- port: 8005
-
targetPort: 8005
- name: management
在某些環境中,應用系統需要將一個外部資料庫作為後端服務進行連線,或將另一個叢集或Namespace中的服務作為服務的後端,這時可以透過建立一個無Label Selector的Service來實現(此時需要建立一個和該Service同名的Endpoint)。
點選(此處)摺疊或開啟
-
apiVersion: v1
-
kind: Service
-
metadata:
-
name: mysql-test
-
spec:
-
ports:
- - port: 3306
點選(此處)摺疊或開啟
-
apiVersion: v1
-
kind: Endpoints
-
metadata:
-
name: mysql-test
-
namespace: default
-
subsets:
-
- addresses:
-
- ip: 120.25.154.90
-
ports:
- - port: 3306
點選(此處)摺疊或開啟
-
apiVersion: v1
-
kind: Service
-
metadata:
-
name: nginx
-
labels:
-
app: nginx
-
spec:
-
ports:
-
- port: 80
-
clusterIP: None
-
selector:
- app: nginx
四:叢集外部訪問Pod或Service的方法
1.將容器應用的埠號對映到物理機
a. 透過設定容器級別的hostPort,將容器應用的埠對映到物理機上
點選(此處)摺疊或開啟
-
apiVersion: v1
-
kind: Pod
-
metadata:
-
name: webapp
-
labels:
-
app: webapp
-
spec:
-
containers:
-
- name: webapp
-
image: tomcat
-
ports:
-
- containerPort: 8080
- hostPort: 8081
點選(此處)摺疊或開啟
-
apiVersion: v1
-
kind: Pod
-
metadata:
-
name: webapp
-
labels:
-
app: webapp
-
spec:
-
hostNetwork: true
-
containers:
-
- name: webapp
-
image: tomcat
-
ports:
- - containerPort: 8080
a.透過配置nodePort對映到物理機,同時設定Service的型別為NodePort
點選(此處)摺疊或開啟
-
apiVersion: v1
-
kind: Service
-
metadata:
-
name: nginx
-
labels:
-
app: nginx
-
spec:
-
type: NodePort
-
ports:
-
- port: 80
-
targetPort: 8080
-
nodePort: 8081
-
selector:
- app: nginx
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28624388/viewspace-2154742/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- kubernetes實踐之十四:Service Account與Secret
- kubernetes實踐之六十五:Service Mesh
- kubernetes實踐之四十四:Ingress詳解
- kubernetes實踐之五十三:Service中的故障排查
- kubernetes實踐之四十八:Service Controller與Endpoint ControllerController
- kubernetes實踐之二十四:Service
- kubernetes實踐之七:安全機制API Server認證之Service Account TokenAPIServer
- Kubernetes Service之ClusterIP
- kubernetes實踐之七十四:Service Mesh Meetup深圳站學習總結
- k8s之Service詳解-Service使用K8S
- Kubernetes實驗 Service
- kubernetes實踐之十一:EFK
- kubernetes實踐之六十:Cabin-Manage Kubernetes
- 阿里雲Kubernetes容器服務Istio實踐之整合日誌服務Log Service阿里
- kubernetes實踐之五十七:PodPreset
- kubernetes實踐之五十八:CronJob
- kubernetes實踐之五十二:Helm
- kubernetes實踐之五十九:NetworkPolicy
- kubernetes實踐之十九:API概述API
- kubernetes實踐之十七:架構架構
- kubernetes實踐之八:TLS bootstrappingTLSbootAPP
- Service詳解
- kubernetes實踐之十:Kubernetes-dashboard+Heapster+InfluxDB+GrafanaUXGrafana
- GitOps實踐之kubernetes安裝argocdGitGo
- kubernetes實踐之四十二:StatefulSet
- kubernetes實踐之六十四:CoreDNSDNS
- kubernetes實踐之五十六:雲原生
- kubernetes實踐之五:網路模型模型
- kubernetes實踐之十二:部署Traefik Ingress
- kubernetes實踐之九:kube-dnsDNS
- kubernetes實踐之五十五:kubectl之配置kubeconfig
- Angular service 詳解Angular
- kubernetes生產實踐之redis-clusterRedis
- kubernetes實踐之四十七:ResourceQuota ControllerController
- kubernetes實踐之六十二:Secret 使用
- kubernetes實踐之六十三:使用技巧
- 【解構雲原生】初識Kubernetes Service
- 網路協議之:Domain name service DNS詳解協議AIDNS