Kubernetes基础(二十一)-k8s的服务发现机制

这篇具有很好参考价值的文章主要介绍了Kubernetes基础(二十一)-k8s的服务发现机制。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1 概述

Kubernetes(K8s)是一个强大的容器编排平台,提供了丰富的功能来简化容器化应用的管理。其中之一重要的特性就是服务发现机制,它使得应用程序能够在K8s集群中动态地发现和访问其他服务。本文将深入研究K8s中的服务发现机制,探讨其原理、使用方法以及通过详细的示例演示其工作过程。

1.1 什么是服务发现?

服务发现是指系统中的各个组件如何找到并与彼此通信的过程。在容器编排平台中,服务发现变得尤为重要,因为容器化应用通常包含多个微服务,它们可能会以动态的方式进行扩展或缩减。服务发现机制允许这些微服务相互发现和通信,从而构建了弹性、可伸缩的应用。

Kubernetes通过一系列核心对象和机制提供了强大的服务发现功能,使得容器能够在集群中自动发现其他服务,而不需要硬编码服务的地址和端口。

1.2 Kubernetes服务发现的核心对象

在Kubernetes中,服务发现主要通过以下几个核心对象实现:

1.2.1 Service(服务)

Service是K8s中用于定义服务的对象,它为一组Pod提供一个稳定的网络入口,通过标签选择器将流量引导到这些Pod。Service的IP地址和端口是稳定的,其他服务可以通过该IP地址和端口访问服务。例如:

apiVersion: v1
kind: Service
metadata:
  name: backend-service
spec:
  selector:
    app: backend
  ports:
    - protocol: TCP
      port: 8080
      targetPort: 8080

上述Service定义了一个名为backend-service的服务,选择了标签为app=backend的所有Pod,并将流量引导到它们的8080端口。

1.2.2 Endpoint(终端点)

Endpoint是Service背后真实运行应用程序的Pod的地址和端口的集合。K8s通过Endpoints对象动态地管理Service的后端Pod。例如:

kubectl get endpoints backend-service

上述命令的输出可能如下所示:

NAME             ENDPOINTS                     AGE
backend-service   192.168.1.2:8080,192.168.1.3:8080,192.168.1.4:8080   1h

Endpoints列表了与backend-service相关联的Pod的IP地址和端口号。

1.2.3 DNS解析

K8s内置了一个DNS服务,允许在集群内使用域名进行服务发现。Service的名称将映射到DNS中,从而允许其他服务使用该域名来访问服务。例如,在一个Pod中,可以通过backend-service.default.svc.cluster.local来访问上述定义的backend-service

2 Kubernetes服务发现的工作原理

Kubernetes的服务发现机制工作原理如下:

  1. Pod注册: 当Pod启动时,它会向K8s API服务器注册自己的IP地址和端口号。
  2. Service创建: 创建一个Service对象时,K8s会为该服务分配一个Cluster IP,并为其创建一个DNS记录。
  3. Endpoint更新: K8s通过Label Selector将Service与匹配的Pod关联起来,并更新相应的Endpoints对象。
  4. DNS解析: 其他Pod可以通过Service名称或Endpoint的DNS记录来解析服务的IP地址。

2.1 Kubernetes服务发现测试

为了演示Kubernetes服务发现的工作过程,我们将创建一个简单的Web应用,包含前端(frontend)和后端(backend)服务。

步骤1:定义后端服务

apiVersion: apps/v1
kind: Deployment
metadata:
  name: backend
spec:
  replicas: 3
  selector:
    matchLabels:
      app: backend
  template:
    metadata:
      labels:
        app: backend
    spec:
      containers:
      - name: api-server
        image: my-backend-image:latest
        ports:
        - containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
  name: backend-service
spec:
  selector:
    app: backend
  ports:
    - protocol: TCP
      port: 8080
      targetPort: 8080

上述YAML文件定义了一个后端服务,包含3个Pod,它们被标记为app=backend。Service对象backend-service将流量引导到这些Pod的8080端口。

步骤2:定义前端服务

apiVersion: apps/v1
kind: Deployment
metadata:
  name: frontend
spec:
  replicas: 3
  selector:
    matchLabels:
      app: frontend
  template:
    metadata:
      labels:
        app: frontend
    spec:
      containers:
      - name: web-server
        image: my-frontend-image:latest
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: frontend-service
spec:
  selector:
    app: frontend
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80

上述YAML文件定义了一个前端服务,包含3个Pod,它们被标记为app=frontend。Service对象frontend-service将流量引导到这些Pod的80端口。

步骤3:验证服务发现

在一个Pod中,我们可以通过Service名称和DNS解析来访问后端服务。例如,我们可以在前端Pod中发起HTTP请求到后端服务:

kubectl run -i --tty --rm debug --image=alpine --restart=Never -- sh
# 在容器中执行以下命令
apk add curl
curl backend-service.default.svc.cluster.local:8080/api

这个例子演示了在Kubernetes集群中,前端服务通过DNS解析的方式发现并访问了后端服务。

2.2 Kubernetes服务发现的优势

Kubernetes服务发现机制带来了多重优势:文章来源地址https://www.toymoban.com/news/detail-828531.html

  1. 弹性和动态扩展: 服务发现使得新的Pod能够动态地加入或离开服务,而其他服务无需修改配置即可感知这些变化。
  2. 解耦服务: 通过Service对象,服务之间的通信不再依赖于具体的IP地址和端口号,而是通过Service名称和DNS解析进行,提高了服务的解耦性。
  3. 负载均衡: Service对象自动提供了负载均衡,将流量分发到后端Pod。这有助于确保各个Pod能够均匀地处理请求。
  4. DNS解析: Kubernetes内置了DNS服务,使得在集群内部使用域名进行服务发现变得十分方便。

到了这里,关于Kubernetes基础(二十一)-k8s的服务发现机制的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spring Cloud Gateway使用K8S (Kubernetes)的云原生服务发现

    Spring Cloud Gateway通常使用注册中心作为服务发现,但在Kubernetes里面,由于K8S已经集成了服务注册与发现功能,不必要再另外使用注册中心了,而且,还可以使用K8S的服务监控对服务进行监控。 本来按照网上教程,升级到最新版的springboot3.x,结果发现无法发现服务。后来按着

    2024年04月22日
    浏览(47)
  • Kubernetes基础(二十二)-K8S的PV/PVC/StorageClass详解

    先来个 一句话总结 :PV、PVC是K8S用来做存储管理的资源对象,它们让存储资源的使用变得 可控 ,从而保障系统的稳定性、可靠性。StorageClass则是为了减少人工的工作量而去 自动化创建 PV的组件。所有Pod使用存储只有一个原则: 先规划  →  后申请  →  再使用 。 1.1 PV概念

    2024年02月20日
    浏览(51)
  • 【Spring Cloud Kubernetes】使用k8s原生service实现服务注册和发现

    @TOC 现在微服务开发模式应用的越来越广泛,注册中心 Eureka 也逐渐被其它注册中心产品替代,比如阿里出品的 Nacos 。随着云原生相关技术的普及, k8s 迅猛发展,我们把 K8s 中的 Pod 暴露给外部访问,通过少了 Service ,这也是今天的主角。 有没有发现,其实 Service 已经解决了

    2024年02月12日
    浏览(85)
  • 【Kubernetes】第二十二篇 - k8s 部署 MySQL 服务(secret、deployment、service)

    上一篇,介绍基于 k8s 项目部署流程设计; 本篇,介绍 MySQL 服务的部署; 部署 MySQL 可以为指定 node 添加污点,专门用于 mysql 部署(当前只有一个节点,不考虑); 为了保证mysql容器重启时数据不会丢失:创建 mysql 数据目录,用于存储 mysql 数据,实现 MySQL 数据的持久化;

    2024年02月03日
    浏览(59)
  • Kubernetes(k8s)安全机制

    目录 一、kubernetes安全机制 二、Authentication认证 1、用户分类 1.1、需要被认证的访问类型 1.2、安全性说明 1.3、证书颁发 1.4、Service Account 1.5、Secret 与 SA 的关系 1.6、Service Account (SA)中包含三个部分  2、kubeconfig文件 三、Authorization授权 3.1、RBAC 3.2、示例 3.3、Resources 四、准入

    2024年02月15日
    浏览(47)
  • 云原生Kubernetes:K8S安全机制

    目录 一、理论 1.K8S安全机制 2.Authentication认证 3.Authorization授权 4.Admission Control准入控制 5.User访问案例 6.ServiceAccount访问案例 二、实验 1.Admission Control准入控制 2.User访问案例 3.ServiceAccount访问案例 三、问题 1.生成资源报错 2.镜像拉取失败 四、总结 (1)概念 Kubernetes 作为一个分

    2024年02月07日
    浏览(69)
  • 【kubernetes】k8s中的选主机制

    1 为什么需要leader-election? 在集群中存在某种业务场景,一批相同功能的进程同时运行,但是同一时刻,只能有一个工作,只有当正在工作的进程异常时,才会由另一个进程进行接管。这种业务逻辑通常用于实现一主多从。 如果有人认为,传统应用需要部署多个通常是为了容

    2024年02月07日
    浏览(47)
  • Kubernetes(K8s)从入门到精通系列之十一:安装kubeadm

    一台兼容的 Linux 主机。Kubernetes 项目为基于 Debian 和 Red Hat 的 Linux 发行版以及一些不提供包管理器的发行版提供通用的指令。 每台机器 2 GB 或更多的 RAM(如果少于这个数字将会影响你应用的运行内存)。 CPU 2 核心及以上。 集群中的所有机器的网络彼此均能相互连接(公网和

    2024年02月14日
    浏览(50)
  • Kubernetes系列-如何在k8s集群中发现节点是主节点还是工作节点

    在K8s集群中,每个集群都有一组节点,其中一些是master节点,另一些是工作节点,那么如何区别哪些是master节点,哪些是工作节点?有三种判断方式: 1 进程方式 根据系统进程确认,运行 api-server 、 kube-controller-management 和 kube-scheduler 的 node 是 master 节点。运行kubelet和kube-p

    2024年02月13日
    浏览(46)
  • (四)k8s实战-服务发现

    1、配置文件 2、命令操作 3、代理 k8s 外部服务 实现方式: 编写 service 配置文件时,不指定 selector 属性 自己创建 endpoint endpoint 配置文件: 各环境访问名称统一 访问 k8s 集群外的其他服务 项目迁移 4、反向代理外部域名 5、常用类型 ClusterIP 只能在集群内部使用,不配置类型

    2024年02月11日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包