Service 拓扑

Service 拓扑可以让一个服务基于集群的 Node 拓扑进行流量路由。例如,一个服务可以指定流量是被优先路由到一个和客户端在同一个 Node 或者在同一可用区域的端点。

介绍

默认情况下,发往 ClusterIP 或者 NodePort 服务的流量可能会被路由到任意一个服务后端的地址上。从 Kubernetes 1.7 开始,可以将“外部”流量路由到节点上运行的 pod 上,但不支持 ClusterIP 服务,更复杂的拓扑 — 比如分区路由 — 也还不支持。通过允许 Service 创建者根据源 Node 和目的 Node 的标签来定义流量路由策略,Service 拓扑特性实现了服务流量的路由。

通过对源 Node 和目的 Node 标签的匹配,运营者可以使用任何符合运营者要求的度量值来指定彼此“较近”和“较远”的节点组。例如,对于在公有云上的运营者来说,更偏向于把流量控制在同一区域内,因为区域间的流量是有费用成本的,而区域内的流量没有。其它常用需求还包括把流量路由到由 DaemonSet 管理的本地 Pod 上,或者把保持流量在连接同一机架交换机的 Node 上,以获得低延时。

前提条件

为了启用拓扑感知服务路由功能,必须要满足以下一些前提条件:

Kubernetes 的版本不低于 1.17

Kube-proxy 运行在 iptables 模式或者 IPVS 模式

启用 端点切片功能

启用 Service 拓扑

要启用 Service 拓扑,就要给 kube-apiserver 和 kube-proxy 启用 ServiceTopology 功能:

--feature-gates="ServiceTopology=true"

使用 Service 拓扑

如果集群启用了 Service 拓扑功能后,就可以在 Service 配置中指定 topologyKeys 字段,从而控制 Service 的流量路由。此字段是 Node 标签的优先顺序字段,将用于在访问这个 Service 时对端点进行排序。流量会被定向到第一个标签值和源 Node 标签值相匹配的 Node。如果这个 Service 没有匹配的后端 Node,那么第二个标签会被使用做匹配,以此类推,直到没有标签。

如果没有匹配到,流量会被拒绝,就如同这个 Service 根本没有后端。这是根据有可用后端的第一个拓扑键来选择端点的。如果这个字段被配置了而没有后端可以匹配客户端拓扑,那么这个 Service 对那个客户端是没有后端的,链接应该是失败的。这个字段配置为 "*" 意味着任意拓扑。这个通配符值如果使用了,那么只有作为配置值列表中的最后一个才有用。

如果 topologyKeys 没有指定或者为空,就没有启用这个拓扑功能。

一个集群中,其 Node 的标签被打为其主机名,区域名和地区名。那么就可以设置 Service 的 topologyKeys 的值,像下面的做法一样定向流量了。

只定向到同一个 Node 上的端点,Node 上没有端点存在时就失败:配置 ["kubernetes.io/hostname"]。

偏向定向到同一个 Node 上的端点,回退同一区域的端点上,然后是同一地区,其它情况下就失败:配置 ["kubernetes.io/hostname", "topology.kubernetes.io/zone", "topology.kubernetes.io/region"]。这或许很有用,例如,数据局部性很重要的情况下。

偏向于同一区域,但如果此区域中没有可用的终结点,则回退到任何可用的终结点:配置["topology.kubernetes.io/zone", "*"]。

约束条件

Service 拓扑和 externalTrafficPolicy=Local 是不兼容的,所以 Service 不能同时使用这两种特性。但是在同一个集群的不同 Service 上是可以分别使用这两种特性的,只要不在同一个 Service 上就可以。

有效的拓扑键目前只有:kubernetes.io/hostname,topology.kubernetes.io/zone 和 topology.kubernetes.io/region,但是未来会推广到其它的 Node 标签。

拓扑键必须是有效的标签,并且最多指定16个。

通配符:"*",如果要用,那必须是拓扑键值的最后一个值。

如何获取k8s拓扑_k8s从安装到精通--Service 拓扑介绍相关推荐

  1. 【K8S】K8S 1.18.2安装dashboard(基于kubernetes-dashboard 2.0.0版本)

    写在前面 K8S集群部署成功了,如何对集群进行可视化管理呢?别着急,接下来,我们一起搭建kubernetes-dashboard来解决这个问题. 有关K8S集群的安装可以参考<[K8S]基于单M ...

  2. Centos7国内环境下安装kubeadm、kubelet、kubectl并建立k8s集群、安装gitlab,测试spring boot 项目的CICD

    一.建立k8s集群 1.官网安装: 安装kubeadm 安装k8s集群.安装k8s高可用集群 2.开始 1.防火墙 关闭防火墙: systemctl stop firewalld.service. 开 ...

  3. 【网址收藏】k8s中helm方式安装postgresql及pgadmin

    k8s中helm方式安装postgresql及pgadmin 安装命令: $ helm repo add runix https://helm.runix.net/ $ helm install my ...

  4. 深入玩转K8S之使用kubeadm安装Kubernetes v1.10以及常见问题解答

    原文链接:http://blog.51cto.com/devingeng/2096495 关于K8S: Kubernetes是Google开源的容器集群管理系统.它构建于docker技术之上,为容器化 ...

  5. 二进制安装K8S - NODE 节点的安装

    二进制安装K8S - NODE 节点的安装 安装系统 Linux node02 3.10.0-1062.el7.x86_64 #1 SMP Wed Aug 7 18:08:02 UTC 2019 x8 ...

  6. Kubernetes(K8s)集群安装部署

    Kubernetes(K8s)集群安装 Kubernetes(K8s)集群安装 1 .基本环境配置 1.1.Kubernetes集群规划 1.2.基础环境配置(所有节点) 1.2.1.Host文件修改 ...

  7. k8s各版本离线安装部署教程

    k8s各版本离线安装部署教程 文件名称 版本号 linux核心 docker版本 20.10.9 x86,amd64 k8s版本 v1.22.4 x86,amd64 kuboard v3 x86,am ...

  8. centos7 下google Kubernetes(k8s)集群安装部署

    centos7 下google Kubernetes(k8s)集群安装部署 简介 安装环境 安装前准备 ECTD集群配置 命令含义: master节点配置 1.安装kubernetes和etcd 2. ...

  9. php7安装xhprof,PHP 7.1安装xhprof进行性能分析的介绍

    这篇文章主要介绍了关于PHP 7.1安装xhprof进行性能分析的介绍,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 安装扩展 该 xhprof扩展版本是从 https://githu ...

最新文章

  1. 'imread' was not declared in this scope
  2. AndroidStudio 生成Jar并混淆
  3. C语言基础排序算法-选择排序
  4. 云计算之路-黎明前的黑暗:20130424网站故障经过
  5. linux服务器 top 查看 内存占用详情
  6. Android微信跳一跳,自动跳App实现
  7. PHP 使网站进行跨域访问
  8. python下绘制折线图
  9. 【报告分享】2021年中国人工智能产业研究报告:数字经济时代的产业升级探索.pdf(附下载链接)...
  10. 第20本:《拖延心理学》
  11. Scrapy框架学习(二)
  12. 先搞定SLAM,再谈如何抓住下一代互联网产业爆发点!
  13. Jenkins+Spring Boot构建部署
  14. algorithm头文件中的函数:remove()与remove_if() 函数,……
  15. DSP 2812: 使用C++封装外设时钟控制
  16. 闹钟函数alarm()的解释与实践
  17. python算法之lowb排序三人组(冒泡排序,插入排序,选择排序)
  18. VMware虚拟机与windows主机之间相互复制粘贴
  19. CMDN CLUB#27期:移动教育主题沙龙PPT分享
  20. Soul瞬间发布长录音教程

热门文章

  1. mysql 减去_MySql进阶面试题
  2. iOS 推送 获取手机设备的 deviceToken
  3. Java - 泛型 ( Generic )
  4. 前台html基础标签7.6
  5. 今天小小的总结一下最近的小程序中的问题
  6. php uid gid,用户信息,函数介绍,PHP开源CMS系统帮助文档
  7. java代码中执行sql报错:java.sql.SQLException: ORA-00923: 未找到要求的 FROM 关键字
  8. vsftpd中文目录乱码的解决办法
  9. 检验学习笔记-寄生虫
  10. 天国近了(一) -- 揭穿OOP神话