GCE上實作Bastion Gateway的HA架構

概念

NAT(或稱Bastion主機)的架構在自建機房中常常可以見到,我們也可以將該架構在雲端環境上建置來使用... 而Google雲端的環境中,可以透過network與routing的方式搭配來建置一個具有HA(High Availability)的NAT環境,讓NAT不是單點提供服務... 下面是架構的簡單描述:




建置過程

設定網路與防火牆基本規則

首先,建議使用自建Network,好處是可以自訂內部的路由與相關防火牆規則,且可以避免影響其他主機。


gcloud compute networks create kankan-ha-nat \
   --mode legacy \
   --range 10.10.10.0/24

   

為了可以測試狀態,我們允許port 22的ssh連線,因此建立允許 tcp 22 port 連線的防火牆規則...


gcloud compute firewall-rules create kankan-ha-nat-allow-ssh \
--allow tcp:22 --network kankan-ha-nat


在NAT server的建置上,我們需要讓內外部連線可以透通,因此將tcp:1-65535, udp:1-65535, icmp等協定打開,讓內部的網段(10.10.10.0/24)可以透過NAT server來連線外部網路。


gcloud compute firewall-rules create kankan-ha-nat-allow-internal \
--allow tcp:1-65535,udp:1-65535,icmp \
--source-ranges 10.10.10.0/24 --network kankan-ha-nat


建立NAT server

然後我們將NAT server建立起來:


gcloud compute instances create nat-gateway-asia-east1-a --network kankan-ha-nat --can-ip-forward \
--zone asia-east1-a \
--image-family debian-8 \
--image-project debian-cloud \
--tags nat


為了實現NAT的HA可能性,我們需要另外建立一台NAT server,可以讓NAT server異常時候,有另外一台NAT server可以提供路由服務... 下面是用同樣的設定在創建一台NAT server,但是我們選擇不同的zone,讓multi zone提供更高可用性...


gcloud compute instances create nat-gateway-asia-east1-c --network kankan-ha-nat --can-ip-forward \
--zone asia-east1-c \
--image-family debian-8 \
--image-project debian-cloud \
--tags nat


附註:上面NAT主機建立的過程中,必需要開啟network中的"can-ip-forward"參數,開啟後該主機才能夠提供路由之功能...


建立測試主機與連線環境

接下來建立內部服務主機,也就是我們想藏在NAT Gateway後面的重要機器,該主機會具備一個"no-ip"標籤,該標籤主要會結後後面建立的路由規則,讓路由經過指定的NAT主機...


gcloud compute instances create no-ip-instance --network kankan-ha-nat --no-address \
--zone asia-east1-a \
--image-family debian-8 \
--image-project debian-cloud \
--tags no-ip


為了方便測試,我們另外建立測試時使用的 jumper 主機,當作跳到內部主機的跳板...,該主機必須與內部主機在同一個network下面...


gcloud compute instances create kankan-jumper --network kankan-ha-nat \
--zone asia-east1-b \
--image-family debian-8 \
--image-project debian-cloud


設定NAT主機之路由

接下來需要準備NAT主機的路由,指定所有"no-ip"的主機可以走該路由進出internet...


gcloud compute routes create no-ip-internet-route-a --network kankan-ha-nat \
--destination-range 0.0.0.0/0 \
--next-hop-instance nat-gateway-asia-east1-a \
--next-hop-instance-zone asia-east1-a \
--tags no-ip --priority 800


我們也需要針對第二台NAT主機建立同樣的路由...


gcloud compute routes create no-ip-internet-route-c --network kankan-ha-nat \
--destination-range 0.0.0.0/0 \
--next-hop-instance nat-gateway-asia-east1-c \
--next-hop-instance-zone asia-east1-c \
--tags no-ip --priority 800


當兩個路由同時存在時,只要該路由可運作,則內部主機之網路會由可運作的路由提供網路,如果整在使用的 NAT server 異常或關機,則GCE會自動使用另一台 NAT server 主機提供服務。


設定NAT主機

NAT主機需要進行一些路由forward的設定,我們需要連線進入所建立的NAT主機上進行設定:


gcloud compute ssh nat-gateway-asia-east1-a --zone asia-east1-a
gcloud compute ssh nat-gateway-asia-east1-c --zone asia-east1-c


設定的內容如下:


sudo vi /etc/rc.local
sysctl -w net.ipv4.ip_forward=1
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE


其中net.ipv4.ip_forward=1是啟動主機內 ip forward 的功能,iptables的那段則是啟用封包forward到eth0網卡的功能... 這些設定寫到 "/etc/rc.local" 則可以讓主機再重新開機後可以自動起來...


測試

最後我們可以透過 jumper server 做跳板,再 ssh 連線進到 no-ip-instance 主機中,然後 ping 外部的 ip ...


gcloud compute ssh kankan-jumper --zone asia-east1-b
ssh no-ip-instance
ping 8.8.8.8


只要上面 ping 8.8.8.8 有實際成功,則我們可以測試輪流關閉(只保留一台NAT主機)時,內部這台主機的ping運作狀況...


參考





作者:KanKan

留言

  1. Betway sign up offer: get up to $250 in bet credits - The
    betway sportsbook promo code. Betway 경주 출장샵 Sportsbook. Betway promo code works 목포 출장마사지 just like 구미 출장안마 on the desktop 군산 출장안마 and mobile sports betting sites, so you 군포 출장안마

    回覆刪除
  2. Gambling is on hold in Bulgaria | Filmfile Europe
    Gambling is a gambling phenomenon 먹튀 신고 worldwide, 스마일토토 포커 룰 it is regulated by 스포츠토토 판매점 위치 샤오미 the 검색어를 입력하세요 www 토렌트 Gaming Authority of Bulgaria, the country where casinos are located. The

    回覆刪除

張貼留言

這個網誌中的熱門文章

透過Cloud Shell輕鬆呼叫Google API

[how-to] 在 GCP 上設定 HTTPS Load Balancer

在Kubernetes上透過helm來安裝jenkins服務