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

其中,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

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

将一个新创建的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

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

你可能感兴趣的:(k8s,kubernetes,容器,云原生)