[Kubernetes / K8s]K8s的反向代理 -Service 與實作發布Services || Kubernetes Service

KouWei.Lee
k8s筆記
Published in
5 min readFeb 4, 2021

Service 将運行在一组 Pods 上的網路服務抽象出來

反向代理是伺服器的代理

透過配製反向代理(nginx) mapping到內部Server

反向代理兩大作用

1. 反向路由 →將外部請求反向路由到內部地址

將域名映射到內網的ip位置 Mapping 在 代理服務器(nginx)上面配置

2.負載均衡(Load Balance)→ 對後台機群進行負載均衡訪問

保證服務可用

K8s Service

Serivce 提供了

Service 是 K8s提供的反向代理機制
Service 的種類 NodePort , LoadBalancer ,ClusterIP

K8s 的路由配置是透過 Selector 與 Label機制實現

路由機制

app:nginx 因此會將流量導向Pod

Label為K8s打標籤機制 給Port打上標籤 (K V 配對) ex: app:petclinic
Selector為路由選擇機制
如果select上面的標籤跟後台port標籤可以匹配
執行就會打到該port → 將流量導向該Pod

實作發佈Service

Step1 準備 Service yml 與 pod yml

準備兩個yml檔案

參考K8s Service 的發佈樣式

K8s官方API 官方Type為LoadBalancer 是提供給公有雲服務AWS or GCP

petclinic-service文件

apiVersion: v1 kind: Service #表示要部署一個Service 反向代理metadata:name: petclinic spec:ports: - name: httpport: 8080 #指定反向代理要暴露的PorttargetPort: 8080 #對接後台Port轉發到後台的Port,不填跟Port一樣nodePort: 31080 #要在本地開啟31080portselector:app: petclinic #要匹配帶有petclinic標籤的podtype: NodePort #NodePort將服務暴露給外網

petclinic-pod文件

apiVersion: v1kind: Podmetadata:name: petcliniclabels:app: petclinic #注意Label 要與Service匹配spec:containers:- name: petclinicimage: spring2go/spring-petclinic:1.0.0.RELEASE

執行命令

創建Service 跟 Pod

kubectl apply -f .

查看Service 與 Pod

kubectl get all
可以看到暴露的端口31080 右圖為對照發佈規範

type 為 NodePort

K8s 分配了一個集群內部的虛擬ip 10.99.56.23

8080為集群內佈的端口

31080則是對外暴露端口 →因此使用31080進行連線

查看更詳細的Service內容

指令

kubectl svc petclinic
可以看到Selector app=petclinic

訪問網頁31080

Service成功

Sum up

Service 是 K8s 提供的反向代理機制

NodePort是Service的一種類型,可以將Service 暴露給外網

Label為打標籤 →定位資源

Selector可以做出路由選擇定位

--

--