DigitalOcean的新型 DOKS(DigitalOcean Kubernetes)路由代理是一个用于在 Kubernetes 工作节点上配置静态路由的托管组件。它直接响应了用户对其前身——静态路由操作员的反馈,并引入了新功能以增强路由的灵活性。尽管 DOKS 路由代理是一个托管组件,但对用户而言,它并不会产生任何额外费用。
DOKS 路由代理的关键特性
1、通过自定义资源管理静态路由
DOKS 路由代理使用户能够使用专门的 Kubernetes 自定义资源在其 Kubernetes 工作节点上配置 IP 路由。这对于 VPN 设置或通过特定网关节点传输出口流量尤其有用。
示例配置:
apiVersion: networking.doks.digitalocean.com/v1alpha1
kind: Route
metadata:
name: basic
spec:
destinations:
- "1.2.3.4/5" # 要通过指定网关路由的网络
gateways:
- "10.114.0.3" # 网关 IP
2、支持多个网关和 ECMP
路由代理支持多个网关,并自动配置 ECMP(等价多路径)路由以在它们之间分配流量。
示例配置:
apiVersion: networking.doks.digitalocean.com/v1alpha1
kind: Route
metadata:
name: basic
spec:
destinations:
- "1.2.3.4/5"
gateways:
- "10.114.0.3"
- "10.114.0.4"
ECMP 的工作原理:
ECMP 根据源/目的 IP 和端口的哈希值,将流量分布在多个网关上。如果某个网关出现故障,Linux 内核将停止向其发送流量。路由代理每 30 秒对网关进行一次 ping 操作,以检测故障并在网关恢复时重新建立流量传输。注意:确保在网关上允许 ICMP 流量,以便健康检查能够正常进行。
3、覆盖默认路由
路由代理允许用户覆盖默认路由,而不会中断集群连接——这是最受请求的功能之一。
示例配置:
apiVersion: networking.doks.digitalocean.com/v1alpha1
kind: Route
metadata:
name: basic
spec:
destinations:
- "0.0.0.0/0" # 默认路由
gateways:
- "10.114.0.3"
- "10.114.0.4"
为了防止对 Kubernetes 组件造成影响,路由代理确保关键控制平面端点、元数据服务和 DNS 服务器通过工作节点 Droplet 的默认网关保持直接连接。
4、节点选择用于路由
路由可以使用 Kubernetes 标签选择器应用于特定节点,从而允许对网络配置进行细粒度的控制。
示例配置:
apiVersion: networking.doks.digitalocean.com/v1alpha1
kind: Route
metadata:
name: basic
spec:
destinations:
- "1.2.3.4/5"
gateways:
- "10.114.0.3"
nodeSelector:
nodeSelectorTerms:
- matchExpressions:
- key: doks.digitalocean.com/node-pool
operator: In
values:
- "worker-pool"
启用 DOKS 路由代理
路由代理可以通过 doctl 或 DigitalOcean API 启用或禁用。
示例命令:
doctl kubernetes cluster create --enable-routing-agent ...
doctl kubernetes cluster update --enable-routing-agent ...
对于 API 用户,字段结构如下:
{
"name": "prod-cluster-01",
"region": "nyc3",
"routing_agent": {
"enabled": true
}
}
静态出口 IP 的使用
借助 DOKS 路由代理和自行管理的 VPC 网关 Droplet,用户可以配置静态出口 IP,确保来自 Kubernetes 工作负载的出站流量源自可预测的 IP 地址。
为何这很重要:
- 允许列表: 通过允许列表已知 IP 来保护外部服务。
- 合规性: 为满足监管要求,保持一致的出口 IP。
即将推出:完全托管的 NAT网关
我们还在开发一个完全托管的 NAT 网关,它将提供一个更简单的解决方案,用于实现静态出口 IP。此功能在我们的路线图上,将于今年晚些时候推出。
简化静态路由管理
DOKS 路由代理简化了 Kubernetes 中的静态路由管理,提供了以下功能:
- 使用 Kubernetes 自定义资源创建自定义路由
- 使用 ECMP 在多个网关之间分配负载
- 覆盖默认路由而不中断集群连接
- 使用标签选择器进行节点特定路由
这些功能对于 VPN 设置、自定义出口路由和自行管理的 VPC 网关尤其有用。 如果需要了解 DigitalOcean Kubernetes 托管服务的更多产品细节,请联系我们。