[Kubernetes / K8s]K8s的反向代理 -Service 與實作發布Services || Kubernetes Service
Service 将運行在一组 Pods 上的網路服務抽象出來
反向代理是伺服器的代理
反向代理兩大作用
1. 反向路由 →將外部請求反向路由到內部地址
將域名映射到內網的ip位置 Mapping 在 代理服務器(nginx)上面配置
2.負載均衡(Load Balance)→ 對後台機群進行負載均衡訪問
保證服務可用
K8s Service
Serivce 提供了
Service 是 K8s提供的反向代理機制
Service 的種類 NodePort , LoadBalancer ,ClusterIP
K8s 的路由配置是透過 Selector 與 Label機制實現
路由機制
Label為K8s打標籤機制 給Port打上標籤 (K V 配對) ex: app:petclinic
Selector為路由選擇機制
如果select上面的標籤跟後台port標籤可以匹配
執行就會打到該port → 將流量導向該Pod
實作發佈Service
Step1 準備 Service yml 與 pod yml
參考K8s Service 的發佈樣式
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
type 為 NodePort
K8s 分配了一個集群內部的虛擬ip 10.99.56.23
8080為集群內佈的端口
31080則是對外暴露端口 →因此使用31080進行連線
查看更詳細的Service內容
指令
kubectl svc petclinic
訪問網頁31080
Sum up
Service 是 K8s 提供的反向代理機制
NodePort是Service的一種類型,可以將Service 暴露給外網
Label為打標籤 →定位資源
Selector可以做出路由選擇定位