將靜態路徑新增至工作者節點

為您的工作節點建立靜態路由,方法是啟用適用於 IBM Cloud® Kubernetes Service 叢集的靜態路由附加元件。

關於靜態路由

當您配置叢集網路以透過專用網路與其他網路進行通訊時,可能需要在工作者節點上新增自訂靜態路徑。 靜態路徑可讓工作者節點透過 VPN 或閘道應用裝置,將回應封包從叢集順利重新遞送至內部部署資料中心的 IP 位址。

例如,您可以使用 VPN,透過專用網路將叢集連接至內部部署資料中心。 此外,您的專用 VPN 連線會在叢集與資料中心之間的要求中保留來源 IP 位址。

當內部部署服務將要求傳送至叢集裡的應用程式時,應用程式 Pod 所在的工作者節點會因反向路徑過濾 (RPF) 而捨棄回應。 RPF 是 Linux 核心功能,可捨棄對工作者節點遞送表中未列出之 IP 位址的任何回應。 已捨棄回應,因為工作者節點無法遞送要求中所保留的內部部署 IP 位址。

在此情況下,您可以建立靜態路徑,以便當來自要求的來源 IP 位址來自其中一個內部部署子網路時,會改為將回應傳送至 VPN 閘道 IP 位址。 透過將此靜態路徑新增至工作者節點的遞送表,您可以確保下列各項:

  • 由於 RPF,未捨棄回應封包,因為存在指向內部部署 IP 位址的遞送規則。
  • 回應封包會先透過 VPN 閘道 IP 位址順利遞送,然後重新遞送至內部部署 IP 位址。

靜態路由叢集附加程式只能用來套用及管理靜態路由。 您需自行負責設定與管理您的VPN、閘道設備或 IBM Cloud® Direct Link 連線。

啟用靜態路由附加程式

要在 IBM Cloud Kubernetes Service 中開始使用靜態路由,請啟用靜態路由附加元件。

開始之前

從主控台啟用靜態路由附加程式

若要使用「IBM Cloud」主控台,請依照以下步驟操作。

  1. 在您的 叢集儀表板中,點選您要安裝「靜態路由附加元件」的叢集名稱。
  2. 在「靜態路由」卡上,按一下 安裝
  3. 再按一下安裝
  4. 在「靜態路由」卡片上,請確認該附加元件是否已列出。

使用 CLI 啟用靜態路由附加程式

若要使用 CLI,請依照以下步驟操作。

  1. 將「container-service」外掛程式更新至最新版本。

    ibmcloud update && ibmcloud plugin update container-service
    
  2. 啟用「static-route」附加元件。

    ibmcloud ks cluster addon enable static-route --cluster CLUSTER_NAME_OR_ID
    
  3. 驗證靜態路由附加程式的狀態為 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