当前位置: 首页 > news >正文

kubernetes的服务发现(二)

如前面的文章我们说了,kubernetes的服务发现是服务端发现模式。它有一个服务注册中心,使用DNS作为服务的注册表。每个集群都会运行一个DNS服务,默认是CoreDNS服务。每个服务都会在这个DNS中注册。注册的大致过程:
1、向kube-apiserver提交一个新服务对象的定义
2、创建服务对象,并分配它一个ClusterIP,保存服务对象数据到etcd中
3、DNS服务监听kube-apiserver,一旦有新服务对象创建就创建一个从服务对象名称映射到ClusterIP的域名记录。服务就是不需要主动去DNS中注册,靠DNS的控制器就能完成服务的自动注册。

一旦注册完成后,服务对象后面的Pod列表就会被更新。服务对象中的label selector字段与选择器中定义的标签相匹配的Pod就会纳入当前服务对象的Pod列表中。服务对象的选择控制器会持续扫描和服务对象的标签相匹配的Pod,然后更新到EndPoint对象中。

在kubernetes中,Pod列表对应一个EndPoint对象,这个对象负责保存一个和服务标签选择器相配匹的Pod列表。

每个Pod都要知道集群DNS服务地址,Pod容器的/etc/resolv.conf文件都被配置为使用集群的DNS进行解析。

在kubernetes中的DNS服务查询过程如下:
1、调用者向DNS服务发起域名(服务名称)查询,如果本地没有缓存就会被提交到DNS服务,DNS服务返回对应的ClusterIP。ClusterIP是服务对象的IP地址,并不是具体提供服务的Pod的IP地址。
2、通过返回的ClusterIP访问对应的Pod。kubernetes的每个节点(Node)上都有一个kube-proxy代理服务,这个代理会通过服务对象和Pod的对应关系创建iptables或IPVS路由规则,节点Node会基于这些规则将请求转发到具体的Pod上。

顺便提一下服务网格中边车代理(sidecar proxy),流量会首先被这个代理劫持,这是通过修改iptables路由规则来做到这一点的。其次服务网格也会监听集群内服务对象的变化情况,从而获得最的服务地址。最后一点是关于负载均衡,服务网络是基于服务对象而不是基于Pod的。它给服务对象前加上一层负载均衡,这样才能实现基于服务层面的流量管理。

相关文章:

  • (env: Windows,mp,1.06.2308310; lib: 3.2.4) uniapp微信小程序
  • 【S32DS报错】-3-提示J-Link GDB Server failed:Device name ‘S32K344‘ not recognised错误
  • 【CSP】202303-2_垦田计划Python实现
  • 图论——最小生成树
  • 黑马头条数据管理平台项目总结
  • Gateway:微服务架构中的关键组件
  • IntelliJ idea卡顿解决,我遇到的比较管用的方案
  • MindOpt APL:一款适合优化问题数学建模的编程语言
  • 集简云 x 零售企业丨快速集成有赞商城和微盛企微管家,实现私域运营自动化
  • Vue2学习(组件的使用)
  • 如何选择合适的运筹优化求解器?
  • JPA对数据库修改注意点
  • 界面控件DevExpress中文教程 - 如何用Office File API组件填充PDF表单
  • chrome安装jsonview
  • 等待和通知
  • 9月CHINA-PUB-OPENDAY技术沙龙——IPHONE
  • [译] 理解数组在 PHP 内部的实现(给PHP开发者的PHP源码-第四部分)
  • 0x05 Python数据分析,Anaconda八斩刀
  • AWS实战 - 利用IAM对S3做访问控制
  • Bytom交易说明(账户管理模式)
  • centos安装java运行环境jdk+tomcat
  •  D - 粉碎叛乱F - 其他起义
  • JavaScript 基础知识 - 入门篇(一)
  • Js基础知识(四) - js运行原理与机制
  • PHP变量
  • Sublime text 3 3103 注册码
  • sublime配置文件
  • Terraform入门 - 1. 安装Terraform
  • WebSocket使用
  • 从@property说起(二)当我们写下@property (nonatomic, weak) id obj时,我们究竟写了什么...
  • 番外篇1:在Windows环境下安装JDK
  • 前端每日实战:61# 视频演示如何用纯 CSS 创作一只咖啡壶
  • 浅谈Golang中select的用法
  • 容器服务kubernetes弹性伸缩高级用法
  • 吐槽Javascript系列二:数组中的splice和slice方法
  • 网络应用优化——时延与带宽
  • 在 Chrome DevTools 中调试 JavaScript 入门
  • 京东物流联手山西图灵打造智能供应链,让阅读更有趣 ...
  • ​Java并发新构件之Exchanger
  • ​渐进式Web应用PWA的未来
  • ​云纳万物 · 数皆有言|2021 七牛云战略发布会启幕,邀您赴约
  • # 日期待t_最值得等的SUV奥迪Q9:空间比MPV还大,或搭4.0T,香
  • # 再次尝试 连接失败_无线WiFi无法连接到网络怎么办【解决方法】
  • (31)对象的克隆
  • (4)logging(日志模块)
  • (C语言)共用体union的用法举例
  • (pojstep1.1.1)poj 1298(直叙式模拟)
  • (zt)最盛行的警世狂言(爆笑)
  • (保姆级教程)Mysql中索引、触发器、存储过程、存储函数的概念、作用,以及如何使用索引、存储过程,代码操作演示
  • (附源码)spring boot校园健康监测管理系统 毕业设计 151047
  • (经验分享)作为一名普通本科计算机专业学生,我大学四年到底走了多少弯路
  • (一)Spring Cloud 直击微服务作用、架构应用、hystrix降级
  • (一)UDP基本编程步骤
  • (转)c++ std::pair 与 std::make
  • (转)nsfocus-绿盟科技笔试题目