Kubernetes -- endpoints资源类型

endpoints是一种kubernetes资源类型,它是namespace scoped,简写为ep:

kubectl api-resources|grep endpoints
endpoints                         ep                                          true         Endpoints

endpoints有两种使用方法:

  • 随service被创建:

    • 创建service对象的同时,kubernetes会创建同名的endpoints的对象;
    • service的podSelector会将目标pod的endpoint信息(ip/port),添加到endpoints对象中;
  • 独立创建endpoints:

    • enpdoints作为一种资源类型,支持用户创建;
    • 将外部服务的endpoint添加到endpoints对象,可以使用kubernetes service访问外部服务;

service与endpoints

以一个简单的例子,来演示endpoints随service被自动创建出来。
创建nginx deploy,含2个pod:

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: nginx
  name: nginx
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        imagePullPolicy: IfNotPresent
        command:
        - nginx
        - -g
        - "daemon off;"
        workingDir: /usr/share/nginx/html
        ports:
        - name: http
          containerPort: 80
          protocol: TCP

创建nginx service:

apiVersion: v1
kind: Service
metadata:
  name: nginx-svc
spec:
  ports:
  - port: 80
    targetPort: 80
  selector:
    app: nginx

查看其service和endpoints资源:有一个同名的endpoints被创建出来

# kubectl get svc,endpoints
NAME                 TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE
service/nginx-svc    ClusterIP   10.233.26.39   <none>        80/TCP    3m2s

NAME                   ENDPOINTS                                                       AGE
endpoints/nginx-svc    10.233.96.113:80,10.233.97.95:80                3m2s

其endpoints的内容,实际是nginx pod的ip+port:

# kubectl get pod -owide
NAME                    READY   STATUS    RESTARTS   AGE    IP              NODE      NOMINATED NODE   READINESS GATES
nginx-6dcdfd5b8-8q7l5   1/1     Running   0          4m3s   10.233.97.95    master1   <none>           <none>
nginx-6dcdfd5b8-xsl96   1/1     Running   0          4m3s   10.233.96.113   master3   <none>           <none>

外部服务与endpoints

手动创建endpoints,添加外部服务的endpoint,可以将外部服务作为kubernetes的service使用。
etcd有3节点部署在外部,为其创建service: etcd-k8s,不指定podSelector:

apiVersion: v1
kind: Service
metadata:
  name: etcd-k8s
  namespace: kube-system
spec:
  type: ClusterIP
  ports:
  - name: port
    port: 2379
    protocol: TCP

创建同名的endpoints资源: etcd-k8s,将etcd节点的ip+port填进去:

apiVersion: v1
kind: Endpoints
metadata:
  name: etcd-k8s
  namespace: kube-system
subsets:
- addresses:
  - ip: 178.104.163.38
    nodeName: etc-master1
  - ip: 178.104.163.187
    nodeName: etc-master2
  - ip: 178.104.163.243
    nodeName: etc-master3
  ports:
  - name: port
    port: 2379
    protocol: TCP

这样,通过serviceName.namespace:port就可以在kubernetes集群内访问外部的etcd服务:

etcd-k8s.kube-system:2379
38 声望
21 粉丝
0 条评论
推荐阅读
cadvisor采集docker容器的DiskUsage指标--源码分析
一. DiskUsage指标cadvisor采集的docker容器的DiskUsage指标,包含:container_fs_inodes_freecontainer_fs_inodes_totalcontainer_fs_limit_bytescontainer_fs_usage_bytes {代码...} 二. 采集的过程docker容器...

a朋阅读 507

Helm3-安装RabbitMQ
最近在使用k8s搭建微服务时,发现需要手动修改yaml文件里面的pod name、pod image、svc name、ingress tls等等,非常麻烦,但是有了helm之后情况就不一样了,helm是k8s的包管理器,类似ubuntu的apt-get,centos的...

Awbeci阅读 9.5k

Kubernetes Gateway API 深入解读和落地指南
Kubernetes Gateway API 是 Kubernetes 1.18 版本引入的一种新的 API 规范,是 Kubernetes 官方正在开发的新的 API,Ingress 是 Kubernetes 已有的 API。Gateway API 会成为 Ingress 的下一代替代方案。Gateway A...

Rainbond2阅读 417

Jvm调优与微服务资源分配
在没有接触微服务之前,我们的java程序一般都部署在WebLogic、Tomcat这类应用服务器上,这些应用服务器本身也是基于Jvm虚拟机的。一般我们统一对应用服务器做Jvm参数调优(分配多大内存,线程池限制等),而不用...

KerryWu阅读 6.1k

K8S-使用Helm安装RabbitMQ和Redis的总结
记得去年2021上半年的时候自学了k8s并且使用helm安装了rabbitmq和redis,可以在开发、测试和生产环境上用起来,但是下半年之后就没有用,再拾起来的时候发现好多知识点都忘了,这篇文章就是总结使用helm安装rabbm...

Awbeci1阅读 1.9k

Kubernetes v1.27 新特性一览
Kubernetes v1.27 是 2023 年的第一个大版本更新,包含了近 60 项主要的更新。 而 1.26 只有 37 项,所以这个版本可以说是一个变化非常显著的版本了。

张晋涛1阅读 1.1k

封面图
实战:用“廉价”的NFS作为K8S后端存储
大家都知道,NFS是一种基于网络的文件系统协议,允许在不同的机器之间共享文件系统资源。在K8S中,可以使用NFS作为后端存储,以提供持久化存储和共享存储卷。但是否适合在生产环境使用NFS作为后端存储,这取决于...

不背锅运维2阅读 722

38 声望
21 粉丝
宣传栏