IBM Cloud Docs
向工作程序节点添加静态路由

向工作程序节点添加静态路由

通过对 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 控制台,请执行以下步骤。

  1. 集群仪表板中,单击要安装静态路由附加组件的集群的名称。
  2. 静态路由 卡上,单击 安装
  3. 再次单击安装
  4. 静态路由 卡上,验证是否列出了附加组件。

使用 CLI 启用静态路由附加组件

要使用 CLI,请执行以下步骤。

  1. 启用 static-route 附加组件。

    ibmcloud ks cluster addon enable static-route --cluster <cluster_name_or_ID>
    
  2. 验证静态路由附加组件的状态是否为 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
    

创建静态路由

启用静态路由附加组件 后,可以为定制路由创建和应用资源。

  1. 为静态路由资源创建 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
    要仅在基于工作程序节点标签的特定工作程序节点上创建静态路由,请包含标签的 keyvalues
  2. 通过将 YAML 文件应用于集群来创建静态路由。

    kubectl apply -f <route_name>.yaml
    
  3. 验证是否已创建静态路由。 在输出中,针对创建静态路由的每个工作程序节点检查 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