Chr*_*ris 25 endpoint kubernetes
我是Kubernetes的新手并开始阅读文档.通常使用术语"端点",但文档缺乏明确的定义.
什么是Kubernetes的"终点"?它在哪里?
我可以想象'端点'是某个'节点'的某种接入点,但这只是猜测.
Chr*_*row 33
端点是一个对象,它获取分配给它的各个 Pod 的 IP 地址。然后,端点对象又被 kubernetes 服务引用,以便该服务记录 pod 的内部 IP,以便能够与它们通信。我们需要端点作为抽象层,因为 kubernetes 中的“服务”充当编排的一部分,以确保将流量分配到 pod(包括仅将流量发送到健康的 pod)。例如,如果 Pod 死亡,则会生成具有新 IP 地址的替换 Pod。从概念上讲,死的 pod IP 将从端点对象中删除,并添加新创建的 pod 的 IP,以便更新服务并“知道”要连接到哪些 pod。
阅读“将 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 之间的关系很有用。这张图很好地总结了它:
Mic*_*las 22
虽然你是正确的,但在词汇表中确实没有端点条目,它是一个定义明确的Kubernetes网络概念或抽象.由于它具有次要性质,因此通常不会直接操纵它.已定义核心资源Endpoint,并且命令行也支持它:
$ kubectl get ep
NAME ENDPOINTS AGE
kubernetes 192.168.64.13:8443 10d
Run Code Online (Sandbox Code Playgroud)
在那里你可以看到它的有效性:IP地址和端口.通常,您可以让服务管理端点(服务将流量路由到每个Pod的一个EP),但如果您有需要它的用例,也可以手动管理它们.
Rtm*_*tmY 16
我会一一回答你的问题:
就 Kubernetes 而言,什么是“端点”?
(K8S 中的资源名称是 Endpoint s)。
Endpoints 是 kubernetes 中的一个对象,它代表一个……端点列表。
这些端点可以是:
在集群内部运行的内部 pod - 这是更熟悉的形式。
当我们创建服务和 Pod 并将服务标签选择器与 Pod 标签匹配时,它会在幕后自动为我们创建。
不是 pod的外部 IP - 这是最不为人知的选项。
外部 IP 可以驻留在集群之外 - 例如外部 Web 服务器或数据库。
它也可以驻留在不同的命名空间中 - 如果您想将您的服务指向集群内不同命名空间中的服务。
关于外部端点 - 如果您没有在服务中指定标签选择器 - Kubernetes 无法创建端点列表,因为他不知道服务应该包含和代理哪些 pod。
它位于哪里?
就像这里提供的很棒的图表一样——它位于服务和内部(pod)或外部(网络服务器、数据库等)资源之间。
我可以想象“端点”是单个“节点”的某种访问点,它是对位于集群中一个节点内的资源的访问点。
端点可以驻留在集群中的节点之一内,也可以驻留在集群/环境之外。
如果它是一个内部端点(这意味着 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>
Run Code Online (Sandbox Code Playgroud)
或直接使用:
$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
Run Code Online (Sandbox Code Playgroud)
关于外部端点:
您创建一个没有标签选择器的服务:
apiVersion: v1
kind: Service
metadata:
name: my-service #<------ Should match the name of Endpoints object
spec:
ports:
- protocol: TCP
port: 8080
targetPort: 9376
Run Code Online (Sandbox Code Playgroud)
因此不会自动创建相应的 Endpoint 对象,您需要手动添加Endpoints对象并将 Service 映射到运行外部资源的所需网络地址和端口:
apiVersion: v1
kind: Endpoints
metadata:
name: my-service #<------ Should match the name of Service
subsets:
- addresses:
- ip: 192.0.2.45
ports:
- port: 9376
Run Code Online (Sandbox Code Playgroud)
(注意:)我使用术语internal表示与标签选择器匹配的 pod 的自动生成的 Endpoints 和术语external表示手动创建的 Endpoints。
我可以改用自动生成和手动这两个术语——那样会更准确,但我认为也更令人困惑。
在大多数情况下,当 Endpoints 与我们集群中的 pod 相关时——我们希望它们也由 K8S 管理——在这种情况下,它们也需要由 K8S 生成。
小智 9
将端点视为“到达应用程序的最终目的地”或“最后的某种东西”
正如您在下面的示例中看到的:pod-IP = 10.32.0.2,service-Port * = 3306,endpoint = [pod-IP]:[service-Port]
因此,对于用户 Bob 来说,要访问 MySql 应用程序,它应该寻址到 10.32.0.2:3306,这是网络中他可以找到所需信息的最后一个节点。
一个简单的例子:我想在这种情况下为我/浏览器访问 Google Mail,端点将是gmail.com:443与上面的示例类似 [ pod-IP]:[service-Port]
| 归档时间: |
|
| 查看次数: |
9382 次 |
| 最近记录: |