Kubernetes V1.17开启 拓扑感知服务路由
发表于:2025-01-23 作者:千家信息网编辑
千家信息网最后更新 2025年01月23日,Kubernetes V1.17开启 拓扑感知服务路由1、名词解释:拓扑域:表示在集群中某个节点,可操作区域,也就是拓扑域名。Endpoint: IP-Port 一般来说是Node当中pod的ip+p
千家信息网最后更新 2025年01月23日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 15m
6、 验证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安全错误
数据库的锁怎样保障安全
数据库关系模式中的主键
如何使用命令行进入达梦数据库
对象资源管理器内没有数据库选项
长沙知名软件开发公司
软件开发转教育培训
系统软件开发有哪些
软件开发主要是干什么
重庆网络安全培训服务
BHX99-MCS嵌入式服务器
护苗网络安全教育课5
学校监控服务器哪个质量好
新华互联网科技教育
系统软件开发月报模板
企业网络安全海报手绘
网络安全法如何评估
东营杉涵网络技术有限公司
人工智能与网络技术的关系
软件开发入门工资
深圳市袋袋盈网络技术
软件开发最新发展方向
自己搭建mqtt服务器要求
中国互联网科技超越
实验室网络技术服务合同
网络安全学教育知识大全
卫健委网络安全行业需求
澳大利亚未成年人网络安全
实际开发中数据库隔离级别
配货站开票软件开发
中小学网络安全法知识答题
e家路由器虚拟服务器怎么设置