本文說明如何為 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。
網路連線閘道不支援下列功能:
- 高可用性 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:
在叢集設定檔中,新增
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 ...
使用
bmctl create
建立叢集:bmctl create cluster -c CLUSTER_NAME
將
CLUSTER_NAME
替換為您在建立叢集設定檔時指定的名稱。如要進一步瞭解如何建立叢集,請參閱「叢集建立方式總覽」一文。
下載
如要下載 ncgctl
(Network Connectivity Gateway 指令列工具),請按照下列步驟操作:
下載 Network Connectivity Gateway 元件和自訂資源定義:
gcloud storage cp gs://ncg-release/anthos-baremetal/ncgctl-v1.12.0-linux-amd64.tar.gz .
解壓縮封存檔:
tar -xvzf ncgctl-v1.12.0-linux-amd64.tar.gz
安裝
如要安裝 ncgctl
,請按照下列步驟操作:
執行預檢檢查,確認叢集符合必要條件。例如,請確認已啟用 Dataplane V2。
./bin/ncgctl --verify --kubeconfig CLUSTER_KUBECONFIG
請將
CLUSTER_KUBECONFIG
替換為叢集 kubeconfig 檔案的路徑。安裝 Network Connectivity Gateway。
./bin/ncgctl --install --kubeconfig CLUSTER_KUBECONFIG
如果您有現有的 1.12.0 版叢集,可以使用下列
ncgctl
指令啟用網路連線閘道:./bin/ncgctl --enable-ncg-on-existing-cluster
ncgctl
指令接受-e
做為啟用標記的縮寫版本。如要查看其他快速鍵和其他指令說明,請使用下列指令:
./bin/ncgctl --help
為預先共用金鑰建立 Secret
IPsec 通道兩端的閘道會使用包含預先共用金鑰的 Secret 進行驗證。
如要建立 Secret,請按照下列步驟操作:
建立名為
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
建立 Secret:
kubectl --kubeconfig CLUSTER_KUBECONFIG apply -f psk-secret.yaml
建立兩個 OverlayVPNTunnel
自訂資源
如要啟動兩個 IPsec 工作階段,請建立兩個 OverlayVPNTunnel
自訂資源。
建立名為
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) 的結果。
建立兩個
OverlayVPNTunnels
:kubectl --kubeconfig CLUSTER_KUBECONFIG apply -f overlay-vpn-tunnels.yaml
檢查通道的狀態:
kubectl --kubeconfig CLUSTER_KUBECONFIG get OverlayVPNTunnel \ --namespace kube-system --output yaml
建立兩個 OverlayBGPPeer
自訂資源
如要透過各個通道啟動 BGP 工作階段,請建立兩個OverlayBGPPeer
自訂資源。
建立名為
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 名稱。
建立
OverlayBGPPeer
自訂資源:kubectl --kubeconfig CLUSTER_KUBECONFIG apply -f overlay-bgp-peers.yaml
檢查 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 記錄,請按照下列步驟操作:
找出閘道 Pod 的名稱:
kubectl --kubeconfig CLUSTER_KUBECONFIG pods --namespace kube-system | grep ncgd
查看閘道 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 問題」。