- VisualStudio2022插件的安装及使用-编程手把手系列文章
- pprof-在现网场景怎么用
- C#实现的下拉多选框,下拉多选树,多级节点
- 【学习笔记】基础数据结构:猫树
Pod需要使用远程存储的PV,由同k8s集群内的服务提供的存储服务。一开始的做法是:
但因为走clusterIP时,经过多次转换:
导致了最终client写PV的性能损失严重.
既然走容器网络导致性能差,修改服务端的部署形式为 hostNetwork,绕过容器网络。但带来一个问题,存储服务可能切换节点,导致 client 端无法正常重连(切换节点带来的数据不一致的问题能处理),这一点不能接受.
新的方案: 为服务端创建一个 Headless Service,针对 Deployment 类型的负载Headless Service会解析提到所有Pod的 IP 地址列表具体见官方文档,那唯一的问题还剩下 client 重连时,这个域名怎么解析?因为使用的驱动是内核提供的,内核中无法直接使用glibc的域名解析功能,即无法使用外部的DNS Server,即使是/etc/resolv.conf中指定的.
通过调查了解到内核提供了request-key机制,可以从内核调用到用户态的应用。request-key本来是用于内核和用户态之间的安全token管理的,后也扩展用于其他用途。以内核解析域名来说,大概流程如下:
但还有新的问题:key.dns_resolver只能使用/etc/hosts和/etc/resolv.conf解析域名,不支持从额外的dns server解析域名.
所有的方法都要通过修改 /etc/request-key.conf配置文件指定自己的程序进行解析.
后面的流程有以下方案:
自己写脚本,通过/etc/request-key.conf配置文件指定自己的脚本,通过kubectl去查询 Pod IP地址,调用/sbin/request-key将结果写回.
问题:C语言中对字符串的处理在dns_resolver和request-key两个模块之间发生了冲突,使用/sbin/request-key写入的IP地址被dns_resolver内核模块认为非法,这个方案行不通,详见QA部分解释.
通过C调用key-utils的SDK,可以实现同样的功能,但基本上照抄key.dns_resolver的实现。突然想到可以用Python调用so库的方法,验证了下基本可行。但又有一个新的问题:
Python标准库中的域名解析同样不支持指定域名,想要支持就要引入第3方的dns模块.
最终方案比较:
方案 | 优点 | 缺点 |
---|---|---|
写Python调用key-utils的SDK so完成IP写回内核 | 灵活控制对coreDNS的访问。 | 需要调用第3方的dns解析服务、或者直接访问 kube-apiserver获取IP,加重kube-apiserver的负担。 |
shell脚本通过unshare mount namespace 隔离,生成临时的/etc/resolv.conf,调用/sbin/key.dns_resolver实现 | 不用访问 kube-apsierver,根据kubelet的配置可获取coreDNS的地址,不用感知具体的DNS解析细节。更通用,其他的 headless也可以用 | 无法控制调用频率 |
考虑这种异常切换解析并不会太频繁,最终选择了第2种方案。mount namespace 可以方便地通过 unshare -m 来实现.
Q:/sbin/key.dns_resolver支持从/etc/hosts解析域名,为什么不修改 /etc/hosts? A:/etc/hosts是全局配置,修改冲突不容易控制,出现冲突时影响不可控.
Q:为什么不能修改/etc/resolv.conf配置,指向coreDNS? A:虽然coreDNS也支持将非k8s域名转向宿主中/etc/resolv.conf中的指定的DNS,但这种机制依赖 coreDNS,对整个系统的影响过大.
Q: 为什么不用/sbin/request-key回写解析到的IP地址? A:这种实现了验证了,发现request-key和dns_resolver的实现关于C中字符串的处理有不一致的地方,前者payload长度未包含\0,后者要求包含。这一点是通过bpf钩子确认的.
问题的解决过程中尝试了多种方案,最终最适合的方案巧妙运用了命名空间隔离机制,这也是了解容器底层原理的好处。 同时带来一点关于命名空间的用途回顾:
最后此篇关于k8s实践——命名空间隔离+request-key机制解决CSI内核态域名解析的文章就讲到这里了,如果你想了解更多关于k8s实践——命名空间隔离+request-key机制解决CSI内核态域名解析的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我有一个网站正在Firefox和Chrome中返回一些奇怪的警告消息和错误。 Firefox返回以下错误: GET http://fonts.googleapis.com/css?family=Var
我正在使用 Facebook 登录从登录我的网站的用户那里获取数据,并且我正在使用 console.log 函数。 控制台向我显示的唯一内容如下: 犯罪现场调查/待定_ & 犯罪现场调查/_待定 这是
我正在使用 kubernetes v1.16.10 与 Ceph 13.2.2 模仿版 通过 进行动态卷配置的集群ceph-csi . 但后来我找到了 ceph-rbd Ceph RBD (kuber
在 Swift 的 Xcode 6 beta 3 中加载带有 png 图像的 UIImages 时,如下所示: PipsImg = (UIImage(named: "Die-1")) 或
kubelet分析-csi plugin注册源码分析。csi driver注册源码分析。kubelet注册csi driver的相关功能代码与kubelet的pluginManager有关,所以接下来
我开发了一个 PhoneGap 应用程序,我打算将其部署到我的 BlackBerry Bold 9700。我的开发工具包括 NotePad++、Apache Ant、Sun JDK 和 BlackBe
我正在使用 jQuery 导入外部 html 文件,如下所示: $("#header").load("header.html"); $("#content").load("home.html"); $
当你运行 csi.exe/? (安装了 Visual Studio 2015 更新 2),您将获得以下语法 Microsoft (R) Visual C# Interactive Compiler v
kubelet分析-csi driver注册分析-Node Driver Registrar源码分析。node-driver-registrar是一个sidecar容器,通过Kubelet的插件注册机
如何使用 PHP 读取 ANSI 转义码 CSI 6n 的结果? (DSR – 设备状态报告:https://en.wikipedia.org/wiki/ANSI_escape_code#CSI_co
根据 the documentation : A PersistentVolume (PV) is a piece of storage in the cluster that has been pr
从应用程序开发上下文的角度来看,是否可以通过此智能设备的 WiFi 卡从 WiFi 接入点获取信道状态信息 (CSI) 信息?我想使用这些信息为我所在大学的室内定位项目创建一个 CSI - 指纹识别系
在 C# 交互式(作为 Visual Studio 2019 或独立的一部分)中,我想使用 C# 编写类似的代码: var s = "abcdef"; var s1 = s[2..4]; 这给出了以下
我有我的自定义 CSI 驱动程序。我想在我的卷附件 list 文件中添加一个自定义注释,我希望我的 CSI 驱动程序相应地解析和处理它。 如何将我的注释传递给 CSI 驱动程序并在 golang 代码
为什么函数 compose 定义在解释器 csi 而不是编译器 csc 中?我知道我可以很容易地自己定义它,但我只是想知道为什么会有这样的差异。 最佳答案 compose 过程来自 data-stru
我已经开始使用 c# interactive 了。在 Visual Studio 中,我能够使用以下代码创建一些窗口: #r "PresentationFramework" using System.
我看过一些研究论文,其中 CSI(信道状态信息)被用于人类事件识别(运动)或有时用于获得室内定位。 现在,我想在我的笔记本电脑(Ubuntu 安装为 VM)和“Intel 双频无线 AC-3165”W
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 3个月前关闭。 Improve th
按照此处概述的方式更新我的 CSI Secrets Store 驱动程序: https://learn.microsoft.com/en-us/azure/aks/csi-secrets-store-
我们正在使用 AKS、Azure Key Vault,并且目前使用 CSI 驱动程序在创建容器时将 secret 数据传递到我们的容器中(通过 CSI 驱动程序)。 CSI 驱动程序的文档似乎表明它支
我是一名优秀的程序员,十分优秀!