Kubernetes V1.17开启 拓扑感知服务路由
发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,Kubernetes V1.17开启 拓扑感知服务路由1、名词解释:拓扑域:表示在集群中某个节点,可操作区域,也就是拓扑域名。Endpoint: IP-Port 一般来说是Node当中pod的ip+p
千家信息网最后更新 2026年10月31日Kubernetes V1.17开启 拓扑感知服务路由
Kubernetes V1.17开启 拓扑感知服务路由
1、名词解释:
拓扑域:表示在集群中某个节点,可操作区域,也就是拓扑域名。Endpoint: IP-Port 一般来说是Node当中pod的ip+port。Service:一组依靠labelselector的pod,起到流量均衡分发管理的作用。2、给所有组件打开ServiceTopology和Endpointslice
集群版本在V1.17以上Kube-proxy 以iptables或IPVS模式运行(alpha阶段暂时只实现这两种模式)。Service K8S的service资源,关联一组endpoint,准发到某个endpoint。启用了Endpoint Slices给所有组件打开ServiceTopology和Endpointslice这两个Feature gate:--feature-gates=ServiceTopology=true,EndpointSlice=true 3、kube-apiserver 组件修改
kube-apiserver 前期启动OwnerReferencesPermissionEnforcement 插件请删除不然一直提示 Warning FailedToUpdateEndpointSlices 8m24s (x7 over 11m) endpoint-slice-controller (combined from similar events): Error updating Endpoint Slices for Service kube-system/kube-dns: Error creating EndpointSlice for Service kube-system/kube-dns: endpointslices.discovery.k8s.io "kube-dns-x8qmh" is forbidden: cannot set blockOwnerDeletion if an ownerReference refers to a resource you can't set finalizers on: , 4、更新配置文件及重启所有组件
5、验证endpointslices 是否正常
root@Qist:/opt/kube14# kubectl get endpointslicesNAME ADDRESSTYPE PORTS ENDPOINTS AGEkube-dns-kh6ls IPv4 53,9153,53 10.83.98.136,10.90.153.135 15mmetrics-server-gqgqm IPv4 443 10.93.92.195 15m6、 验证ServiceTopology
在 Service spec 里加上 topologyKeys 字段,表示该 Service 优先顺序选用的拓扑域列表,对应节点标签的 key;当访问此 Service 时,会找是否有 endpoint 有对应 topology key 的拓扑信息并且 value 跟当前节点也一样,如果是,那就选定此 topology key 作为当前转发的拓扑域,并且筛选出其余所有在这个拓扑域的 endpoint 来进行转发;如果没有找到任何 endpoint 在当前 topology key 对应拓扑域,就会尝试第二个 topology key,依此类推;如果遍历完所有 topology key 也没有匹配到 endpoint 就会拒绝转发,就像此 service 没有后端 endpoint 一样。有一个特殊的 topology key "*",它可以匹配所有 endpoint,如果 topologyKeys 包含了 *,它必须在列表末尾,通常是在没有匹配到合适的拓扑域来实现就近转发时,就打消就近转发的念头,可以转发到任意 endpoint 上。当前 topology key 支持以下可能的值(未来会增加更多):kubernetes.io/hostname: 节点的 hostname,通常将它放列表中第一个,表示如果本机有 endpoint 就直接转发到本机的 endpoint。topology.kubernetes.io/zone: 节点所在的可用区,通常将它放在 kubernetes.io/hostname 后面,表示如果本机没有对应 endpoint,就转发到当前可用区其它节点上的 endpoint(部分云厂商跨可用区通信会收取额外的流量费用)。topology.kubernetes.io/region: 表示节点所在的地域,表示转发到当前地域的 endpoint,这个用的应该会比较少,因为通常集群所有节点都只会在同一个地域,如果节点跨地域了,节点之间通信延时将会很高。*: 忽略拓扑域,匹配所有 endpoint,相当于一个保底策略,避免丢包,只能放在列表末尾。topologyKeys 与 externalTrafficPolicy=Local 不兼容,是互斥的,如果 externalTrafficPolicy 为 Local,就不能定义 topologyKeys,反之亦然。topology key 必须是合法的 label 格式,并且最多定义 16 个 key。# 以kube-dns 为例:---apiVersion: v1kind: Servicemetadata: name: kube-dns namespace: kube-system labels: k8s-app: kube-dns kubernetes.io/cluster-service: "true" addonmanager.kubernetes.io/mode: Reconcile kubernetes.io/name: "CoreDNS"spec: selector: k8s-app: kube-dns clusterIP: 192.66.0.2 topologyKeys: ["kubernetes.io/hostname", "topology.kubernetes.io/zone", "*"] # 添加参数 ports: - name: dns port: 53 protocol: UDP - name: dns-tcp port: 53 protocol: TCP - name: metrics port: 9153 protocol: TCP# 验证ServiceTopology 是否生效进去node 节点无kube-dns 容器节点root@k8s-master-01:~# ipvsadm -Ln | grep :53TCP 10.66.0.2:53 rr -> 10.83.98.136:53 Masq 1 0 0 -> 10.90.153.135:53 Masq 1 0 0UDP 10.66.0.2:53 rr -> 10.83.98.136:53 Masq 1 0 0 -> 10.90.153.135:53 Masq 1 0 0# 有kube-dns 容器节点[root@k8s-node-09 ~]# ipvsadm -Ln| grep :53TCP 10.66.0.2:53 rr -> 10.90.153.135:53 Masq 1 0 0UDP 10.66.0.2:53 rr -> 10.90.153.135:53 Masq 1 0 0# 直接就是当前node 节点容器IP
节点
拓扑
地域
组件
容器
集群
本机
验证
所在
末尾
模式
流量
常将
通信
路由
合法
合适
特殊
均衡
依此类推
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
西安纸贵互联网科技有限公司
互联网科技工作委员会副主任毛军
云信互联网科技有限公司
奇酷互联网络科技
科技创新互联网企业
融势互联网科技
大白互联网科技
互联网科技有限公司 翻译
卓越科技互联网 招聘
美国互联网前沿科技
互联网科技公司的市场部门
深圳前海聚择互联网科技有限公司
世界互联网科技公司市值排名
江苏苏星互联网科技有限公司
启辰互联网科技
广州百诚互联网科技有限公司官网
北京品多多互联网科技有限公司
互联网科技大会大佬
杭州科技互联网公司有哪些
恒生互联网科技趋势
云之行互联网科技
互联网核心科技是什么
远信互联网科技
创业天下互联网科技有限公司
千方科技属于互联网企业吗
苏州铭阳互联网科技有限公司
开一家科技互联网公司需要多少钱
互联网科技人工智能实验室
深圳艾果互联网通讯科技
网互联网络科技