• k8s:endpoint


    在 Kubernetes 中,Endpoint 是一种 API 对象,它用于表示集群内某个 Service 的具体网络地址。换句话说,它连接到一组由 Service 选择的 Pod,从而使它们能够提供服务。每个 Endpoint 对象都与相应的 Service 对象具有相同的名称,并属于相同的命名空间。

    每个 Endpoint 对象都会包含一组 Pod 的 IP 地址和端口,作为 Service 的后端。当 Service 被定义时,Kubernetes 控制器会监视匹配 Service 选择器的 Pod,并自动更新 Endpoint 对象。这样,当新的 Pod 被创建或现有的 Pod 被删除时,Endpoint 对象将会自动得到更新。

    Endpoint 对象的定义形态如下:

    kind: Endpoints
    apiVersion: v1
    metadata:
      name: my-service
    subsets:
      - addresses:
          - ip: 192.0.2.42
        ports:
          - port: 9376
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    其中,metadata.name 是 Endpoint 的名称,subsets.addresses.ip 是后端 Pod 的 IP 地址subsets.ports.port 是要暴露的端口。

    然而,请注意,除非有特别的需求,否则通常不需要手动创建或管理 Endpoints 对象。当你使用 Service 来选择 Pod 时,Endpoints 对象会自动被创建和管理。也就是说,只要 Service 选择器能够匹配到 Pod,Kubernetes 就会自动将匹配的 Pod 的 IP 地址和端口添加到 Endpoints 对象中。

    总的来说,Endpoint 是 Kubernetes Service 的一个重要组成部分,负责维护一组提供服务的 Pod 的 IP 地址和端口信息,使得 Service 能够通过网络将请求路由到正确的 Pod。

    例如:

    apiVersion: v1
    kind: Service
    metadata:
      name: nginx-svc
      labels:
        app: nginx-po
    spec:
      ports:
      - port: 80
        targetPort: 80
        name: web
      selector: # 匹配哪些pod会被该service代理
        app: nginx-po  #所有匹配到这些标签的pod都可以通过该service进行访问
      type: NodePort
    
    ---
    
    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: web
    spec:
      serviceName:  "nginx"
      replicas: 2
      selector:
        matchLabels:
          app: nginx-po
      template:
        metadata:
          labels:
            app: nginx-po
        spec:
          containers:
          - name: nginx
            image: nginx:1.7.9
            ports:
            - containerPort: 80
              name: web
      updateStrategy:
        rollingUpdate:
          partition: 0
        type: RollingUpdate
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42

    这个yaml会创建一个 service nginx-svc,它所对应的selector选择器是nginx-po,也就是说所有label为 nginx-po 的pod的端口就会被自动加入到endpoint中。
    从下图可以看到所有label为nginx-po的pod的ip都被加入到和service同名的endpoint中。
    在这里插入图片描述

    将一个新创建的pod加入到已有的endpoint中去

    需要将新创建的pod的labels设置成已有svc一样,port端口也要和已有endpoint一样
    注意:如果只设置了相同的label,而没有设置port,这种情况下endpoint是识别不到的。

    一个已有的svc关联的endpoint

    newpod.yal

    apiVersion: v1
    kind: Pod
    metadata:
      labels:
        app: gate
      name: toolbox-0
      namespace: default
    spec:
      containers:
      - image: toolbox:v1.0.0
        imagePullPolicy: IfNotPresent
        name: toolbox
        ports:
        - containerPort: 10000
          name: test_port
          protocol: TCP
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    创建pod之后,可以看到endpoints新增了一个ip:port信息。
    在这里插入图片描述

  • 相关阅读:
    【LeetCode刷题(数据结构与算法)】:二叉树之左叶子之和
    Scala基础【常用方法补充、模式匹配】
    GPU学习(1)
    pandas cut 的方法
    修改git文件
    Miniconda3教程
    《垃圾回收算法手册 自动内存管理的艺术》——引用计数与垃圾回收器的比较(笔记)
    IO-Link通信RFID读卡器|传感器在汽车差速器组装线上的应用方案
    springboot身体健康问诊信息系统毕业设计源码181049
    nodejs的koa传参校验的手搓
  • 原文地址:https://blog.csdn.net/Zx13170918986/article/details/134193731