Kubernetns LB方案:无需云厂商的动态DNS和负载均衡
2020-08-31 07:14:03我们经常谈论托管Kubernetes或在云中运行的Kubernetes,但我们也在非云的环境(例如VMware或裸机 服务器 )上运行Kubernetes。
我们经常谈论托管Kubernetes或在云中运行的Kubernetes,但我们也在非云的环境(例如VMware或裸机服务器)上运行Kubernetes。
您可能还会听到很多有关云供应商集成的经典案例:您可以获取无密码凭据来访问托管服务,无需手动干预即可配置云负载均衡器,自动创建DNS条目等。
在本地运行时,通常无法使用这些集成功能,除非您使用的是受支持的云平台(如 OpenStack)。那么当在裸机或VM上运行时,如何获得Cloud Native环境的自动化优势?
所以让我们一步一步去看我们所想实现的功能。
本文中使用的所有清单均可在github项目中(获取。
与往常一样,我们使用GitOps和FluxCD将我们的资源部署到集群中,无论它们是在云上还是在本地。你可以参考跟多我们关于Flux的文章。
首先,您可以使用我们的GitOps模板,并根据需要对其进行自定义。kubectl如果更合适,您也可以直接部署清单 。
以下让我们深入研究我们的组件。
负载均衡
在云上运行kubernetns时,通常可以立即使用Load Balancer。在裸机或VM上运行时,负载均衡器保持pending不可用状态。
因此,首先,我们希望我们的服务类型LoadBalancer不处于pending不可用状态,并且能够在需要时提供动态负载平衡器,而无需手动配置haproxy或其他类似的服务。
metallb可以提供两种模式的虚拟负载均衡器的实现:
后者更简单,因为它可以在几乎任何二层网络上工作,而无需进一步配置。
在ARP模式下,metallb的配置非常简单。您只需要给它提供一些可以使用的IP就可以了。
配置清单可在此处或官方文件中找到。要配置所需的IP地址,可以使用ConfigMap完成。
metallb-config.yaml:

您还需要生成一个密钥来加密Metallb组件通信,您可以使用以下脚本来生成Kubernetes secret yaml:
部署完所有内容后,您应该在metallb-system namespace内看到相应的pods :
现在,我们准备测试负载均衡器。为此,我们直接进入下一个主题。
Ingress controller
在云上运行时,除了经典的4层负载均衡器以外,您有时还可以在GCP和AWS上获得7层负载均衡器(例如,应用程序负载均衡器)。但是它们的功能有限,而且成本效益不高,而且您经常需要一个ingress controller来管理来自Kubernetes集群的流量。
这个ingress controller通常通过服务类型为LoadBalancer在外部发布。这就是为什么我们以前的metallb部署会派上用场。
第一个也是最常用的ingress controller之一是nginx-ingress,它可以轻松地与Helm一起部署。
由于我们将Flux与Helm Operator结合使用,因此根据我们使用的Helm,您可以参考以下values.yaml配置:
因为我们将Flux与Helm Operator结合使用,所以我们使用了一个Helm Release 的版本,您可以从中得到values.yaml,以下展示了我们的配置:
没有什么特别之处,我们使用的是DaemonSet,默认情况下是使用的服务类型为LoadBalancer。
如果我们检查新部署的版本:
我们可以看到,我们的服务是LoadBalancer类型,外部IP是我们在之前metallb的ConfigMap中定义的。
让我们创建一个demo namespace并检查创建ingress时的行为:
nginx-ingress 能够在默认情况下发布服务,这意味着它可以向ingress对象报告负载平衡器IP地址:
我们可以看到,LoadBalancer IP地址已嵌入到ingress中。这是能够使用external DNS的要求之一,这也是我们的下一个主题。
External DNS
现在我们已经有了4层负载平衡器(metallb),它们可以将流量传送到群集中的7层负载平衡器(nginx-ingress),我们如何动态管理DNS?一个常用的工具是 external-dns(使Kubernetes Services和Ingress与DNS平台保持同步。
如果您正在使用一种广泛使用的DNS平台(AWS Route53或 Google Cloud DNS),这将非常简单易用。External DNS还支持其他DNS供应商,但是如果您没有使用直接支持的DNS供应商,您可能就会比较麻烦。
比方说,您的本地DNS由Active Directory管理,因为External DNS无法直接写入Active Directory DNS,所以最终导致DNS解析不可用。
那么我们如何才能获得动态DNS功能呢?当然,你可以使用一个通配符DNS记录并将其指向到nginx-ingress负载平衡器IP,这是一种方法。如果您只使用一个LoadBalancer作为集群的入口,但如果您希望使用HTTP或其他类型LoadBalancer服务以外的协议,则仍需要手动更新一些DNS记录。
另一个解决方案是为您的群集指定DNS zone。
External DNS支持CoreDNS作为后端,因此我们可以将active directory的DNS Zone指派给Kubernetes中运行的CoreDNS服务器。
注意事项
听起来很简单,但是当深入研究external-dns/CoreDNS部分时,我们注意到与External DNS一起使用的CoreDNS唯一受支持的后端是Etcd。所以我们需要一个Etcd集群。您可能还注意到readme依赖于etcd-operator,它现在已被弃用,而且它也不不支持加密与etcd的通信。
我们发布了最新指南。首先,我们将使用Cilium的etcd-operator来配置3个节点的etcd集群并生成TLS。
Etcd operator
首先,我们应用etcd的 Custom Resource Definition:(:
然后我们可以部署Etcd operator。
很快我们就可以得到etcd pod和secrets了:
然后,我们可以使用官方Helm chat部署CoreDNS 。
就像以前一样,我们的资源是*HelmRelease*(。如果需要values.yaml,您可以从中获取:
重要的几行如下:
我们正在安装并使用etcd secret与etcd进行TLS通信。
External DNS
最后,我们可以打包并安装external DNS。和往常一样,我们将使用官方的Helm chat(和HelmRelease(:
这里,与以前一样,我们提供了etcd TLS的secret名称和路径,以确保通信安全,并且我们启用了coredns。
这是我们的最终external-dns namespace:
如果您回头看一下我们的ingress:
让我们检查此ingress是否已被external dns接收并插入etcd数据库:
External DNS似乎正在发挥作用。现在,让我们看看是否可以直接从CoreDNS解析查询,因为它应该是从同一etcd服务器读取的。
CoreDNS正在监听NodePort服务,这意味着我们可以查询该服务上的任何节点NodePort:
53/UDP端口映射到端口31071/UDP。让我们选择一个随机节点:
并尝试使用以下方式进行DNS查询dig:
我们可以看到CoreDNS正在使用MetalLB负载均衡器IP进行回复。
快速启动并运行
在本指南中,我们配置了CoreDNS,External DNS,Nginx Ingress和MetalLB,以提供与Cloud架构一样的动态体验。如果您想快速入门,请查看我们的Flux github仓库地址,其中包含用于此演示的所有清单以及更多内容(。
原文:
两台台式电脑如何使用一根网线?
1、连线方法:电话入户线-->猫DSL口上-->路由器的线一头插在猫的 LAN 口上,另外一头插在路由器的WAN口上-->电脑(分别两条线都插在路由器的 LAN 口上). 2、路由器的设置方法:按照上面的顺序将网络设备和线路全部连接好后,将猫、路由器、电脑的电源全部打开后,接下来进行设置路由器,方法如下:打开ie输入192.168.1.1或192.168.0.1(因路由器厂商而定,说明书里有) 弹出对话框输入路由器用户名、密码,一般是admin(说明书里有) 进入控制页面(如有设置向导按照它来设置) 在web设置里会让你输入宽带账号和密码 (找到拨号方式,设置为:自动,以后打开电源,路由器就会自动拨号)并开启DHCP服务,ADSL需要选定PPPoE。 ADSL宽带是动态IP(有些路由器需要设置IP方式,动态?静态?需要你自己去拨打宽带客服核实) 在网参数里将ADSL宽带的DNS服务器地址也添加上(需要你拨打宽带客服咨询)设置完后确认就行了 插好设好后可以可以测试一下 PING,看是不是通了. 在运行里输入ping 192.168.1.1 -t 或ping 192.168.0.1 -t 具体不说了,会跳出来TTL=255或TTL=128或TTL=64 还有一点需要注意:在网上邻居---本地连接--属性--TCP/IP--属性里,设置成自动获取IP。 注:没有猫的小区宽带,就是网线直接连接路由器的WAN口,其他设置相同。
花生壳免费域名怎么申请?
是转别人的。 不是原创。 提前说明下。 希望对楼主有用。 出处是 不论你是否有没听说过花生壳这一软件,还是曾经用过花生壳 1.0 或 2.1 等版本;不管你是否申请过域名,还是至今不懂域名管理……这一切,都不要紧。 从现在开始,花生壳3系列版本的面世,将使域名注册和管理、动态域名解析等等事项轻而易举地驾驭于你手中。 花生壳3系列是一套完全免费的桌面式域名管理和动态域名解析( DDNS )等功能为一体的客户端软件。 花生壳客户端向用户提供全方位的桌面式域名管理以及动态域名解析服务。 用户无需通过IE浏览器,直接通过客户端使用所提供的各项服务,包括用户注册、域名查询、域名管理、 IP 工具以及域名诊断等各种服务;且通过树状结构方式可使用户对多达上百个域名进行方便管理,亦可自主添加二级域名,自由设置 A 记录(IP 指向)、MX 记录、CName(别名)、URL 重定向等,用户操作界面清晰简单。 拥有花生壳只需以下步骤: 第一步:下载和安装花生壳 第二步:注册花生护照 第三步:注册免费域名或顶级域名 一、下载和安装花生壳 请访问花生壳官方网站的页面下载花生壳安装程序。 安装花生壳程序:请参照如何安装花生壳(点击打开) 二、注册花生护照 运行花生壳客户端程序,如果您已经有花生护照,请直接登陆客户端;如果您还没有花生护照,请点击客户端主界面中的〔注册花生护照〕进行免费注册()。 阅读用户协议,然后点击 [ 我同意 ] : 按要求填写你要注册的用户名,以及用户名密码,点[下一步]: 填写密码保护问题(可要记住哦),点下一步: 至此,你已成功注册获得一个花生护照,我们强烈建议成功申请花生护照后填写护照完整资料,这是证明花生护照所有者的身份证明资料。 三、注册免费域名或顶级域名,并激活花生壳服务 注册免费域名或顶级域名 重新到 网站首页,用刚刚申请的花生护照登录,点击导航栏 “ 域名服务 ” ,选择 “ 申请免费域名 ” ,然后查询你要申请的免费域名是否可注册: 如果该域名还未被注册,你就可以拥有它啦,点击 “ 现在注册”: 提示注册申请成功,现在点击 “ 进入花生壳管理 ”: 激活花生壳服务 免费域名或顶级域名注册成功后还不能使用花生壳服务,必须要激活此域名的花生壳服务。 如何激活花生壳服务? 刚刚注册的域名并不会实时的显示在花生壳客户端,需要重新登陆花生壳客户端。 重新登陆后,刚才新注册的域名将会出现在客户端中。 域名记录只有激活了花生壳服务后,此域名记录才能真正的开始使用花生壳。 只有在域名记录前面出现了彩色的花生壳图标才说明此域名记录激活了花生壳服务。 选择你要激活花生壳的域名记录,点击鼠标右键选择[激活花生壳服务] 点击[激活] 阅读并同意协议后,选中单选框打勾,然后[下一步] 填写您的站点描述,点击[完成]。 刚激活的域名记录需要刷新花生壳客户端才能生效,因此点击Yes刷新花生壳客户端。 刷新后可以看到该域名记录前面出现一个彩色的花生壳图标,说明此域名记录已经激活成功。 现在您的域名已经可以使用花生壳服务了,如何知道花生壳服务是否真正的生效? 检查花生壳服务是否真正的生效 通过域名诊断功能,可以检测该域名记录的花生壳服务、A记录、MX记录和CName记录等是否真正的生效,判断域名是否可以正常使用的工具。 诊断结果显示: 如果出现诊断DNS服务器查询的IP和花生壳客户端的IP不一致时,会有两种可能。 用户没有把此域名记录激活花生壳服务。 参见:如何激活花生壳服务? 用户对此域名设置了A记录。 参见:如何设置A记录? 如果出现两个结果相同,用其他的方式检测本机所获得的公网IP和域名诊断的不一致的话。 说明用户的IP地址被电信运营商(ISP)做了NAT转发,这类问题请访问Oray论坛进行咨询。 如果通过以上的诊断,说明花生壳已经运行正常了,如果还是无法访问web、ftp等,请仔细检查相关非花生壳设置。 有其它问题的◥请网络HI我,或Q我.
花生壳动态域名如果断开会有什么影响
断后后花生壳的域名就无法实时解析到你的IP上了。 当你变更IP后,解析也相应的失效了。
发表评论