Kubernetes中的“端点”是什么?

bwleehnv  于 2022-12-17  发布在  Kubernetes
关注(0)|答案(7)|浏览(180)

我是Kubernetes的新手,开始阅读文档。那里经常使用“端点”这个术语,但文档缺乏明确的定义。
什么是Kubernetes的“端点”?它位于何处?
我可以想象“端点”是某个“节点”的某种访问点,但这只是一个猜测。

vfh0ocws

vfh0ocws1#

glossary中确实没有端点条目,这是一个定义良好的Kubernetes网络概念或抽象。由于它具有次要性质,因此通常不会直接操作它。定义了一个核心资源Endpoint,命令行也支持它:

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

你可以看到它实际上是什么:通常,您会让服务管理端点(服务将流量路由到的每个pod一个EP),但如果您有需要的用例,您也可以手动管理它们。

ldfqzlk8

ldfqzlk82#

pod通过终结点向服务公开自己。如果你是pod的一部分,就可以这样做。


来源:Services and Endpoints

zphenhs4

zphenhs43#

端点是一种资源,可获取动态分配给它的一个或多个Pod的IP地址沿着端口。可以使用kubectl get endpoints查看端点。
端点资源由Kubernetes服务引用,以便该服务记录Pod的内部IP,以便能够与它们通信。
我们需要端点作为一个抽象层,因为kubernetes中的“服务”充当了协调的一部分,以确保将流量分发到pod(包括仅向健康的Pod发送流量)。例如,如果Pod死亡,则将生成具有新IP地址的替换Pod。从概念上讲,将从端点对象中删除死亡的Pod IP,并添加新创建的Pod的IP,从而更新服务并且“知道”连接到哪个转接单元。
阅读“将Pod暴露给群集”,然后在此处阅读“创建服务”-https://kubernetes.io/docs/concepts/services-networking/connect-applications-service/#exposing-pods-to-the-cluster
一个简单的方法来调查和查看的关系是:

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

因此,端点与单个节点的IP无关。我发现了解kubernetes的整体结构以及集群、节点、服务、端点和pod之间的关系非常有用。此图很好地概括了这一点,并显示了进入OSI第4层的入口流(TCP层)到达后端节点1,OSI层7(http层)入口最终到达Pod 1中的“Web容器1”:

cclgggtu

cclgggtu4#

我来一一回答大家的问题:
什么是Kubernetes的“终点”?
(The K8S中的资源名称是端点s)。
端点是Kubernetes中的一个对象,它表示一个......端点列表。
这些终点可以是:
1.在群集内运行的内部pod-这是更熟悉的形式。
当我们创建服务和pod并将服务标签选择器与pod标签匹配时,它会在后台自动创建。
1.不是Pod的外部IP-这是最不为人所知的选项。
外部IP可以驻留在群集外部-例如外部Web服务器或数据库。
它也可以驻留在不同的名称空间中-如果您希望将服务指向集群中不同名称空间中的服务。
关于外部端点-如果您没有在服务中指定标签选择器- Kubernetes无法创建端点列表,因为他不知道服务应该包含和代理哪些pod。
它在哪里?
就像这里提供的伟大的图表显示-它位于服务和内部(pod)或外部(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

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

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

注意:)我使用术语 internal 表示与标签选择器匹配的pod自动生成的端点,使用术语 external 表示手动创建的端点。
我可以使用术语 * 自动生成 * 和 * 手动 * 代替-这将是更准确的,但我认为也更混乱。
在大多数情况下,当端点与集群中的pod相关时-我们希望它们也由K8S管理-在这种情况下,它们也需要由K8S生成。

83qze16e

83qze16e5#

将端点视为“到达应用程序的最终目的地”或“最后的smth”
如以下示例所示:播客IP= 10.32.0.2,服务端口*= 3306,端点= [播客IP]:[服务端口]
因此,用户Bob要访问MySql应用程序,其地址应为10.32.0.2:3306,这是网络中他可以找到所需信息的最后一个节点。

一个简单化的示例:我想访问Google Mail在这种情况下为我/浏览器端点将是gmail.com:443类似于上面的示例[**pod-IP]:[service-Port]**

i86rm4rw

i86rm4rw6#

1.端点跟踪服务将流量发送到的对象的IP地址。
1.当服务选择器与pod标签匹配时,该IP地址将添加到端点。
来源:https://theithollow.com/2019/02/04/kubernetes-endpoints/

yquaqz18

yquaqz187#

在k8s中,端点是由一个分布式的API组成的,如“[IP]:[Port]”等,而在SOAP中,端点是一个分布式的API,如URL。
from Google Cloud
终结点是一个分布式API管理系统。它提供API控制台、托管、日志记录、监视和其他功能,以帮助您创建、共享、维护和保护您的API。

相关问题