向工作程序节点添加静态路由
通过对 IBM Cloud® Kubernetes Service 集群启用静态路由附加组件,在工作程序节点上创建静态路由。
关于静态路由
配置集群网络以通过专用网络与其他网络通信时,可能需要在工作程序节点上添加定制静态路由。 静态路由允许工作程序节点通过 VPN 或网关设备将响应包从集群成功地重新路由到本地数据中心内的 IP 地址。
例如,您可以使用 VPN 通过专用网络将集群连接到本地数据中心。 此外,专用 VPN 连接会在集群与数据中心之间的请求中保留源 IP 地址。
当本地服务向集群中的应用程序发送请求时,应用程序 pod 所在的工作程序节点会由于反向路径过滤 (RPF) 而删除响应。 RPF 是 Linux 内核功能部件,用于删除对工作程序节点的路由表中未列出的 IP 地址的任何响应。 由于工作程序节点无法路由请求中保留的本地 IP 地址,因此将删除响应。
在这种情况下,您可以创建静态路由,以便当来自请求的源 IP 地址来自内部部署子网之一时,响应将改为发送到 VPN 网关 IP 地址。 通过将此静态路由添加到工作程序节点的路由表,可确保执行以下操作:
- 由于存在指向本地 IP 地址的路由规则,因此不会由于 RPF 而删除响应包。
- 响应包首先通过 VPN 网关 IP 地址成功路由,然后重新路由到本地 IP 地址。
静态路由集群附加组件只能用于应用和管理静态路由。 您负责配置和管理自己的 VPN,网关设备或 IBM Cloud® Direct Link 连接。
启用静态路由附加组件
要开始使用 IBM Cloud Kubernetes Service中的静态路由,请启用静态路由附加组件。
准备工作
从控制台启用静态路由附加组件
要使用 IBM Cloud 控制台,请执行以下步骤。
- 在 集群仪表板中,单击要安装静态路由附加组件的集群的名称。
- 在 静态路由 卡上,单击 安装。
- 再次单击安装。
- 在 静态路由 卡上,验证是否列出了附加组件。
使用 CLI 启用静态路由附加组件
要使用 CLI,请执行以下步骤。
-
启用
static-route
附加组件。ibmcloud ks cluster addon enable static-route --cluster <cluster_name_or_ID>
-
验证静态路由附加组件的状态是否为
Addon Ready
。ibmcloud ks cluster addon ls --cluster <cluster_name_or_ID>
示例输出
Name Version Health State Health Status static-route 1.0.0 normal Addon Ready
创建静态路由
启用静态路由附加组件 后,可以为定制路由创建和应用资源。
-
为静态路由资源创建 YAML 文件。
apiVersion: static-route.ibm.com/v1 kind: StaticRoute metadata: name: <route_name> spec: subnet: "<subnet_CIDR>" gateway: "<gateway_IP>" selectors: - key: "<label_key>" values: - "<label_value>" operator: In
示例
apiVersion: static-route.ibm.com/v1 kind: StaticRoute metadata: name: mystaticroute spec: subnet: "192.168.0.0/24" gateway: "10.0.0.1" selectors: - key: "kubernetes.io/arch" values: - "amd64" operator: In
subnet
- 指定从中向工作程序节点发送请求的外部子网 (例如本地网络中的子网) 的 CIDR。 外部子网不能在以下保留范围内。 允许设备互连范围
198.18.0.0/15
。10.0.0.0/8
172.16.0.0/16
172.18.0.0/16
172.19.0.0/16
172.20.0.0/16
gateway
- 如果网关 IP 地址与工作程序节点存在于同一子网上,请指定网关 IP 地址。 如果您的网关 IP 地址存在于 IBM Cloud 专用网络中的另一个子网上,请不要包含此字段。 在这种情况下,工作程序节点将响应发送到专用网络的后端路由器,而路由器将响应发送到另一个子网上的网关。 创建静态路由时,会自动将
10.0.0.0/8
范围内后端路由器的 IP 地址指定为缺省网关。 selectors
- 要仅在基于工作程序节点标签的特定工作程序节点上创建静态路由,请包含标签的
key
和values
。
-
通过将 YAML 文件应用于集群来创建静态路由。
kubectl apply -f <route_name>.yaml
-
验证是否已创建静态路由。 在输出中,针对创建静态路由的每个工作程序节点检查
node_status
。kubectl get staticroute <route_name> -o yaml
示例输出
apiVersion: static-route.ibm.com/v1 kind: StaticRoute metadata: annotations: kubectl.kubernetes.io/last-applied-configuration: | {"apiVersion":"static-route.ibm.com/v1","kind":"StaticRoute","metadata":{"annotations":{},"name":"mystaticroute"},"spec":{"selectors":[{"key":"kubernetes.io/arch","operator":"In","values":["amd64"]}],"subnet":"10.94.227.46/24"}} creationTimestamp: "2020-05-20T16:43:12Z" finalizers: - finalizer.static-route.ibm.com generation: 1 name: mystaticroute resourceVersion: "3753886" selfLink: /apis/static-route.ibm.com/v1/staticroutes/mystaticroute uid: f284359f-9d13-4e27-9d3a-8fb38cbc7a5c spec: selectors: - key: kubernetes.io/arch operator: In values: - amd64 subnet: 10.94.227.46/24 status: nodeStatus: - error: "" hostname: 10.94.227.19 state: gateway: 10.94.227.1 selectors: - key: kubernetes.io/arch operator: In values: - amd64 subnet: 10.94.227.46/24 - error: "" hostname: 10.94.227.22 state: gateway: 10.94.227.1 selectors: - key: kubernetes.io/arch operator: In values: - amd64 subnet: 10.94.227.46/24