Study Notes - Virtual Private Cloud (VPC)


整理學習 VPC 的筆記。包含以下:

  • 基本概念、設定 VPC 過程問題與心得
  • 相關 AWS 服務
  • 常見的應用場景,包含如何規劃適當的網路架構


一、基本概念與功能

核心元件

分別描述 VPC 核心元件,包含:

  • Core
    • Subnet、Route Table
    • Internet Gateway、NAT Gateway、Egress-Only Internet Gateways
    • DHCP Options Sets
    • Elastic Network Interfaces (ENI)
    • Elastic IPs (EIP)
    • VPC Peering、Inter-Region VPC Peering、PrivateLink
    • VPC Endpoint、VPC Endpoint Service
  • Security
    • Network ACLs
    • Security Groups
  • Gateways
    • Internet Gateway
    • NAT Gateway
    • Egress-Only Internet Gateways
    • Virtual Private Gateway
    • Transit Gaterway
  • Virtual Private Network (VPN)
  • Transit Gateways、Transit VPC
  • Network Manager
  • ClassicLink
  • Traffic Mirror

相關概念名詞:

  • AWS Account
  • Region
  • Available Zone - AZ
  • On-Prem

擴展功能

Virtual Private Cloud (VPC)

  • 虛擬資料中心 (Data Center): VPC 與 VPC 預設彼此是獨立的,無法互通的
  • SDN: Software-Defined Network
  • 以 Region 為單位
  • 設定 VPC Peering and Private DNS using Route53
  • VPC 支援 IPv4、IPv6,
    • VPC CIDR 可以使用 RFC1918,或者 Non-RFC1918
  • VPC 支援擴充多個 CIDR, 參閱 Resize VPC

Subnets

每個 VPC 可以有規劃數個子網域 (Subnet),注意事項如下:

  • 每個 Subnet 可以指定在不同的 AZ
    • VPC 裡面的 Subnet 之間預設是互通的
    • 無法修改 AZ, CIDR 大小
    • Subnet 依照路由 (Route Table) 屬性,分成 Public / Private Subnet 兩種
    • Subnet 透過 Network ACLs 控管
  • Subnet 規劃
    • Subnet CIDR Space <= VPC CIDR Space
    • 每個部門都可以有自己的網段 (Subnet)
    • 每一種 Service Role (DB, Web, Storage, Cache …) 都有自己的 Subnet

Public Subnet and Private Subnet

在 VPC 裡的 Subnet 依照路由目標差異,分成 Public Subnet 與 Private Subnet:

  • Public Subnet
    • 指的是 subnet 掛的 route table, destination 到 Public Network 走 Internet Gateway
    • 裡面的機器透過 EIP 出去 / 進來。所以 這個網段的 Instance 都要有 EIP.
    • 通常是開放給外面連線的服務或者網路設備,像是 VPN, Proxy, NAT Instance … etc.
  • Private Subnet
    • 指的是 subnet 掛的 route table, destination 到 Public Network 沒有 走 Internet Gateway, 而是走 NAT Gateway
    • 可出去外面,但是外面不可進來,像是走 NAT Gateway 或者是其他 VPN Gateway.
    • 這個網段不需要有 EIP 就可以出去。
    • 通常是 DB / Application Server 等內部服務。

參閱: Your VPC with Subnets

Route Table

網路的關鍵元件,決定 Subnet 的屬性與封包路徑。

  • 透過 Internet Gateway 出去的 Subnet 稱為 Public Subnet
  • 透過 NAT 出去的稱為 Private Subnet.

DHCP Options Sets

提供 DHCP 設定選項,包含以下設定:

  • domain-name-servers
  • domain-name
  • ntp-servers
  • netbios-name-servers
  • netbios-node-type

相關規範:RFC2132

VPC Peering

不同的 VPC 資料交換的連線方式:

  • 允許 相同 AWS Accounts,相同 Region 互串。
  • 允許 不同 AWS Accounts,相同 Region 互串。
  • 可以跨 Region 互串,稱為 Inter-region VPC Peering,會有額外的費用與資料交換成本。

要注意 CIDR 的規劃,不可以碰撞,否則 Routing 會無法到達。

相關考量:

  • Region
  • CIDR 規劃
  • Route Table 規劃

VPC Endpoints

AWS 的 Services 都是公開對外的服務,如果 VPC 裡面的服務 (像是 EC2) 要對這些服務存取,他的路由會走 Public Network,有額外的成本與效能問題。透過 Endpoint 可以讓這些服務類似於走 Private network (實際上還是 public network),同時不用計算對外流量的費用。

  • Interface Endpoints: 實體上就是一張 ENI (Elastic Network Interface)
  • Gateway Endpoint

VPC Endpoint Service

又稱 AWS PrivateLink。允許把自己的應用程式透過 服務介面 的形式,提供給其他人使用,類似於 AWS 把 DynamoDB 透過 Interface Endpoints 封裝成 Service,給使用者使用。

背後實作原理是透過 NLB (Network Load Balancer) 的方式,將服務再透過 VPC Endpoint Service 關聯、封裝成一個介面,最後透過授權 (IAM) 方式,讓其他人可以使用。AWS 自己的 Managed Service 也是透過這樣的方式實作,像是 Private API Gateway、EKS … 等。

Network ACLs and Security Groups

詳細介紹參見:Security Groups and Network ACLs

Network Interfaces

Network Interface 是個虛擬網路卡,AWS 稱為 Elastic Network Interface (ENI)

主要透過 SDN 方式實作網路卡的特性,像是 IPv4 / IPv6、支援多個 IP 、Mac Address、Security Group … 等,是 AWS 整個服務裡非常重要的基礎核心元件之一。

除了 ENI,還有其他網路介面:

  • Enhanced Networking
    • ENA (Elastic Network Adapter): 支援速度到 100Gbps 的速度。
    • Intel 82599 VF Interface:支援 10Gbps 速度。更多參閱 Intel 82599 VF
  • EFA (Elastic Fabric Adapter):針對 HPC (High Performance Computing) 應用程式。更多參閱 EFA

官方文件:

NAT Instance and NAT Gateway

相關經驗參見: Migrate to AWS NAT Gateway

Default VPC and Default Subnet

預設的 VPC 與 Subnet。使用 AWS CLI/SDK 的時候,如果不指定 VPC 會走這個。

無法由使用者自行建立或者指定,必須透過 Support Ticket 設定。

Bring Your Own IP (BYOIP)

2019/04/04 Release: Bring Your Own IP (BYOIP): 允許把自己的 IP 綁定到 VPC 上。

官方文件:Bring Your Own IP Addresses

Dedicated

Transit Gateways

Virtual Private Network

主要與私有網路串接,像是 VPC 與地端辦公室網路串接。

相關功能與名詞:

  • VGW: Virtual Private Gateways
  • CGW: Customer Gateways
  • Site-to-Site VPN Connections
  • Client VPN Endpoints

VPC Limitation

CNI for Kubernetes

依據 CNI (Container Network Interface) 的標準,AWS 針對 VPC 實作了 CNI,讓跑在 AWS 上的 K8s pod 可以直接使用 VPC 網路,而不需要再多一層 Overlay,提供高效能的傳輸。目前的 CNI 版本支援 ENI。詳細設計文件參閱 amazon-vpc-cni-k8s, Proposal: CNI plugin for Kubernetes networking over AWS VPC

相關 EKS 網路規劃與管理參閱: EKS 學習筆記 - 網路管理篇


二、相關服務

VPC 是 AWS 非常核心的服務,所以與他相關的服務也會非常的多,以下整理比較重要的列表:

  • Route53
  • ELB: NLB / ALB / CLB
  • Direct Connect (DX)
  • Global Accelerator
  • EKS

重要觀念:

其他只要牽涉到 Private Subnet,或者在 Provision 過程,需要選擇 VPC 的服務,基本上都脫離不了 VPC 的概念。


三、應用與規劃

規劃 VPC 的考慮項目

規劃 VPC 的考量重點在於:

  1. 存取管控 (Access Control)
  2. 資料交換 (Data Transfer)

兩個面向,整理如下:

存取控管

  • 考量公、私網域的規劃,也就是 路由 (Routing),所以必須規劃 CIDR Block,不可以碰撞。
  • 考慮服務是否讓外部存取,也就是 Public Subnet
  • 禁止外部存取的內部服務,也就是 Private Subnet
  • EKS (K8s) 可以考量使用 Non-RFC1918 (參閱 VPC)

資料交換

  • 則依照存取對象不一樣,有不同的 網路拓墣 (Network Topology) 的規劃。
  • 主要是 Network ACL、Route Table、以及 VPC Peering、VPN 等
  • 路由表的管理,包含靜態與動態路由

只要規劃多個 VPC、或者多個網段、多個資料中心,都要考量這兩點:

  1. 存取管控 (Access Control)
  2. 資料交換 (Data Transfer)

設計與規劃 Multiple VPCs in Different Regions

AWS VPC 基本上是一個資料中心 (Data Center) 的概念,所以不管是在雲端還是地端,除了傳統硬體要處理的問題,相關規劃的問題是少不了的。我最常規劃的案例官方文件中的 Scenario 3: VPC with Public and Private Subnets and Hardware VPN Access, 也就是包含:

  1. 數個 Public Subnets
  2. 數個 Private Subnets
  3. VPN to own IT infrastructure over an IPSec VPN tunnel

同時,這個規劃也考慮了 AZ 以及開發時的各種環境需求,像是 Dev / Test / Staging / Production … 等環境。

多 AWS 帳號、多 AWS Regions 的規劃與設計,完整筆記參閱:Plan and Design Multiple VPCs in Different Regions

推薦閱讀 AWS 相關文件:

Plan for Hybrid Cloud

針對不同的 Cloud 網路架構的規劃,以 AWS + GCP 為例,最基礎的就是要打通兩段。

GCP 也有類似於 AWS VPC 的網路,參閱底下筆記:

規劃完成之後,同樣的要思考 CIDR、Routing 的問題,也就是思考 存取管控資料交換 的問題。

相關工具

整理一些繪圖工具,用來管理這些圖。


四、VPC 系列文章


本質

網路是什麼? What is Network? 我的說法是:路由,學 VPC 整個的核心概念與關鍵在於如何控制好路由。

底下截圖是我的說法:

現在 SaaS 越來越流行,很多人會以為 IaaS 不重要、網路可以忽略。但是企業整體營運還是要面對 IT 基礎設施 (Infrastructure),而最根本的就是 Network Topology 的問題,這些問題包含了 1) 規劃、2) 可控性、3) 執行政策 三個面向,本質上是沒有改變,不會因此而 NoOps。用生活的例子來說:

  1. 規劃 (Topology):公路要先規劃有哪些主幹線、支線,哪些主幹道中哪一些會交錯?這裡的規劃會跟成本與資安有直接關係。
  2. 可控性 (Controllable):這些道路可否管控流量?閘道?紅綠燈?單行道?紅綠燈多遠距離設計一個?
  3. 執行政策 (Strategies and Policies):哪些車可以上快速道路?假日車流如何疏導?活動如何管制車輛?罰款如何?酒駕怎麼辦?

延伸閱讀

站內延伸

參考資料

建議閱讀

Deep Dive

更新紀錄

  • 2019/01/14: 重構文章結構
  • 2016/03/30: 新增 Public Subnet 的描述
  • 2016/02/21: init


Comments

2016/02/21 13:30:00





  • 全站索引
  • 關於這裏
  • 關於作者
  • 學習法則
  • 思考本質
  • 一些領悟
  • 分類哲學
  • ▲ TOP ▲