設定 Network Connectivity Gateway

本文說明如何為 Google Distributed Cloud 中的叢集設定 Network Connectivity Gateway。

有時,叢集中執行的 Pod 必須與虛擬私有雲 (VPC) 中執行的工作負載通訊。這類通訊必須安全無虞。您可能需要透過平面網路進行這項通訊,且不使用 Proxy 伺服器。Network Connectivity Gateway 可啟用這類通訊。

Network Connectivity Gateway 會以 Pod 形式在叢集中執行。如下圖所示,這項解決方案提供 IPsec 通道,可將叢集中的 Pod 流量傳輸至 VPC 中的 VM。閘道 Pod 透過邊界閘道通訊協定 (BGP) 工作階段接收 VPC 子網路的前置字元時,會使用 Dataplane V2 設定轉送。當其他 Pod 將流量傳送至具有其中一個前置字元的位址時,流量會導向閘道 Pod。然後閘道 Pod 會透過 IPsec 通道,將流量轉送至Google Cloud。

Google Distributed Cloud 的 Network Connectivity Gateway 圖表

網路連線閘道不支援下列功能:

  • 高可用性 VPN (和 BGP) 的 IPv6
  • BGP 的 MD5
  • 邊界閘道通訊協定 (BGP) 的雙向轉送偵測 (BFD)

建立 Google Cloud 資源

如要在叢集中啟用 Network Connectivity Gateway,您必須具備下列Google Cloud 資源:

  • Cloud Router

  • 高可用性 VPN 閘道

  • 對等互連 VPN 閘道:一個介面

  • 兩個 VPN 通道

  • 兩個 BGP 工作階段:每個 VPN 通道各一個

如要瞭解如何建立及設定這些資源,請參閱「建立連結至對接 VPN 閘道的高可用性 VPN 閘道」。

建立這些資源時,請收集下列資訊,以供日後使用:

  • 指派給高可用性 VPN 閘道的兩個外部 IP 位址。 Google Cloud

  • 離開貴機構的 IPsec/VPN 流量公開 IP 位址。 這個位址可能是網路位址轉譯 (NAT) 的結果。

  • 預先共用金鑰。

  • 您為 BGP 工作階段指派給 Cloud Router 的自治系統編號 (ASN)。

  • 您選擇在內部部署叢集中用於 BGP 工作階段的 ASN。

  • 每個 BGP 工作階段的連結本機位址 (例如 169.254.1.1),供 Cloud Router 使用,以及內部部署叢集使用的連結本機位址。

如要瞭解如何查看 BGP 工作階段設定的詳細資料,請參閱「查看 BGP 工作階段設定」。

叢集需求

網路連線閘道指令列工具下載內容 ncgctl-v1.12.0-linux-amd64.tar.gz 僅與 Google Distributed Cloud 1.12 版相容。如要建立新的 1.12.0 版叢集,請在叢集設定檔中加入註解,啟用網路連線閘道。

如要在建立叢集時啟用 Network Connectivity Gateway:

  1. 在叢集設定檔中,新增 baremetal.cluster.gke.io/enable-gng: "true" 註解。

    apiVersion: baremetal.cluster.gke.io/v1
    kind: Cluster
    metadata:
      annotations:
        baremetal.cluster.gke.io/enable-gng: "true"
      name: my-cluster
      namespace: cluster-my-cluster
    spec:
    ...
      anthosBareMetalVersion: 1.12.0
      ...
    
  2. 使用 bmctl create 建立叢集:

    bmctl create cluster -c CLUSTER_NAME
    

    CLUSTER_NAME 替換為您在建立叢集設定檔時指定的名稱。如要進一步瞭解如何建立叢集,請參閱「叢集建立方式總覽」一文。

下載

如要下載 ncgctl (Network Connectivity Gateway 指令列工具),請按照下列步驟操作:

  1. 下載 Network Connectivity Gateway 元件和自訂資源定義:

    gcloud storage cp gs://ncg-release/anthos-baremetal/ncgctl-v1.12.0-linux-amd64.tar.gz .
    
  2. 解壓縮封存檔:

    tar -xvzf ncgctl-v1.12.0-linux-amd64.tar.gz
    

安裝

如要安裝 ncgctl,請按照下列步驟操作:

  1. 執行預檢檢查,確認叢集符合必要條件。例如,請確認已啟用 Dataplane V2。

    ./bin/ncgctl --verify --kubeconfig CLUSTER_KUBECONFIG
    

    請將 CLUSTER_KUBECONFIG 替換為叢集 kubeconfig 檔案的路徑。

  2. 安裝 Network Connectivity Gateway。

    ./bin/ncgctl --install --kubeconfig CLUSTER_KUBECONFIG
    
  3. 如果您有現有的 1.12.0 版叢集,可以使用下列 ncgctl 指令啟用網路連線閘道:

    ./bin/ncgctl --enable-ncg-on-existing-cluster
    

    ncgctl 指令接受 -e 做為啟用標記的縮寫版本。

  4. 如要查看其他快速鍵和其他指令說明,請使用下列指令:

    ./bin/ncgctl --help
    

為預先共用金鑰建立 Secret

IPsec 通道兩端的閘道會使用包含預先共用金鑰的 Secret 進行驗證。

如要建立 Secret,請按照下列步驟操作:

  1. 建立名為 psk-secret.yaml 的檔案,並在當中加入下列 Secret 資訊清單詳細資料:

    apiVersion: v1
    kind: Secret
    metadata:
      name: "ike-key"
      namespace: "kube-system"
    data:
      psk: PRE_SHARED_KEY
    

    PRE_SHARED_KEY 替換為 base64 編碼的預先共用金鑰。如果您有純文字金鑰,請先將金鑰編碼為 base64 格式,再建立這個 Secret。舉例來說,如果 Google Cloud 控制台為您產生金鑰,該金鑰會以純文字形式呈現,您必須進行編碼。如要使用 base64 編碼金鑰:

    echo -n PLAINTEXT_KEY | base64
    
  2. 建立 Secret:

    kubectl --kubeconfig CLUSTER_KUBECONFIG apply -f psk-secret.yaml
    

建立兩個 OverlayVPNTunnel 自訂資源

如要啟動兩個 IPsec 工作階段,請建立兩個 OverlayVPNTunnel 自訂資源。

  1. 建立名為 overlay-vpn-tunnels.yaml 的檔案,並在當中加入下列OverlayVPNTunnel資訊清單詳細資料:

    apiVersion: networking.gke.io/v1alpha1
    kind: OverlayVPNTunnel
    metadata:
      namespace: "kube-system"
      name: TUNNEL_1_NAME
    spec:
      ikeKey:
        name: "ike-key"
        namespace: "kube-system"
      peer:
        publicIP: PEER_PUBLIC_IP_1
      self:
        publicIP: SELF_PUBLIC_IP
      localTunnelIP: SELF_LOCAL_TUNNEL_IP_1
    ---
    apiVersion: networking.gke.io/v1alpha1
    kind: OverlayVPNTunnel
    metadata:
      namespace: "kube-system"
      name: TUNNEL_2_NAME
    spec:
      ikeKey:
        name: "ike-key"
        namespace: "kube-system"
      peer:
        publicIP: PEER_PUBLIC_IP_2
      self:
        publicIP: SELF_PUBLIC_IP
      localTunnelIP: SELF_LOCAL_TUNNEL_IP_2
    

    更改下列內容:

    • TUNNEL_NAME_1:您為第一個 OverlayVPNTunnel 選擇的名稱。

    • TUNNEL_NAME_2:第二個 OverlayVPNTunnel 的名稱,可自行選擇。

    • PEER_PUBLIC_IP_1:高可用性 VPN 閘道上其中一個介面的公開 IP 位址。您在建立第一個 VPN 通道時指定了這個介面。

    • PEER_PUBLIC_IP_2:高可用性 VPN 閘道上另一個介面的公開 IP 位址。您在建立第二個 VPN 通道時指定了這個介面。

    • SELF_LOCAL_TUNNEL_IP_1: 叢集中用於第一個通道的 BGP 工作階段的連結本機位址。

    • SELF_LOCAL_TUNNEL_IP_2: 叢集中用於透過第二個通道進行 BGP 工作階段的連結本機位址。

    • SELF_PUBLIC_IP:離開貴機構的 IPsec/VPN 流量所用的公用 IP 位址。這個地址可能是網路位址轉譯 (NAT) 的結果。

  2. 建立兩個 OverlayVPNTunnels

    kubectl --kubeconfig CLUSTER_KUBECONFIG apply -f overlay-vpn-tunnels.yaml
    
  3. 檢查通道的狀態:

    kubectl --kubeconfig CLUSTER_KUBECONFIG get OverlayVPNTunnel \
        --namespace kube-system --output yaml
    

建立兩個 OverlayBGPPeer 自訂資源

如要透過各個通道啟動 BGP 工作階段,請建立兩個OverlayBGPPeer自訂資源。

  1. 建立名為 overlay-bgp-peers.yaml 的檔案,並在其中加入下列OverlayBGPPeer資訊清單詳細資料。

    apiVersion: networking.gke.io/v1alpha1
    kind: OverlayBGPPeer
    metadata:
      namespace: "kube-system"
      name: BGP_PEER_1_NAME
    spec:
      localASN: LOCAL_ASN
      localIP: LOCAL_IP
      peerIP: PEER_IP_1
      peerASN: PEER_ASN
      vpnTunnel: TUNNEL_1_NAME
    ---
    apiVersion: networking.gke.io/v1alpha1
    kind: OverlayBGPPeer
    metadata:
      namespace: "kube-system"
      name: BGP_PEER_2_NAME
    spec:
      localASN: LOCAL_ASN
      localIP: LOCAL_IP
      peerIP: PEER_IP_2
      peerASN: PEER_ASN
      vpnTunnel: TUNNEL_2_NAME
    

    更改下列內容:

    • BGP_PEER_1_NAME:您為第一個 OverlayBGPPeer 選擇的名稱。

    • BGP_PEER_2_NAME:您為第二個 OverlayBGPPeer 選擇的名稱。

    • LOCAL_ASN:叢集用於 BGP 工作階段的 ASN。

    • LOCAL_IP:離開貴機構的 IPsec/VPN 流量所用的公開 IP 位址。這個位址可能是網路位址轉譯 (NAT) 的結果。

    • PEER_IP_1:高可用性 VPN 閘道上其中一個介面的公開 IP 位址。您在建立第一個 VPN 通道時指定了這個介面。

    • :高可用性 VPN 閘道上另一個介面的公開 IP 位址。PEER_IP_2您在建立第二個 VPN 通道時指定了這個介面。

    • PEER_ASN:指派給 Cloud Router 的 ASN,用於 BGP 工作階段。

    • TUNNEL_1_NAME:您先前建立的第一個 OverlayVPNTunnel 名稱。

    • TUNNEL_2_NAME:您先前建立的第二個 OverlayVPNTunnel 名稱。

  2. 建立OverlayBGPPeer自訂資源:

    kubectl --kubeconfig CLUSTER_KUBECONFIG apply -f overlay-bgp-peers.yaml
    
  3. 檢查 BGP 工作階段的狀態:

    kubectl --kubeconfig CLUSTER_KUBECONFIG get OverlayBGPPeer --namespace kube-system \
        --output yaml
    

檢查 Network Connectivity Gateway 的狀態

安裝作業會建立NetworkConnectivityGateway自訂資源。

  • 查看 NetworkConnectivityGateway 自訂資源:

    kubectl --kubeconfig CLUSTER_KUBECONFIG get NetworkConnectivityGateway --namespace kube-system \
        --output yaml
    

    輸出結果大致如下。確認畫面上顯示 Status: Healthy

    apiVersion: networking.gke.io/v1alpha1
    kind: NetworkConnectivityGateway
    metadata:
      namespace: kube-system
      name: default
    spec:
    status:
        CurrNode: worker1-node
        CreatedTime: 2021-09-07T03:18:15Z
        LastReportTime: 2021-09-21T23:57:54Z
        Status:  Healthy
    

檢查 Network Connectivity Gateway 記錄

閘道 Pod 屬於名為 ncgd 的 DaemonSet,因此 Pod 名稱開頭為 ncgd

如要查看 Network Connectivity Gateway 記錄,請按照下列步驟操作:

  1. 找出閘道 Pod 的名稱:

    kubectl --kubeconfig CLUSTER_KUBECONFIG pods --namespace kube-system | grep ncgd
    
  2. 查看閘道 Pod 的記錄:

    kubectl --kubeconfig CLUSTER_KUBECONFIG logs GATEWAY_POD --namespace kube-system \
        --output yaml
    

    GATEWAY_POD 替換為閘道 Pod 的名稱。

解除安裝

如要從叢集解除安裝 Network Connectivity Gateway,請按照下列步驟操作:

./bin/ncgctl –-uninstall --kubeconfig CLUSTER_KUBECONFIG

疑難排解

如需 Network Connectivity Gateway 相關疑難排解提示,請參閱「排解 Network Connectivity Gateway 問題」。