如何为 DigitalOcean 静态路由操作员设置故障转移

2024-09-07 04:36

本文主要是介绍如何为 DigitalOcean 静态路由操作员设置故障转移,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

静态路由操作器的主要目的是提供更大的灵活性,并在 Kubernetes 环境中控制网络流量。它使你能够根据应用程序的需求自定义路由配置,从而优化网络性能。该操作器作为 DaemonSet 部署,因此将在你的 DigitalOcean Managed Kubernetes 集群的每个节点上运行。

在本教程中,你将学习如何根据 CRD 规范管理每个工作节点的路由表,并设置故障转移网关。

本教程的主要目标是演示如何根据 CRD 规范管理每个工作节点的路由表,并配置故障转移网关。

准备工作

  • 你可以访问并且正常运行的 DigitalOcean 托管 Kubernetes 集群。
  • 在本地计算机上安装了 Kubectl CLI,并已配置为指向你的 DigitalOcean 托管 Kubernetes 集群。
  • 已配置并运行的 NAT GW Droplet(版本 2 或更高),详情请参见此处。

你需要创建一个系统来检测网关 Droplet 中的故障,该系统应符合你的需求,确保清晰准确的检测,并将误报率降至最低。可以使用 Prometheus 或 Nagios 等监控服务,在 Droplet 上设置健康检查端点,或使用 Alertmanager 等警报工具进行通知。为此,你可以使用我们市场中的监控堆栈。

注意:确保你的 NAT 网关 Droplet 在与你的 Kubernetes 集群相同的 VPC 中创建。

以下是架构图:

部署 Kubernetes 静态路由操作器

使用 kubectl 将最新版本的静态路由操作器部署到你的 DigitalOcean Managed Kubernetes 集群:

kubectl apply -f https://raw.githubusercontent.com/digitalocean/k8s-staticroute-operator/main/releases/v1/k8s-staticroute-operator-v1.0.0.yaml

注意:你可以从 k8s-staticroute-operator GitHub repo 的发布路径中检查最新版本。

检查 Operator Pod 是否已启动并正在运行:

让我们验证一下 Operator Pod 是否已启动并正在运行。

``bash kubectl get staticroutes -o wide -n staticroutes

The output looks similar to the below:

[secondary_label Output]

NAME AGE DESTINATIONS GATEWAY static-route-ifconfig.me 119s ["XX.XX.XX.XX"] XX.XX.XX.XX static-route-ipinfo.io 111s ["XX.XX.XX.XX"] XX.XX.XX.XX

现在我们检查一下操作员日志,应该没有报告任何异常:

kubectl logs -f ds/k8s-staticroute-operator -n static-routes

你应该观察到以下输出:


Output
Found 2 pods, using pod/k8s-staticroute-operator-498vv
[2023-05-15 14:12:32,282] kopf._core.reactor.r [DEBUG   ] Starting Kopf 1.35.6.
[2023-05-15 14:12:32,282] kopf._core.engines.a [INFO    ] Initial authentication has been initiated.
[2023-05-15 14:12:32,283] kopf.activities.auth [DEBUG   ] Activity 'login_via_pykube' is invoked.
[2023-05-15 14:12:32,285] kopf.activities.auth [DEBUG   ] Pykube is configured in cluster with service account.
[2023-05-15 14:12:32,286] kopf.activities.auth [INFO    ] Activity 'login_via_pykube' succeeded.
[2023-05-15 14:12:32,286] kopf.activities.auth [DEBUG   ] Activity 'login_via_client' is invoked.
[2023-05-15 14:12:32,287] kopf.activities.auth [DEBUG   ] Client is configured in cluster with service account.
[2023-05-15 14:12:32,288] kopf.activities.auth [INFO    ] Activity 'login_via_client' succeeded.
[2023-05-15 14:12:32,288] kopf._core.engines.a [INFO    ] Initial authentication has finished.
[2023-05-15 14:12:32,328] kopf._cogs.clients.w [DEBUG   ] Starting the watch-stream for customresourcedefinitions.v1.apiextensions.k8s.io cluster-wide.
[2023-05-15 14:12:32,330] kopf._cogs.clients.w [DEBUG   ] Starting the watch-stream for staticroutes.v1.networking.digitalocean.com cluster-wide.

为了减轻网关故障的影响,建议在需要时准备一个备用网关 Droplet 以进行故障转移。尽管运营商目前不支持真正的高可用性 (HA),但执行故障转移有助于最大限度地缩短服务中断的时间。

注意:考虑到故障转移时所有运营商实例都已启动并正常运行。

假设你有一个指定的目标 IP 地址 34.160.111.145,它代表活动或主网关,其 IP 地址为 10.116.0.4,负责传输流量。这存储在 primary.yaml 文件中。

./primary.yaml

apiVersion: networking.digitalocean.com/v1
kind: StaticRoute
metadata:name: primary
spec:destinations: - "34.160.111.145"gateway: "10.116.0.4"

此外,你将拥有一个 IP 地址为 10.116.0.12 的备用或辅助网关,随时准备处理同一目标 IP 地址的流量。secondary.yaml 中的 StaticRoute 定义与主网关相同,唯一不同的是网关 IP 地址和对象名称。这个配置存储在 secondary.yaml 文件中。

./secondary.yaml

apiVersion: networking.digitalocean.com/v1
kind: StaticRoute
metadata:name: secondary
spec:destinations: - "34.160.111.145"gateway: "10.116.0.12"

实际的故障转移过程包括以下步骤:

  • 确定 IP 地址为 10.116.0.5 的活动网关发生故障。
  • 删除当前活动的静态路由。
  • 应用备用静态路由。

删除活动静态路由

现在让我们删除当前活动的静态路由。

kubectl delete -f primary.yaml

等待 30 到 60 秒,让每个操作员实例有足够的时间来处理对象删除;也就是说,通过从所有节点删除路由来做出响应。

应用备用静态路由

让我们使辅助静态路由处于活动状态。

 kubectl apply -f secondary.yaml

操作员应选择新的备用 StaticRoute 并输入相应的路由表条目。此后,故障转移完成。

注意:请避免使用 kubectl edit staticroute primary 等命令直接更新网关 IP 地址来修改现有的 StaticRoute,而仅修改 spec.gateway 字段。此操作目前不受支持,可能会导致失败。

测试设置

每个示例 CRD 都会创建一条静态路由,通向两个报告您的公共 IP 的网站 - ifconfig.me/ip 和 ipinfo.io/ip。典型的静态路由定义如下所示:


apiVersion: networking.digitalocean.com/v1
kind: StaticRoute
metadata:name: static-route-ifconfig.me
spec:destinations: - "34.160.111.145"gateway: "10.116.0.5"

要测试设置,请从示例位置下载示例清单:

ifconfig.me 和 ipinfo.io 的示例-

curl -O https://raw.githubusercontent.com/digitalocean/k8s-staticroute-operator/main/examples/static-route-ifconfig.me.yaml

curl -O https://raw.githubusercontent.com/digitalocean/k8s-staticroute-operator/main/examples/static-route-ipinfo.io.yaml

最后,测试 curl-test pod 是否针对每个路由回复 NAT 网关公共 IP:

kubectl exec -it curl-test -- curl ifconfig.me/ip
kubectl exec -it curl-test -- curl ipinfo.io/ip

你需要在故障转移测试期间使用相同的测试。在主网关 Droplet 出现故障时,测试结果应显示主 Droplet 的 NAT 网关公共 IP,而在辅助网关 Droplet/故障转移期间,测试结果应显示辅助 Droplet 的 NAT 网关公共 IP。

故障排除

  • 你需要检查 StaticRoute 对象:如果出现错误,首先在应用规则的每个节点的静态路由事件中查找错误。

kubectl get StaticRoute <static-route-name> -o yaml

  • 检查日志:为了深入挖掘,你可以检查静态路由操作员日志中的错误。

kubectl logs -f ds/k8s-staticroute-operator -n static-routes

清理

要删除操作员和相关资源,请运行以下 kubectl 命令(确保你使用的发布版本与安装步骤中相同):

kubectl delete -f deploy https://raw.githubusercontent.com/digitalocean/k8s-staticroute-operator/main/releases/v1/k8s-staticroute-operator-v1.0.0.yaml

注意:上述命令还将删除关联的命名空间(静态路由)。请确保先备份你的 CRD,以备日后需要。

输出类似于:

customresourcedefinition.apiextensions.k8s.io "staticroutes.networking.digitalocean.com" deleted
serviceaccount "k8s-staticroute-operator" deleted
clusterrole.rbac.authorization.k8s.io "k8s-staticroute-operator" deleted
clusterrolebinding.rbac.authorization.k8s.io "k8s-staticroute-operator" deleted
daemonset.apps "k8s-staticroute-operator" deleted

现在,如果你测试相同的 curl 命令,你将获得工作节点 IP 作为输出:

kubectl exec -it curl-test -- curl ifconfig.me/ip

kubectl exec -it curl-test -- curl ipinfo.io/ip 

现在检查工作节点的公共 IP:


kubectl get nodes -o wide

结论

尽管不完全支持真正的高可用性 (HA),但实施故障转移功能仍然是将网关故障影响降至最低的推荐方法。

通过在需要时准备好备用网关进行故障转移,组织可以显著减少服务中断的持续时间。

准备备用网关 Droplet 并确保在故障转移时实现平稳过渡至关重要。虽然具体实施可能因要求不同而有所变化,但优先考虑故障转移准备有助于保持服务的可靠性和不间断交付。

如果你希望了解更多关于 DigitalOcean Kubernetes 和 Droplet 云主机的相关产品信息,欢迎访问 DigitalOcean 中国区独家战略合作伙伴卓普云官网,与他们交流、咨询。

这篇关于如何为 DigitalOcean 静态路由操作员设置故障转移的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1144073

相关文章

idea设置快捷键风格方式

《idea设置快捷键风格方式》在IntelliJIDEA中设置快捷键风格,打开IDEA,进入设置页面,选择Keymap,从Keymaps下拉列表中选择或复制想要的快捷键风格,点击Apply和OK即可使... 目录idea设www.chinasem.cn置快捷键风格按照以下步骤进行总结idea设置快捷键pyth

MyBatis配置文件中最常用的设置

《MyBatis配置文件中最常用的设置》文章主要介绍了MyBatis配置的优化方法,包括引用外部的properties配置文件、配置外置以实现环境解耦、配置文件中最常用的6个核心设置以及三种常用的Ma... 目录MyBATis配置优化mybatis的配置中引用外部的propertis配置文件⚠️ 注意事项X

Java JAR 启动内存参数配置指南(从基础设置到性能优化)

《JavaJAR启动内存参数配置指南(从基础设置到性能优化)》在启动Java可执行JAR文件时,合理配置JVM内存参数是保障应用稳定性和性能的关键,本文将系统讲解如何通过命令行参数、环境变量等方式... 目录一、核心内存参数详解1.1 堆内存配置1.2 元空间配置(MetASPace)1.3 线程栈配置1.

C#借助Spire.XLS for .NET实现Excel工作表自动化样式设置

《C#借助Spire.XLSfor.NET实现Excel工作表自动化样式设置》作为C#开发者,我们经常需要处理Excel文件,本文将深入探讨如何利用C#代码,借助强大的Spire.XLSfor.N... 目录为什么需要自动化工作表样式使用 Spire.XLS for .NET 实现工作表整体样式设置样式配置

故障定位快人一步! 华为交换机排障命令汇总

《故障定位快人一步!华为交换机排障命令汇总》在使用华为交换机进行故障排查时,首先需要了解交换机的当前状态,通过执行基础命令,可以迅速获取到交换机的系统信息、接口状态以及配置情况等关键数据,为后续的故... 目录基础系统诊断接口与链路诊断L2切换排障L3路由与转发高级调试与日志性能、安全与扩展IT人无数次实战

Spring Gateway动态路由实现方案

《SpringGateway动态路由实现方案》本文主要介绍了SpringGateway动态路由实现方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随... 目录前沿何为路由RouteDefinitionRouteLocator工作流程动态路由实现尾巴前沿S

Vue实现路由守卫的示例代码

《Vue实现路由守卫的示例代码》Vue路由守卫是控制页面导航的钩子函数,主要用于鉴权、数据预加载等场景,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着... 目录一、概念二、类型三、实战一、概念路由守卫(Navigation Guards)本质上就是 在路

Java实现为PDF设置背景色和背景图片

《Java实现为PDF设置背景色和背景图片》在日常的文档处理中,PDF格式因其稳定性和跨平台兼容性而广受欢迎,本文将深入探讨如何利用Spire.PDFforJava库,以简洁高效的方式为你的PDF文档... 目录库介绍与安装步骤Java 给 PDF 设置背景颜色Java 给 PDF 设置背景图片总结在日常的

C#中通过Response.Headers设置自定义参数的代码示例

《C#中通过Response.Headers设置自定义参数的代码示例》:本文主要介绍C#中通过Response.Headers设置自定义响应头的方法,涵盖基础添加、安全校验、生产实践及调试技巧,强... 目录一、基础设置方法1. 直接添加自定义头2. 批量设置模式二、高级配置技巧1. 安全校验机制2. 类型

python库pydantic数据验证和设置管理库的用途

《python库pydantic数据验证和设置管理库的用途》pydantic是一个用于数据验证和设置管理的Python库,它主要利用Python类型注解来定义数据模型的结构和验证规则,本文给大家介绍p... 目录主要特点和用途:Field数值验证参数总结pydantic 是一个让你能够 confidentl