成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

K8S | Service服務(wù)發(fā)現(xiàn)

開發(fā) 架構(gòu)
在微服務(wù)架構(gòu)中,這里以開發(fā)環(huán)境「Dev」為基礎(chǔ)來描述,在K8S集群中通常會(huì)開放:路由網(wǎng)關(guān)、注冊中心、配置中心等相關(guān)服務(wù),可以被集群外部訪問。

一、背景

在微服務(wù)架構(gòu)中,這里以開發(fā)環(huán)境「Dev」為基礎(chǔ)來描述,在K8S集群中通常會(huì)開放:路由網(wǎng)關(guān)、注冊中心、配置中心等相關(guān)服務(wù),可以被集群外部訪問;

圖片圖片

對于測試「Tes」環(huán)境或者生產(chǎn)「Pro」環(huán)境,出于安全或者環(huán)境隔離性來考慮,在正常情況下只會(huì)開放網(wǎng)關(guān)服務(wù),而「注冊、配置」中心并不會(huì)對外暴露;

對于架構(gòu)中的其它業(yè)務(wù)服務(wù)一般不會(huì)對外開放,在K8S集群內(nèi)部服務(wù)間是可以正常通信的,對于「Dev」環(huán)境來說,研發(fā)會(huì)使用「注冊、配置」中心,網(wǎng)關(guān)是系統(tǒng)的訪問入口;

在K8S集群中,通過Service組件,可以快速簡單的實(shí)現(xiàn)服務(wù)發(fā)現(xiàn)和負(fù)載均衡;

二、Service組件

1、簡介

在K8S集群中是通過Pod組件來部署應(yīng)用服務(wù),Deployment組件實(shí)現(xiàn)Pod編排管理,Service組件實(shí)現(xiàn)應(yīng)用的訪問;

圖片圖片

【Pod】自身的特點(diǎn)是臨時(shí)的,使用過后直接拋棄的實(shí)體,這樣在Pod創(chuàng)建和銷毀的狀態(tài)中,會(huì)導(dǎo)致IP地址發(fā)生變化,即無法使用固定的IP進(jìn)行應(yīng)用訪問;

【Deployment】控制器通過管理ReplicaSet間接實(shí)現(xiàn)Pod管理,比如發(fā)布方式,更新和回滾策略,維持Pod副本數(shù)量,對應(yīng)用進(jìn)行快速的編排,但是并沒有涉及應(yīng)用的訪問;

【Service】是將運(yùn)行在一個(gè)或一組Pod上的網(wǎng)絡(luò)應(yīng)用程序公開為網(wǎng)絡(luò)服務(wù)的方法,可以在不修改現(xiàn)有應(yīng)用程序的情況下,使用服務(wù)發(fā)現(xiàn)機(jī)制訪問到該應(yīng)用;

基于Pod、Deployment、Service三個(gè)組件的協(xié)作,同一個(gè)應(yīng)用的部署腳本可以在開發(fā)、測試、生產(chǎn)不同環(huán)境中復(fù)用;

2、基礎(chǔ)語法

這里提供一個(gè)簡單的【Service】語法做參考;

圖片圖片

需要注意的是:在該腳本中沒有指定服務(wù)類型即ServiceType,默認(rèn)采用的是ClusterIP,通過集群的內(nèi)部IP暴露服務(wù),選擇該值時(shí)服務(wù)只能夠在集群內(nèi)部訪問;

三、內(nèi)部服務(wù)發(fā)現(xiàn)

1、Pod創(chuàng)建

基于【Deployment】組件,創(chuàng)建「auto-serve」應(yīng)用;

apiVersion: apps/v1
kind: Deployment
metadata:
  name: serve-deployment
  labels:
    app: auto-serve
spec:
  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

執(zhí)行創(chuàng)建命令

kubectl apply -f serve-deployment.yaml

2、Service創(chuàng)建

簡單的腳本文件:app-service.yaml;

apiVersion: v1
kind: Service
metadata:
  name: app-service
spec:
  selector:
    app: auto-serve
  ports:
  - name: app-service-port
    protocol: TCP
    port: 8082
    targetPort: auto-serve-port

創(chuàng)建【Service】

kubectl apply -f app-service.yaml

查看【Service】,可以使用命令行或者界面;

kubectl describe svc app-service

圖片圖片

刪除【Service】

kubectl delete -f app-service.yaml

3、內(nèi)部訪問

在上面已經(jīng)說明,當(dāng)Type不指定時(shí)采用的是ClusterIP,只能在集群內(nèi)部訪問,集群外部的網(wǎng)絡(luò)是無法訪問的;

在【auto-client】服務(wù)中提供一段訪問【auto-serve】接口的代碼,并制作鏡像【auto-client:3.3.3】,完成部署后查看日志打印;

@Component
public 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秒執(zhí)行一次
     */
    @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();
        }
    }
}

在代碼中通過服務(wù)名:端口和IP:端口都可以正常訪問,在Pod中查看兩個(gè)應(yīng)用的日志,請求和響應(yīng)都正常;

圖片圖片

四、外部服務(wù)發(fā)現(xiàn)

1、NodePort類型

指定類型為NodePort的腳本:app-np-service.yaml;

apiVersion: v1
kind: Service
metadata:
  name: app-np-service
spec:
  type: NodePort
  selector:
    app: auto-serve
  ports:
    - protocol: TCP
      port: 8082
      targetPort: 8082
      nodePort: 30010

創(chuàng)建【Service】

kubectl apply -f app-np-service.yaml

使用NodePort類型,K8S控制平面會(huì)在指定的范圍內(nèi)分配端口,如果需要特定的端口號可以指定nodePort字段中的值,但是該類型需要自己設(shè)置負(fù)載均衡解決方案;

2、LoadBalancer類型

指定類型為LoadBalancer的腳本:app-lb-service.yaml;

apiVersion: v1
kind: Service
metadata:
  name: app-lb-service
spec:
  type: LoadBalancer
  selector:
    app: auto-serve
  ports:
    - protocol: TCP
      port: 8082
      targetPort: 8082

創(chuàng)建【Service】

kubectl apply -f app-lb-service.yaml

查看【Service】

在查看「app-lb-service」時(shí),值得注意一下Endpoints的字段屬性,這里就是Pod選擇器選中的Pod;

kubectl get svc app-lb-service -o wide


NAME             TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE     SELECTOR
app-lb-service   LoadBalancer   10.111.65.220   localhost     8082:30636/TCP   6m49s   app=auto-serve


kubectl describe svc app-lb-service


Name:                     app-lb-service
Namespace:                default
Labels:                   <none>
Annotations:              <none>
Selector:                 app=auto-serve
Type:                     LoadBalancer
IP Family Policy:         SingleStack
IP Families:              IPv4
IP:                       10.111.65.220
IPs:                      10.111.65.220
LoadBalancer Ingress:     localhost
Port:                     <unset>  8082/TCP
TargetPort:               8082/TCP
NodePort:                 <unset>  30636/TCP
Endpoints:                10.1.0.160:8082,10.1.0.161:8082,10.1.0.162:8082
Session Affinity:         None
External Traffic Policy:  Cluster
Events:                   <none>


kubectl get pods -o wide


NAME                               READY   STATUS    RESTARTS   AGE   IP           NODE          
serve-deployment-f6f6c5bbd-9qvgr   1/1     Running   0          39m   10.1.0.162   docker-desktop
serve-deployment-f6f6c5bbd-w7nj2   1/1     Running   0          39m   10.1.0.161   docker-desktop
serve-deployment-f6f6c5bbd-x7v4d   1/1     Running   0          39m   10.1.0.160   docker-desktop

圖片圖片

五、參考源碼

文檔倉庫:
https://gitee.com/cicadasmile/butte-java-note

腳本倉庫:
https://gitee.com/cicadasmile/butte-auto-parent
責(zé)任編輯:武曉燕 來源: 知了一笑
相關(guān)推薦

2021-03-11 12:31:33

K8sCoreDNSDNS服務(wù)器

2024-07-22 13:43:31

Kubernetes容器

2022-04-22 13:32:01

K8s容器引擎架構(gòu)

2020-07-17 08:40:47

K8SServicePOD

2023-11-06 07:16:22

WasmK8s模塊

2023-09-06 08:12:04

k8s云原生

2023-09-08 08:09:12

k8sservice服務(wù)

2023-05-25 21:38:30

2023-08-04 08:19:02

2020-05-12 10:20:39

K8s kubernetes中間件

2022-09-05 08:26:29

Kubernetes標(biāo)簽

2022-04-13 11:33:27

容器云原生服務(wù)

2022-01-11 07:59:15

K8S KubernetesAirflow

2023-07-04 07:30:03

容器Pod組件

2022-08-15 09:49:28

K8s云原生

2024-06-26 00:22:35

2023-04-12 11:28:36

Kubernetes服務(wù)器

2023-11-07 08:23:05

2024-01-26 14:35:03

鑒權(quán)K8sNode

2021-04-12 20:42:50

K8S端口內(nèi)存
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 精品久久一| 日日夜夜精品免费视频 | 人人看人人爽 | 国产欧美精品一区二区三区 | 福利网址 | 午夜精品一区二区三区在线播放 | 伊人精品 | 精品国产青草久久久久96 | 91国内精品 | 男女av| 中文字幕国产一区 | 人成在线视频 | 国产yw851.c免费观看网站 | 免费视频一区二区 | 91福利网 | 久久99这里只有精品 | 国产精品久久久久久久久久久久久 | 国产二区精品视频 | 精品毛片 | 超碰成人免费 | 一级黄色片在线看 | 天天射网站 | 中文字幕在线电影观看 | 欧美日韩在线国产 | 久久久九九 | 免费一区二区三区 | 日韩精品亚洲专区在线观看 | 一区二区三区影院 | 91免费在线视频 | 美国十次成人欧美色导视频 | 在线免费观看欧美 | 精品国产视频在线观看 | 欧美中文字幕在线观看 | 日韩视频一区 | 9999久久 | 亚洲播放 | 欧美视频免费在线观看 | 黄网免费看 | 久久伊人精品一区二区三区 | 七七婷婷婷婷精品国产 | 久久黄色网 |