AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

當前位置:首頁 > 科技  > 軟件

K8S | Service服務發現

來源: 責編: 時間:2023-08-05 11:44:46 4241觀看
導讀一、背景在微服務架構中,這里以開發環境「Dev」為基礎來描述,在K8S集群中通常會開放:路由網關、注冊中心、配置中心等相關服務,可以被集群外部訪問;圖片對于測試「Tes」環境或者生產「Pro」環境,出于安全或者環境隔離性來考

一、背景

在微服務架構中,這里以開發環境「Dev」為基礎來描述,在K8S集群中通常會開放:路由網關、注冊中心、配置中心等相關服務,可以被集群外部訪問;yEo28資訊網——每日最新資訊28at.com

圖片圖片yEo28資訊網——每日最新資訊28at.com

對于測試「Tes」環境或者生產「Pro」環境,出于安全或者環境隔離性來考慮,在正常情況下只會開放網關服務,而「注冊、配置」中心并不會對外暴露;yEo28資訊網——每日最新資訊28at.com

對于架構中的其它業務服務一般不會對外開放,在K8S集群內部服務間是可以正常通信的,對于「Dev」環境來說,研發會使用「注冊、配置」中心,網關是系統的訪問入口;yEo28資訊網——每日最新資訊28at.com

在K8S集群中,通過Service組件,可以快速簡單的實現服務發現和負載均衡;yEo28資訊網——每日最新資訊28at.com

二、Service組件

1、簡介

在K8S集群中是通過Pod組件來部署應用服務,Deployment組件實現Pod編排管理,Service組件實現應用的訪問;yEo28資訊網——每日最新資訊28at.com

圖片圖片yEo28資訊網——每日最新資訊28at.com

【Pod】自身的特點是臨時的,使用過后直接拋棄的實體,這樣在Pod創建和銷毀的狀態中,會導致IP地址發生變化,即無法使用固定的IP進行應用訪問;yEo28資訊網——每日最新資訊28at.com

【Deployment】控制器通過管理ReplicaSet間接實現Pod管理,比如發布方式,更新和回滾策略,維持Pod副本數量,對應用進行快速的編排,但是并沒有涉及應用的訪問;yEo28資訊網——每日最新資訊28at.com

【Service】是將運行在一個或一組Pod上的網絡應用程序公開為網絡服務的方法,可以在不修改現有應用程序的情況下,使用服務發現機制訪問到該應用;yEo28資訊網——每日最新資訊28at.com

基于Pod、Deployment、Service三個組件的協作,同一個應用的部署腳本可以在開發、測試、生產不同環境中復用;yEo28資訊網——每日最新資訊28at.com

2、基礎語法

這里提供一個簡單的【Service】語法做參考;yEo28資訊網——每日最新資訊28at.com

圖片圖片yEo28資訊網——每日最新資訊28at.com

需要注意的是:在該腳本中沒有指定服務類型即ServiceType,默認采用的是ClusterIP,通過集群的內部IP暴露服務,選擇該值時服務只能夠在集群內部訪問;yEo28資訊網——每日最新資訊28at.com

三、內部服務發現

1、Pod創建

基于【Deployment】組件,創建「auto-serve」應用;yEo28資訊網——每日最新資訊28at.com

apiVersion: apps/v1kind: Deploymentmetadata:  name: serve-deployment  labels:    app: auto-servespec:  replicas: 1  selector:    matchLabels:      app: auto-serve  template:    metadata:      labels:        app: auto-serve    spec:      containers:        - name: auto-serve          image: auto-serve:latest          imagePullPolicy: Never          ports:            - containerPort: 8082              name: auto-serve-port

執行創建命令yEo28資訊網——每日最新資訊28at.com

kubectl apply -f serve-deployment.yaml

2、Service創建

簡單的腳本文件:app-service.yaml;yEo28資訊網——每日最新資訊28at.com

apiVersion: v1kind: Servicemetadata:  name: app-servicespec:  selector:    app: auto-serve  ports:  - name: app-service-port    protocol: TCP    port: 8082    targetPort: auto-serve-port

創建【Service】yEo28資訊網——每日最新資訊28at.com

kubectl apply -f app-service.yaml

查看【Service】,可以使用命令行或者界面;yEo28資訊網——每日最新資訊28at.com

kubectl describe svc app-service

圖片圖片yEo28資訊網——每日最新資訊28at.com

刪除【Service】yEo28資訊網——每日最新資訊28at.com

kubectl delete -f app-service.yaml

3、內部訪問

在上面已經說明,當Type不指定時采用的是ClusterIP,只能在集群內部訪問,集群外部的網絡是無法訪問的;yEo28資訊網——每日最新資訊28at.com

在【auto-client】服務中提供一段訪問【auto-serve】接口的代碼,并制作鏡像【auto-client:3.3.3】,完成部署后查看日志打印;yEo28資訊網——每日最新資訊28at.com

@Componentpublic class HttpServiceJob {    private static final Logger LOG = LoggerFactory.getLogger(HttpServiceJob.class.getName()) ;    private static final String SERVER_NAME = "http://app-service:8082/serve";    private static final String SERVER_IP = "http://10.103.252.94:8082/serve";    /**     * 每30秒執行一次     */    @Scheduled(fixedDelay = 30000)    public void systemDate () {        SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();        factory.setReadTimeout(3000);        factory.setConnectTimeout(6000);        RestTemplate restTemplate = new RestTemplate(factory);        try {            Map<String, String> paramMap = new HashMap<>();            String result = restTemplate.getForObject(SERVER_NAME, String.class, paramMap);            LOG.info("service-name-resp::::" + result);        } catch (Exception e) {            e.printStackTrace();        }        try {            Map<String, String> paramMap = new HashMap<>();            String result = restTemplate.getForObject(SERVER_IP, String.class, paramMap);            LOG.info("service-ip-resp::::" + result);        } catch (Exception e) {            e.printStackTrace();        }    }}

在代碼中通過服務名:端口和IP:端口都可以正常訪問,在Pod中查看兩個應用的日志,請求和響應都正常;yEo28資訊網——每日最新資訊28at.com

圖片圖片yEo28資訊網——每日最新資訊28at.com

四、外部服務發現

1、NodePort類型

指定類型為NodePort的腳本:app-np-service.yaml;yEo28資訊網——每日最新資訊28at.com

apiVersion: v1kind: Servicemetadata:  name: app-np-servicespec:  type: NodePort  selector:    app: auto-serve  ports:    - protocol: TCP      port: 8082      targetPort: 8082      nodePort: 30010

創建【Service】yEo28資訊網——每日最新資訊28at.com

kubectl apply -f app-np-service.yaml

使用NodePort類型,K8S控制平面會在指定的范圍內分配端口,如果需要特定的端口號可以指定nodePort字段中的值,但是該類型需要自己設置負載均衡解決方案;yEo28資訊網——每日最新資訊28at.com

2、LoadBalancer類型

指定類型為LoadBalancer的腳本:app-lb-service.yaml;yEo28資訊網——每日最新資訊28at.com

apiVersion: v1kind: Servicemetadata:  name: app-lb-servicespec:  type: LoadBalancer  selector:    app: auto-serve  ports:    - protocol: TCP      port: 8082      targetPort: 8082

創建【Service】yEo28資訊網——每日最新資訊28at.com

kubectl apply -f app-lb-service.yaml

查看【Service】yEo28資訊網——每日最新資訊28at.com

在查看「app-lb-service」時,值得注意一下Endpoints的字段屬性,這里就是Pod選擇器選中的Pod;yEo28資訊網——每日最新資訊28at.com

kubectl get svc app-lb-service -o wideNAME             TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE     SELECTORapp-lb-service   LoadBalancer   10.111.65.220   localhost     8082:30636/TCP   6m49s   app=auto-servekubectl describe svc app-lb-serviceName:                     app-lb-serviceNamespace:                defaultLabels:                   <none>Annotations:              <none>Selector:                 app=auto-serveType:                     LoadBalancerIP Family Policy:         SingleStackIP Families:              IPv4IP:                       10.111.65.220IPs:                      10.111.65.220LoadBalancer Ingress:     localhostPort:                     <unset>  8082/TCPTargetPort:               8082/TCPNodePort:                 <unset>  30636/TCPEndpoints:                10.1.0.160:8082,10.1.0.161:8082,10.1.0.162:8082Session Affinity:         NoneExternal Traffic Policy:  ClusterEvents:                   <none>kubectl get pods -o wideNAME                               READY   STATUS    RESTARTS   AGE   IP           NODE          serve-deployment-f6f6c5bbd-9qvgr   1/1     Running   0          39m   10.1.0.162   docker-desktopserve-deployment-f6f6c5bbd-w7nj2   1/1     Running   0          39m   10.1.0.161   docker-desktopserve-deployment-f6f6c5bbd-x7v4d   1/1     Running   0          39m   10.1.0.160   docker-desktop

圖片圖片yEo28資訊網——每日最新資訊28at.com

五、參考源碼

文檔倉庫:https://gitee.com/cicadasmile/butte-java-note腳本倉庫:https://gitee.com/cicadasmile/butte-auto-parent

本文鏈接:http://www.tebozhan.com/showinfo-26-88-0.htmlK8S | Service服務發現

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: Golang 中的 io 包詳解:組合接口

下一篇: SpringBoot中使用Cache提升接口性能詳解

標簽:
  • 熱門焦點
  • K60 Pro官方停產 第三方瞬間漲價

    雖然沒有官方宣布,但Redmi的一些高管也已經透露了,Redmi K60 Pro已經停產且不會補貨,這一切都是為了即將到來的K60 Ultra鋪路,屬于廠家的正常操作。但有意思的是該機在停產之后
  • K60至尊版狂暴引擎2.0加持:超177萬跑分斬獲性能第一

    Redmi的后性能時代戰略發布會今天下午如期舉辦,在本次發布會上,Redmi公布了多項關于和聯發科的深度合作,以及新機K60 Ultra在軟件和硬件方面的特性,例如:“K60 至尊版,雙芯旗艦
  • 5月安卓手機好評榜:魅族20 Pro奪冠

    性能榜和性價比榜之后,我們來看最后的安卓手機好評榜,數據來源安兔兔評測,收集時間2023年5月1日至5月31日,僅限國內市場。第一名:魅族20 Pro好評率:97.50%不得不感慨魅族老品牌還
  • Rust中的高吞吐量流處理

    作者 | Noz編譯 | 王瑞平本篇文章主要介紹了Rust中流處理的概念、方法和優化。作者不僅介紹了流處理的基本概念以及Rust中常用的流處理庫,還使用這些庫實現了一個流處理程序
  • 如何正確使用:Has和:Nth-Last-Child

    我們可以用CSS檢查,以了解一組元素的數量是否小于或等于一個數字。例如,一個擁有三個或更多子項的grid。你可能會想,為什么需要這樣做呢?在某些情況下,一個組件或一個布局可能會
  • WebRTC.Net庫開發進階,教你實現屏幕共享和多路復用!

    WebRTC.Net庫:讓你的應用更親民友好,實現視頻通話無痛接入! 除了基本用法外,還有一些進階用法可以更好地利用該庫。自定義 STUN/TURN 服務器配置WebRTC.Net 默認使用 Google 的
  • 騰訊蓋樓,字節拆墻

    來源 | 光子星球撰文 | 吳坤諺編輯 | 吳先之&ldquo;想重溫暴刷深淵、30+技能搭配暴搓到爽的游戲體驗嗎?一起上晶核,即刻暴打!&rdquo;曾憑借直播騰訊旗下代理格斗游戲《DNF》一
  • 華為舉行春季智慧辦公新品發布會 首次推出電子墨水屏平板

    北京時間2月27日晚,華為在巴塞羅那舉行春季智慧辦公新品發布會,在海外市場推出之前已經在中國市場上市的筆記本、平板、激光打印機等辦公產品,并首次推出搭載
  • 利用職權私自解除被封帳號 Meta開除20多名員工

    11月18日消息,據外媒援引知情人士表示,過去一年時間內,Facebook母公司Meta解雇或處罰了20多名員工以及合同工,指控這些人通過內部系統以不當方式重置用戶帳號,其
Top