ข้ามไปยังเนื้อหา

Azure

แผนภาพโครงสร้างพื้นฐาน Azure โดยใช้แพ็กเกจไอคอน HashiCorp Flight และ Carbon สำหรับเครือข่าย VNet ระบบประมวลผล และบริการที่จัดการ

Azure VNet พร้อมซับเน็ตสำหรับเกตเวย์ แอปพลิเคชัน และข้อมูล Application Gateway กระจายทราฟฟิกไปยัง VM Scale Sets

architecture-beta
  group vnet(carbon:virtual-private-cloud)[Azure VNet]
  group gwsub(carbon:ibm-cloud-subnets)[Gateway Subnet] in vnet
  group appsub(carbon:ibm-cloud-subnets)[App Subnet] in vnet
  group datasub(carbon:ibm-cloud-subnets)[Data Subnet] in vnet

  service appgw(carbon:gateway-security)[App Gateway] in gwsub
  service vm1(hashicorp-flight:azure-vms-color)[VM Scale Set] in appsub
  service vm2(hashicorp-flight:azure-vms-color)[VM Scale Set] in appsub
  service sqldb(carbon:data-base)[Azure SQL] in datasub

  appgw:R --> L:vm1
  appgw:B --> T:vm2
  vm1:R --> L:sqldb
  vm2:R --> L:sqldb

Azure Kubernetes Service ที่มี F5 Distributed Cloud เป็นส่วนหน้า สำหรับการเชื่อมต่อแอปพลิเคชันมัลติคลาวด์และความปลอดภัย

architecture-beta
  group xc(lucide:cloud)[F5 XC]
  group aks(hashicorp-flight:azure-aks-color)[AKS Cluster]

  service mcn(f5xc:multi-cloud-network-connect)[Network Connect] in xc
  service waap(f5xc:web-app-and-api-protection)[WAAP] in xc
  service ingress(carbon:gateway)[Ingress] in aks
  service app(hashicorp-flight:docker-color)[App Pods] in aks
  service cache(carbon:datastore)[Redis Cache] in aks
  service blob(hashicorp-flight:azure-blob-storage-color)[Blob Storage]

  mcn:R --> L:waap
  waap:R --> L:ingress
  ingress:R --> L:app
  app:B --> T:cache
  app:R --> L:blob

สถาปัตยกรรม Hub-Spoke ของ Azure พร้อมความปลอดภัยแบบรวมศูนย์และบริการร่วมที่เชื่อมต่อ VNet แบบ spoke หลายรายการ

flowchart TD
  hub@{ icon: 'carbon:virtual-private-cloud', label: 'Hub VNet' }
  fw@{ icon: 'carbon:firewall', label: 'Azure Firewall' }
  vpn@{ icon: 'carbon:gateway-vpn', label: 'VPN Gateway' }
  spoke1@{ icon: 'carbon:ibm-cloud-subnets', label: 'Spoke 1 - Web' }
  spoke2@{ icon: 'carbon:ibm-cloud-subnets', label: 'Spoke 2 - App' }
  spoke3@{ icon: 'carbon:ibm-cloud-subnets', label: 'Spoke 3 - Data' }
  onprem@{ icon: 'lucide:server', label: 'On-Premises DC' }

  onprem --> vpn
  vpn --> hub
  hub --> fw
  fw --> spoke1
  fw --> spoke2
  fw --> spoke3

ทราฟฟิกอินเทอร์เน็ตขาเข้าจะผ่าน public load balancer ซึ่งกระจายทราฟฟิกไปยังอินสแตนซ์ NVA ใน hub จากนั้น NVA จะส่งทราฟฟิกที่ตรวจสอบแล้วไปยังเวิร์กโหลดใน spoke ทราฟฟิกขาออกจาก spoke จะถูกส่งผ่าน internal load balancer กลับไปยัง NVA เพื่อออกไปยังอินเทอร์เน็ต ขั้นตอนที่มีหมายเลขแสดงเส้นทางขาเข้า (1-3) และเส้นทางขาออก (4-6)

flowchart TD
  subgraph internet[Internet]
    cloud@{ icon: 'lucide:globe', label: 'Internet' }
  end
  subgraph hub[Hub VNet 10.0.0.0/24]
    subgraph gwsub[Gateway Subnet 10.0.0.0/27]
      gw@{ icon: 'azure:virtual-network-gateways', label: 'VPN/ER GW' }
    end
    subgraph nvasub[NVA Subnet 10.0.0.32/27]
      intlb@{ icon: 'azure:load-balancers', label: 'Internal LB 10.0.0.36' }
      nva@{ icon: 'azure:firewalls', label: 'NVA' }
    end
    publb@{ icon: 'azure:load-balancers', label: 'Public LB' }
  end
  subgraph spoke1[Spoke1 10.1.1.0/24]
    app1@{ icon: 'azure:virtual-machine', label: 'App Server' }
  end
  subgraph spoke2[Spoke2 10.1.2.0/24]
    app2@{ icon: 'azure:virtual-machine', label: 'App Server' }
  end
  onprem@{ icon: 'lucide:building', label: 'On-Premises 192.168.0.0/16' }

  cloud -->|1| publb
  publb -->|2| nva
  nva -->|3| app2
  app2 -->|4| intlb
  intlb -->|5| nva
  nva -->|6| cloud
  onprem --> gw
  gw --> intlb

ทราฟฟิกจากสถานที่ทำงาน (on-premises) จะเข้ามาผ่านเกตเวย์ VPN หรือ ExpressRoute และถูกส่งไปยัง internal load balancer ที่อยู่หน้าอินสแตนซ์ NVA หลายรายการ NVA จะตรวจสอบและส่งทราฟฟิกไปยังเวิร์กโหลดใน spoke ทราฟฟิกขาออกจะผ่าน internal load balancer เดิมเพื่อให้มั่นใจในความสมมาตรของการไหล และป้องกันปัญหาการเลือกเส้นทางแบบไม่สมมาตร

flowchart TD
  subgraph hub[Hub VNet 10.0.0.0/24]
    subgraph gwsub[Gateway Subnet 10.0.0.0/27]
      gw@{ icon: 'azure:virtual-network-gateways', label: 'VPN/ER GW' }
    end
    subgraph nvasub[NVA Subnet 10.0.0.32/27]
      intlb@{ icon: 'azure:load-balancers', label: 'Internal LB 10.0.0.36' }
      nva1@{ icon: 'azure:firewalls', label: 'NVA' }
      nva2@{ icon: 'azure:firewalls', label: 'NVA' }
    end
  end
  subgraph spoke1[Spoke1 10.1.1.0/24]
    app1@{ icon: 'azure:virtual-machine', label: 'App Server' }
  end
  subgraph spoke2[Spoke2 10.1.2.0/24]
    app2@{ icon: 'azure:virtual-machine', label: 'App Server' }
  end
  onprem@{ icon: 'lucide:building', label: 'On-Premises 192.168.0.0/16' }

  onprem -->|1| gw
  gw -->|2| intlb
  intlb -->|3| nva1
  nva1 -->|4| app2
  app2 -->|5| intlb
  intlb -->|6| nva2
  nva2 -->|7| gw
  gw -->|8| onprem

คู่ NVA แบบ active/standby ซึ่ง NVA ที่ทำงานอยู่ (NVA1) จะถือครอง public IP address เมื่อเกิดความล้มเหลว NVA2 แบบ standby จะเรียก Azure API เพื่อกำหนด public IP ใหม่และอัปเดต user-defined routes ให้ชี้มาที่ตัวเอง วิธีนี้หลีกเลี่ยงการใช้ load balancer แต่ต้องการการประสานงาน failover ในระดับ API

flowchart TD
  subgraph internet[Internet]
    cloud@{ icon: 'lucide:globe', label: 'Internet' }
  end
  subgraph hub[Hub VNet 10.0.0.0/24]
    pip@{ icon: 'azure:public-ip-addresses', label: 'Public IP' }
    subgraph gwsub[Gateway Subnet 10.0.0.0/27]
      gw@{ icon: 'azure:virtual-network-gateways', label: 'VPN/ER GW' }
    end
    subgraph nvasub[NVA Subnet 10.0.0.32/27]
      nva1@{ icon: 'azure:firewalls', label: 'NVA1 Active 10.0.0.37' }
      nva2@{ icon: 'azure:firewalls', label: 'NVA2 Standby 10.0.0.38' }
    end
  end
  subgraph spoke1[Spoke1 10.1.1.0/24]
    app1@{ icon: 'azure:virtual-machine', label: 'App Server' }
  end
  subgraph spoke2[Spoke2 10.1.2.0/24]
    app2@{ icon: 'azure:virtual-machine', label: 'App Server' }
  end
  onprem@{ icon: 'lucide:building', label: 'On-Premises 192.168.0.0/16' }

  cloud -->|1| pip
  pip -->|2| nva1
  nva1 -->|3| app2
  app2 -->|4| nva1
  nva1 -->|5| cloud
  onprem --> gw

ความพร้อมใช้งานสูงแบบ BGP โดยใช้ Azure Route Server โดย Route Server จะสร้างความสัมพันธ์ eBGP กับอินสแตนซ์ NVA ทั้งสองและกำหนดโปรแกรมเส้นทางที่มีผลกับ spoke แบบไดนามิก ECMP กระจายโหลดระหว่าง NVA โดยไม่ต้องใช้ user-defined routes Route Server จะแทรกรายการ next-hop สำหรับ IP ของ NVA ทั้งสองเข้าไปใน VNet ทั้งหมดที่เชื่อมต่อกัน

flowchart TD
  subgraph internet[Internet]
    cloud@{ icon: 'lucide:globe', label: 'Internet' }
  end
  subgraph hub[Hub VNet 10.0.0.0/24]
    publb@{ icon: 'azure:load-balancers', label: 'Public LB' }
    subgraph gwsub[Gateway Subnet 10.0.0.0/27]
      gw@{ icon: 'azure:virtual-network-gateways', label: 'VPN/ER GW' }
    end
    subgraph nvasub[NVA Subnet 10.0.0.32/27]
      nva1@{ icon: 'azure:firewalls', label: 'NVA1 10.0.0.37' }
      nva2@{ icon: 'azure:firewalls', label: 'NVA2 10.0.0.38' }
    end
    subgraph rssub[Route Server Subnet 10.0.0.64/27]
      rs@{ icon: 'azure:virtual-router', label: 'Route Server' }
    end
  end
  subgraph spoke1[Spoke1 10.1.1.0/24]
    app1@{ icon: 'azure:virtual-machine', label: 'App Server' }
  end
  subgraph spoke2[Spoke2 10.1.2.0/24]
    app2@{ icon: 'azure:virtual-machine', label: 'App Server' }
  end

  cloud -->|1| publb
  publb -->|2| nva1
  nva1 -->|3| app2
  app2 -->|4| nva1
  nva1 -->|5| cloud
  rs <-.->|eBGP| nva1
  rs <-.->|eBGP| nva2
  gw --> rs

การแทรก NVA แบบโปร่งใสโดยใช้ Azure Gateway Load Balancer ทราฟฟิกที่มุ่งหน้าไปยังแอปพลิเคชันจะถูกเบี่ยงเบนอย่างโปร่งใสจาก public standard load balancer ไปยัง Gateway LB ใน VNet ของ NVA แยกต่างหาก NVA จะตรวจสอบทราฟฟิกและส่งกลับไปยัง Gateway LB ซึ่งจะส่งต่อกลับไปยังแอปพลิเคชัน โดยไม่จำเป็นต้องมี VNet peering หรือ UDR ระหว่าง VNet ของ NVA และแอปพลิเคชัน

flowchart TD
  subgraph internet[Internet]
    cloud@{ icon: 'lucide:globe', label: 'Internet' }
  end
  subgraph nvavnet[NVA VNet]
    gwlb@{ icon: 'azure:load-balancers', label: 'Gateway LB' }
    nva1@{ icon: 'azure:firewalls', label: 'NVA' }
    nva2@{ icon: 'azure:firewalls', label: 'NVA' }
  end
  subgraph appvnet[App VNet]
    publb@{ icon: 'azure:load-balancers', label: 'Public Std LB' }
    web@{ icon: 'azure:virtual-machine', label: 'Web Server' }
  end

  cloud -->|1| publb
  publb -->|2| gwlb
  gwlb -->|3| nva1
  nva1 -->|4| gwlb
  gwlb -->|5| publb
  publb -->|6| web
  gwlb --> nva2