代码之家  ›  专栏  ›  技术社区  ›  Chris

Kubernetes中的“端点”是什么?

  •  7
  • Chris  · 技术社区  · 8 年前

    我是库伯内特斯的新手,开始阅读文档。 通常使用“端点”一词,但文档缺乏明确的定义。

    我可以想象“端点”是单个“节点”的某种访问点,但这只是猜测。

    2 回复  |  直到 8 年前
        1
  •  50
  •   Michael Hausenblas    8 年前

    你说的没错 glossary 端点确实没有条目,它是一个定义良好的Kubernetes网络概念或抽象。因为它是次要的,你通常不会直接操纵它。有一个核心资源 Endpoint 已定义,并且在命令行上也受支持:

    $ kubectl get ep
    NAME         ENDPOINTS            AGE
    kubernetes   192.168.64.13:8443   10d
    

    在这里你可以看到它实际上是什么:一个IP地址和一个端口。通常,您会让服务管理端点(每个pod一个EP,服务将流量路由到),但您也可以 manually manage

        2
  •  48
  •   vadasambar    6 年前

    pod通过端点向服务公开自己。 如果你愿意成为豆荚的一部分。

    enter image description here Services and Endpoints

        3
  •  23
  •   Chris Halcrow    5 年前

    端点是获取分配给它的各个pod的IP地址的对象。然后,一个kubernetes服务依次引用endpoint对象,以便该服务具有pods的内部ip的记录,以便能够与它们通信。我们需要端点作为抽象层,因为kubernetes中的“服务”充当编排的一部分,以确保将流量分发到pod(包括仅将流量发送到健康的pod)。例如,如果一个pod死亡,将生成一个具有新IP地址的替换pod。从概念上讲,dead pod IP将从endpoint对象中删除,并且新创建的pod的IP将被添加,这样服务将被更新并且“知道”要连接到哪个pod。

    阅读“向集群公开pods”,然后在此处阅读“创建服务”- https://kubernetes.io/docs/concepts/services-networking/connect-applications-service/#exposing-pods-to-the-cluster

    调查和了解这种关系的一个简单方法是:

    • kubectl describe pods
    • kubectl get ep -并观察分配给端点的IP地址
    • kubectl describe service myServiceName -并观察 Endpoints 与您的服务相关

    因此,端点与单个节点的IP无关。我发现理解kubernetes的总体结构以及集群、节点、服务、端点和pod之间的关系非常有用。这张图很好地概括了这一点:

    enter image description here

        4
  •  10
  •   Rotem jackoby    5 年前

    我会一一回答你的问题:


    (K8S中的资源名是Endpoint ).


    这些端点可以是:

    1. 集群内部运行的内部pod -这是一种更为常见的形式。
      当我们创建服务和pods并将服务标签选择器与pods标签匹配时,它会在后台自动创建。

    2. 不是pod的外部IP -这是最鲜为人知的选择。

    外部IP可以驻留在集群外部—例如外部web服务器或数据库。

    关于外部终结点-如果您没有在服务中指定标签选择器-Kubernetes无法创建终结点列表,因为他不知道服务应该包括哪些pod和代理哪些pod。


    它在哪里?

    就像这里提供的图表一样-它位于服务和内部(pods)或外部(web服务器、数据库等)之间 资源。


    我可以想象“端点”是一个 单个“节点”是一个访问位于其内部的资源的点 群集中的一个节点。

    端点可以位于集群中的一个节点内,也可以位于集群/环境之外。

    内部的 端点(这意味着pod标签与服务标签选择器匹配)-您可以通过以下方式访问它:

    $kubectl describe svc/my-service
    
    
    Name:                     my-service
    Namespace:                default
    Labels:                   <none>
    Annotations:              kubectl.kubernetes.io/last-applied-configuration:
                                {"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"name":" my-service","namespace":"...
    Selector:                 run=some-run
    Type:                     NodePort
    IP:                       10.100.92.162
    Port:                     <unset>  8080/TCP
    TargetPort:               80/TCP
    NodePort:                 <unset>  31300/TCP
    Endpoints:                172.21.21.2:80,172.21.38.56:80,172.21.39.160:80
    Session Affinity:         None
    External Traffic Policy:  Cluster
    Events:                   <none>
    

    $kubectl get endpoints my-service
    
    NAME           ENDPOINTS                                       AGE
    my-service   172.21.21.2:80,172.21.38.56:80,172.21.39.160:80   63d
    

    关于 外部的

    创建不带标签选择器的服务:

    apiVersion: v1
    kind: Service
    metadata:
      name: my-service #<------ Should match the name of Endpoints object
    spec:
      ports:
        - protocol: TCP
          port: 8080
          targetPort: 9376
    

    因此,相应的端点对象不会自动创建,您可以手动添加 Endpoints 对象并将服务映射到运行外部资源的所需网络地址和端口:

    apiVersion: v1
    kind: Endpoints
    metadata:
      name: my-service #<------ Should match the name of Service
    subsets:
      - addresses:
          - ip: 192.0.2.45
        ports:
          - port: 9376
    

    ( )我用了这个词 内部的 对于与标签选择器和术语匹配的pod的自动生成端点 外部的 对于手动创建的终结点。

    自动生成 和

    在大多数情况下,当端点与集群中的pod相关时——我们希望它们也由K8S管理——在这种情况下,它们也需要由K8S生成。

        5
  •  2
  •   Nitin Bansal    7 年前
    1. 当服务选择器匹配pod标签时,该IP地址将添加到端点。

    https://theithollow.com/2019/02/04/kubernetes-endpoints/

        6
  •  0
  •   Jess ChootsMagoots    6 年前

    在k8s中,端点由一个分布式API组成,比如“[IP]:[Port]”等。然而,在SOAP中,Endpoint是一个类似于分布式API的URL。

    from Google Cloud :

    Endpoints是一个分布式API管理系统。它提供了一个API控制台、托管、日志记录、监视和其他功能来帮助您创建、共享、维护和保护API。