我是Kubernetes的新手,并开始阅读文档。 经常使用术语“端点”,但是文档缺少明确的定义。
就Kubernetes而言,什么是“端点”?它在哪里?
我可以想象“端点”是单个“节点”的某种接入点,但这只是一个猜测。
答案 0 :(得分:12)
虽然您没错,在glossary中确实没有端点的条目,但这是定义明确的Kubernetes网络概念或抽象。由于它是次要性质,因此您通常不会直接对其进行操作。定义了一个核心资源Endpoint,并且在命令行上也支持它:
$ kubectl get ep
NAME ENDPOINTS AGE
kubernetes 192.168.64.13:8443 10d
您将看到有效的地址:IP地址和端口。通常,您可以让服务管理端点(服务将流量路由到每个pod的一个EP),但是如果您有用例,也可以manually manage。
答案 1 :(得分:7)
端点是一个对象,它获取分配给它的各个Pod的IP地址。然后依次由kubernetes服务引用该终结点对象,以便该服务具有pod内部IP的记录,以便能够与它们通信。我们需要端点作为抽象层,因为kubernetes中的“服务”是业务流程的一部分,以确保将流量分配到Pod(包括仅将流量发送到健康Pod)。例如,如果吊舱死亡,则将生成具有新IP地址的替换吊舱。从概念上讲,将从端点对象中删除无效的Pod IP,并添加新创建的Pod的IP,以便更新服务并“知道”要连接的Pod。
在此处阅读“将Pod暴露给集群”,然后在此处“创建服务”-https://kubernetes.io/docs/concepts/services-networking/connect-applications-service/#exposing-pods-to-the-cluster
一种简单的调查关系的方法是:
kubectl get pods
-并观察您的Pod的IP地址kubectl get ep
-观察分配给您端点的IP地址kubectl describe service myServiceName
-并观察与您的服务相关的Endpoints
因此,不,端点与单个节点的IP无关。我发现了解Kubernetes的总体结构以及集群,节点,服务,端点和Pod之间的关系很有用。该图很好地总结了这一点:
答案 2 :(得分:4)
Pod通过端点将自身公开给服务。 是您是否要加入吊舱的一部分。
答案 3 :(得分:4)
我会一一回答您的问题:
就Kubernetes而言,什么是“端点”?
(K8S中的资源名称是Endpoint s )。
端点是kubernetes中的一个对象,代表一个……端点列表。
这些端点可以是:
集群中运行的内部Pod -这种形式更常见。
当我们创建服务和广告连播并将服务标签选择器与广告连播标签匹配时,会为我们在后台自动创建该标签。
不是Pod的外部IP -这是鲜为人知的选项。
外部IP可以位于群集外部-例如外部Web服务器或数据库。
它也可以驻留在其他名称空间中-如果您要将服务指向群集内其他名称空间中的服务。
关于外部端点-如果您未在服务中指定标签选择器-Kubernetes无法创建端点列表,因为他不知道该服务应包含和代理哪些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>
或直接与:
$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
对象并将服务映射到所需的运行外部资源的网络地址和端口:
apiVersion: v1
kind: Endpoints
metadata:
name: my-service #<------ Should match the name of Service
subsets:
- addresses:
- ip: 192.0.2.45
ports:
- port: 9376
(注意:)对于与标签选择器和术语 external <匹配的广告连播,我将术语 internal 用于自动生成的Pod端点。 / em>用于手动创建的端点。
我可以改用自动生成和手动这两个词-可能更准确,但我认为也更加令人困惑。
在大多数情况下,当端点与集群中的Pod相关时-我们希望它们也由K8S管理-在这种情况下,它们也需要由K8S生成。
答案 4 :(得分:0)
答案 5 :(得分:0)
在k8s中,端点由分布式API组成,例如“ [IP]:[Port]”等。但是,在SOAP中,Endpoint是像URL这样的分布式API。
Endpoints是一个分布式API管理系统。它提供API控制台,托管,日志记录,监视和其他功能,以帮助您创建,共享,维护和保护API。
答案 6 :(得分:0)
就我而言,我在注释中遇到了语法问题
metadata:
name: academy
namespace: qa
resourceVersion: '12761882'
generation: 1
creationTimestamp: '2021-06-22T03:21:43Z'
labels:
app.kubernetes.io/instance: academy-platform-qa
app.kubernetes.io/managed-by: Tiller
app.kubernetes.io/name: academy
helm.sh/chart: academy-qa-v0.6.8-0-gef467c2
annotations:
cert-manager.io/cluster-issuer: letsencrypt-prod
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/whitelist-source-range: >-
10.16.0.27/8, 69.114.20.139/32,
如你所见,我在 69.114.20.139/32
之后离开了 ','
metadata:
name: academy
namespace: qa
resourceVersion: '12761882'
generation: 1
creationTimestamp: '2021-06-22T03:21:43Z'
labels:
app.kubernetes.io/instance: academy-platform-qa
app.kubernetes.io/managed-by: Tiller
app.kubernetes.io/name: academy
helm.sh/chart: academy-qa-v0.6.8-0-gef467c2
annotations:
cert-manager.io/cluster-issuer: letsencrypt-prod
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/whitelist-source-range: >-
10.16.0.27/8, 69.114.20.139/32