成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

如何將多個(gè)springboot應(yīng)用部署在k8s并實(shí)現(xiàn)互相通信-創(chuàng)新互聯(lián)

如何將多個(gè)springboot應(yīng)用部署在k8s并實(shí)現(xiàn)互相通信

近來(lái)因工作需要,springboot / spring cloud 構(gòu)建的產(chǎn)品需要提供嵌入k8s的能力,所以手動(dòng)部署了一下。
目標(biāo):部署服務(wù)A與B,請(qǐng)求到達(dá)服務(wù)A,服務(wù)A內(nèi)部請(qǐng)求服務(wù)B,然后返回結(jié)果。

成都創(chuàng)新互聯(lián)公司是一家專注于做網(wǎng)站、成都做網(wǎng)站與策劃設(shè)計(jì),匯川網(wǎng)站建設(shè)哪家好?成都創(chuàng)新互聯(lián)公司做網(wǎng)站,專注于網(wǎng)站建設(shè)10多年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:匯川等地區(qū)。匯川做網(wǎng)站價(jià)格咨詢:18982081108一、構(gòu)建springboot應(yīng)用

要實(shí)現(xiàn)在k8s上面通信,筆者使用了 spring-cloud-kubernetes 這個(gè)依賴包來(lái)完成,且使用的 maven 來(lái)構(gòu)建 project,讀者可以自行更換 gradle 等以及對(duì)應(yīng)版本,個(gè)人只貼出pom依賴,且version并未貼出,請(qǐng)自行尋找與自己使用的springboot版本對(duì)應(yīng)的veision:

org.springframework.cloudspring-cloud-starter-kubernetes

1.編寫(xiě)兩個(gè)springboot應(yīng)用,分別名字為 demo-request 以及 demo-data,實(shí)現(xiàn)以上功能,具體如何構(gòu)建不再贅述,

demo-data服務(wù)部分核心服務(wù)代碼如下(忽略了部分重要的導(dǎo)包):

1.1 定義一個(gè)controller,返回了當(dāng)前請(qǐng)求的 ip 與 hostname
@RestController
public class DataController {@GetMapping("/data")
    public ResponseVOdata(){HashMapmap = new HashMap<>();
        try {InetAddress address = InetAddress.getLocalHost();
            map.put("name",address.getHostName());
            map.put("address",address.getHostAddress());
            System.out.println("Host Name: " + address.getHostName());
            System.out.println("Host Address: " + address.getHostAddress());
        } catch (UnknownHostException e) {e.printStackTrace();
        }
        return ResponseVOUtil.success(map);
    }
}
1.2 main class標(biāo)記為一個(gè)web應(yīng)用啟動(dòng)

這里有一個(gè)比較重要的點(diǎn),是通過(guò) @EnableDiscoveryClient 開(kāi)啟服務(wù)發(fā)現(xiàn)

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

@EnableDiscoveryClient
@SpringBootApplication
public class DataApp {public static void main(String[] args) {SpringApplication.run(DataApp.class, args);
    }

}
1.3 appliaction.yml配置

其中定義了服務(wù)的端口、名稱以及指定 namespace。

(筆者懶,直接使用之前測(cè)試es用的namespace,讀者可以提前構(gòu)建,命令如下:kubectl create ns ${your define namespace})

server:
  port: 12001
spring:
  application:
    name: demo-data
  cloud:
    kubernetes:
      discovery:
        namespaces:
          - myes

demo-request 服務(wù)部分核心服務(wù)代碼如下(忽略了部分重要的導(dǎo)包),大體與 demo-data 類似:

1.3 定義一個(gè)請(qǐng)求其他服務(wù)的請(qǐng)求

筆者這里使用openFeign組件調(diào)用 demo-data 服務(wù)中的 /data 請(qǐng)求拿到結(jié)果,讀者可以自行使用其他組件比如 RestTemplate、okhttp等等

@RestController
public class RequestController {@Resource
    private DataServer dataServer;

    @GetMapping("request")
    public ResponseVO data(){return dataServer.data();
    }
}
1.4 feign接口配置

這里的url很重要,因?yàn)槲匆肫渌M件,此處的 url 采用了 k8s的 dns 尋址,拼接規(guī)則采用的 {service-name}.{namespace},讀者也可使用{namespace}.{service-name}等等,還可以使用環(huán)境變量,可以自行查看官方文檔描述。

但是在 spring-cloud-kubernetes 的官網(wǎng)中有這個(gè)描述:使用 spring-cloud-starter-kubernetes-discoveryclient 這個(gè)依賴包的全的命名規(guī)則為:{service-name}.{namespace}.svc.{cluster}.local:{service-port}。這里是官網(wǎng)描述,但是本人嘗試過(guò)沒(méi)有連通,如果有大佬能告知感激不盡!

@FeignClient(name = "demo-data", url = "http://demo-data.myes:12001")
public interface DataServer {@GetMapping("data")
    public ResponseVOdata();
}
1.5 application.yml配置
server:
  port: 12002
spring:
  application:
    name: demo-request
  cloud:
    kubernetes:
      discovery:
        namespaces:
          - myes
1.6 構(gòu)建鏡像

自行測(cè)試以上服務(wù)能夠正常請(qǐng)求即可,打包以及構(gòu)建過(guò)程省略,請(qǐng)自行構(gòu)建鏡像

貼一個(gè)簡(jiǎn)單的構(gòu)建demo-request服務(wù)的Dockerfile,筆者此處只寫(xiě)了最小功能,如有需要可以自行修改

FROM java:8
MAINTAINER jyu
ADD ./demo-request-1.0-SNAPSHOT.jar /app.jar
EXPOSE 12002
ENTRYPOINT ["java","-jar","-Xms512m","-Xmx512m","-Dfile.encoding=utf-8","/app.jar"]
二、編寫(xiě)k8s的yaml文件

筆者自行創(chuàng)建 namespace 以及修改對(duì)應(yīng)的配置,其實(shí)這塊沒(méi)什么好寫(xiě)的,因?yàn)槭菫榱藢?shí)現(xiàn)本文的目標(biāo)寫(xiě)最小資源清單,筆者可以自行根據(jù)需要新增配置。

2.1 配置demo-data的yaml文件
apiVersion: apps/v1
kind: Deployment
metadata:
  name: demo-data
  namespace: myes
spec:
# 副本數(shù)增加為了測(cè)試service的負(fù)載均衡
  replicas: 2
  selector:
    matchLabels:
      run: demo-data
  template:
    metadata:
      labels:
        run: demo-data
    spec:
    # 此處筆者懶,指定了機(jī)器加載鏡像,但是在實(shí)際開(kāi)發(fā)過(guò)程中,pod的構(gòu)建應(yīng)該交給k8s本身,讀者可以去掉
      nodeName: node4
      containers:
      # 此處自行傳到自己的鏡像倉(cāng)庫(kù)或者使用本地鏡像
        - image: demo-data:1.0
          name: demo-data
          ports:
            - containerPort: 12001

---
kind: Service
apiVersion: v1
metadata:
  name: demo-data
  namespace: myes
  labels:
    run: demo-data
spec:
  type: NodePort
  selector:
    run: demo-data
  ports:
    - port: 12001
      protocol: TCP
      nodePort: 31991
2.2 配置demo-request的yaml文件

總體與demo-data類似

apiVersion: apps/v1
kind: Deployment
metadata:
  name: demo-request
  namespace: myes
spec:
  selector:
    matchLabels:
      run: demo-request
  template:
    metadata:
      labels:
        run: demo-request
    spec:
      nodeName: node4
      containers:
        - image: demo-request:1.0
          name: demo-request
          ports:
            - containerPort: 12002

---
kind: Service
apiVersion: v1
metadata:
  name: demo-request
  namespace: myes
  labels:
    run: demo-request
spec:
  type: NodePort
  selector:
    run: demo-request
  ports:
    - port: 12002
      protocol: TCP
      nodePort: 31992
2.3 結(jié)果測(cè)試

根據(jù)2.1以及2.2的資源清單創(chuàng)建以后,會(huì)有如下資源出現(xiàn):

資源清單

其中 pod/curl-test 為筆者創(chuàng)建的一個(gè)用于 curl 測(cè)試的臨時(shí)鏡像,命令如下,自行修改 namespace:

kubectl run -i --tty --image radial/busyboxplus:curl curl-test --restart=Never --rm -n myes

此時(shí)我們?cè)?curl-test 這個(gè) pod 中 ping 一下 service/demo-request 的預(yù)定義名稱,看看 ip 是否對(duì)應(yīng)的上:

ping demo-request.myes

結(jié)果如下,可以很清楚的看得到 demo-request.myes 這個(gè)域名能夠?qū)?yīng) service/demo-request 的 cluster-ip:
ping

那么下一步請(qǐng)求一下 1.3 中預(yù)定義的請(qǐng)求:

curl demo-request.myes:12002/request

結(jié)果如下:

result

這里能夠正常返回,注意此處的結(jié)果,實(shí)際上是 demo-data 服務(wù)返回的結(jié)果,注意看返回的 name 與 address 字段。

那么整個(gè)請(qǐng)求單向鏈路圖為:

flow

那么多來(lái)幾次就能看到負(fù)載能力,可以很清楚的看到 ip 是變了的:

在這里插入圖片描述

總結(jié):本文屬于入門級(jí)教程,只告訴了讀者 springboot application 在 k8s 內(nèi)部如何內(nèi)部不通過(guò)其他組件實(shí)現(xiàn)通信,有一些更深入的玩法請(qǐng)自行了解官網(wǎng)。

比如 service 的負(fù)載均衡策略,配合 ingress 使用等等。

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧

網(wǎng)站欄目:如何將多個(gè)springboot應(yīng)用部署在k8s并實(shí)現(xiàn)互相通信-創(chuàng)新互聯(lián)
當(dāng)前URL:http://jinyejixie.com/article28/jgicp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供電子商務(wù)網(wǎng)站設(shè)計(jì)、企業(yè)建站、動(dòng)態(tài)網(wǎng)站關(guān)鍵詞優(yōu)化、微信公眾號(hào)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

微信小程序開(kāi)發(fā)
土默特右旗| 南郑县| 香格里拉县| 洪雅县| 乌拉特前旗| 南丰县| 汝阳县| 九台市| 云林县| 老河口市| 昌吉市| 武宣县| 遂溪县| 新密市| 九龙坡区| 巴塘县| 永吉县| 伊金霍洛旗| 万全县| 汉中市| 盱眙县| 嘉黎县| 景东| 宜都市| 策勒县| 高雄县| 高安市| 玉溪市| 墨竹工卡县| 神池县| 新巴尔虎左旗| 奉节县| 融水| 盘锦市| 东兰县| 长岛县| 乐清市| 乌鲁木齐市| 大名县| 八宿县| 谷城县|