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
擴展功能
- Resize VPC
- Shared VPCs
- Endpoint Services
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 等內部服務。
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 上。
Dedicated
Transit Gateways
- Regional
- FAQ
Virtual Private Network
主要與私有網路串接,像是 VPC 與地端辦公室網路串接。
相關功能與名詞:
- VGW: Virtual Private Gateways
- CGW: Customer Gateways
- Site-to-Site VPN Connections
- Client VPN Endpoints
VPC Limitation
- VPC User Guide:
- AWS General Reference: Amazon Virtual Private Cloud (Amazon VPC) Limits
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 的考量重點在於:
存取管控 (Access Control)
資料交換 (Data Transfer)
兩個面向,整理如下:
存取控管
- 考量公、私網域的規劃,也就是
路由 (Routing)
,所以必須規劃 CIDR Block,不可以碰撞。 - 考慮服務是否讓外部存取,也就是 Public Subnet
- 禁止外部存取的內部服務,也就是 Private Subnet
- EKS (K8s) 可以考量使用 Non-RFC1918 (參閱 VPC)
資料交換
- 則依照存取對象不一樣,有不同的
網路拓墣 (Network Topology)
的規劃。 - 主要是 Network ACL、Route Table、以及 VPC Peering、VPN 等
- 路由表的管理,包含靜態與動態路由
只要規劃多個 VPC、或者多個網段、多個資料中心,都要考量這兩點:
存取管控 (Access Control)
資料交換 (Data Transfer)
設計與規劃 Multiple VPCs in Different Regions
AWS VPC 基本上是一個資料中心 (Data Center) 的概念,所以不管是在雲端還是地端,除了傳統硬體要處理的問題,相關規劃的問題是少不了的。我最常規劃的案例官方文件中的 Scenario 3: VPC with Public and Private Subnets and Hardware VPN Access, 也就是包含:
- 數個 Public Subnets
- 數個 Private Subnets
- 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 相關文件:
- Whitepaper: Building a Scalable and Secure Multi-VPC AWS Network Infrastructure - November 2019
- Advanced VPC Design and New Capabilities for Amazon VPC (NET303)
- Extending Data Centers to Cloud: Connectivity Options & Best Practices NET302
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。用生活的例子來說:
規劃 (Topology)
:公路要先規劃有哪些主幹線、支線,哪些主幹道中哪一些會交錯?這裡的規劃會跟成本與資安有直接關係。可控性 (Controllable)
:這些道路可否管控流量?閘道?紅綠燈?單行道?紅綠燈多遠距離設計一個?執行政策 (Strategies and Policies)
:哪些車可以上快速道路?假日車流如何疏導?活動如何管制車輛?罰款如何?酒駕怎麼辦?
延伸閱讀
站內延伸
- AWS Study Roadmap
- Study Notes - VPC in GCP
- Building a VPN Between GCP and AWS
- 聊聊分散式系統
- K8s 安裝筆記 - kubeadm 手動 (ubuntu16.04)
參考資料
- Security in Your VPC
- Recommended Network ACL Rules for Your VPC
- VPC with Public and Private Subnets and Hardware VPN Access
- Comparison of Security Groups and Network ACLs
- VPC FAQs
- Introduction to AWS VPC, Guidelines, and Best Practices
- AWS Transit Gateways
建議閱讀
- VPC浅谈
- Fallacies of distributed computing (分散式系統的謬論)
- 通俗解读“AWS VPC 子网”
- 大咖专栏 | 大家热聊的VPC,大咖给你讲清楚(篇一)
- Building a Scalable and Secure Multi-VPC AWS Network Infrastructure - November 2019
Deep Dive
- AWS re:Invent 2018:
- AWS re:Invent 2017:
- AWS re:Invent 2016: From One to Many: Evolving VPC Design (ARC302)
- AWS re:Invent 2013: A Day in the Life of a Billion Packets (CPN401), Slide
更新紀錄
- 2019/01/14: 重構文章結構
- 2016/03/30: 新增 Public Subnet 的描述
- 2016/02/21: init