mirror of
https://github.com/outbackdingo/firezone.git
synced 2026-01-27 10:18:54 +00:00
docs: update POP map and relay ips for azure (#10293)
Updates our list of potential Relay IPs and the regional map diagram for customer reference.
This commit is contained in:
Binary file not shown.
|
Before Width: | Height: | Size: 230 KiB After Width: | Height: | Size: 386 KiB |
File diff suppressed because it is too large
Load Diff
76
website/src/app/kb/architecture/tech-stack/generate_map.py
Normal file
76
website/src/app/kb/architecture/tech-stack/generate_map.py
Normal file
@@ -0,0 +1,76 @@
|
||||
# Used to generate the Firezone regional availability map
|
||||
|
||||
import cartopy.crs as ccrs
|
||||
import cartopy.feature as cfeature
|
||||
import matplotlib.pyplot as plt
|
||||
|
||||
# Azure regions with coordinates
|
||||
coordinates = [
|
||||
{"city": "Virginia (East US)", "lon": -79.8164, "lat": 37.3719},
|
||||
{"city": "Washington (West US 2)", "lon": -119.852, "lat": 47.233},
|
||||
{"city": "Netherlands (West Europe)", "lon": 4.8945, "lat": 52.3667},
|
||||
{"city": "Singapore (Southeast Asia)", "lon": 103.833, "lat": 1.283},
|
||||
{"city": "Tokyo (Japan East)", "lon": 139.77, "lat": 35.68},
|
||||
{"city": "London (UK South)", "lon": -0.799, "lat": 50.941},
|
||||
{"city": "São Paulo (Brazil South)", "lon": -46.633, "lat": -23.55},
|
||||
{"city": "Sydney (Australia East)", "lon": 151.2094, "lat": -33.86},
|
||||
{"city": "Pune (Central India)", "lon": 73.9197, "lat": 18.5822},
|
||||
{"city": "Toronto (Canada Central)", "lon": -79.383, "lat": 43.653},
|
||||
{"city": "Dubai (UAE North)", "lon": 55.316, "lat": 25.266},
|
||||
{"city": "Frankfurt (Germany West Central)", "lon": 8.682127, "lat": 50.110924},
|
||||
{"city": "Seoul (Korea Central)", "lon": 126.9780, "lat": 37.5665},
|
||||
{"city": "Paris (France Central)", "lon": 2.3522, "lat": 48.8566},
|
||||
{"city": "Johannesburg (South Africa North)", "lon": 28.030, "lat": -26.198},
|
||||
{"city": "Ireland (North Europe)", "lon": -6.2603, "lat": 53.3498},
|
||||
{"city": "Virginia (East US 2)", "lon": -78.3889, "lat": 36.6681},
|
||||
{"city": "Phoenix (West US 3)", "lon": -112.074, "lat": 33.448},
|
||||
{"city": "Zurich (Switzerland North)", "lon": 8.564572, "lat": 47.451542},
|
||||
{"city": "Oslo (Norway East)", "lon": 10.752, "lat": 59.913},
|
||||
{"city": "Warsaw (Poland Central)", "lon": 21.017, "lat": 52.237},
|
||||
{"city": "Doha (Qatar Central)", "lon": 51.183, "lat": 25.317},
|
||||
{"city": "Iowa (Central US)", "lon": -93.6208, "lat": 41.5908},
|
||||
{"city": "Querétaro (Mexico Central)", "lon": -100.389, "lat": 20.589},
|
||||
{"city": "Hong Kong (East Asia)", "lon": 114.188, "lat": 22.267},
|
||||
{"city": "Milan (Italy North)", "lon": 9.1824, "lat": 45.4685},
|
||||
{"city": "Kuala Lumpur (Malaysia West)", "lon": 101.687, "lat": 3.139},
|
||||
{"city": "Santiago (Chile Central)", "lon": -70.673, "lat": -33.447},
|
||||
{"city": "Tel Aviv (Israel Central)", "lon": 34.851, "lat": 31.045},
|
||||
{"city": "Madrid (Spain Central)", "lon": -3.7026, "lat": 40.4165},
|
||||
{"city": "Jakarta (Indonesia Central)", "lon": 106.8456, "lat": -6.2088},
|
||||
{"city": "Gävle (Sweden Central)", "lon": 17.1413, "lat": 60.6749},
|
||||
{"city": "Auckland (New Zealand North)", "lon": 174.763, "lat": -36.848},
|
||||
{"city": "Illinois (North Central US)", "lon": -87.6278, "lat": 41.8819},
|
||||
]
|
||||
|
||||
# Create a map with equirectangular projection
|
||||
fig = plt.figure(figsize=(14, 7))
|
||||
ax = plt.axes(projection=ccrs.PlateCarree()) # Equirectangular projection
|
||||
ax.set_global()
|
||||
ax.coastlines()
|
||||
|
||||
# Plot the cities
|
||||
for city in coordinates:
|
||||
ax.plot(
|
||||
city["lon"],
|
||||
city["lat"],
|
||||
marker="o",
|
||||
color="#ff7300",
|
||||
markersize=10,
|
||||
transform=ccrs.PlateCarree(),
|
||||
)
|
||||
|
||||
# Add features and titles
|
||||
ax.add_feature(cfeature.BORDERS, linestyle=":")
|
||||
ax.add_feature(cfeature.LAND, edgecolor="#1b140e", facecolor="#f8f7f7")
|
||||
plt.subplots_adjust(left=0, right=1, top=1, bottom=0) # Extend map to borders
|
||||
|
||||
ax.axis("off")
|
||||
|
||||
# Save the figure
|
||||
output_path = "./regional-availability.png"
|
||||
plt.savefig(output_path, dpi=150, bbox_inches="tight", pad_inches=0)
|
||||
print(
|
||||
f"Map saved to {output_path}. Move this file to the public/images directory appropriately."
|
||||
)
|
||||
|
||||
plt.show()
|
||||
@@ -1,68 +0,0 @@
|
||||
# Used to generate the Firezone regional availability map
|
||||
|
||||
import cartopy.crs as ccrs
|
||||
import cartopy.feature as cfeature
|
||||
import matplotlib.pyplot as plt
|
||||
|
||||
# Complete list of cities with coordinates
|
||||
coordinates = [
|
||||
{"city": "Changhua County, Taiwan", "lon": 120.5169, "lat": 24.0518},
|
||||
{"city": "Hong Kong", "lon": 114.1694, "lat": 22.3193},
|
||||
{"city": "Tokyo, Japan", "lon": 139.7595, "lat": 35.6828},
|
||||
{"city": "Osaka, Japan", "lon": 135.5023, "lat": 34.6937},
|
||||
{"city": "Seoul, South Korea", "lon": 126.9780, "lat": 37.5665},
|
||||
{"city": "Mumbai, India", "lon": 72.8777, "lat": 19.0760},
|
||||
{"city": "Delhi, India", "lon": 77.1025, "lat": 28.7041},
|
||||
{"city": "Jurong West, Singapore", "lon": 103.8198, "lat": 1.3521},
|
||||
{"city": "Jakarta, Indonesia", "lon": 106.8456, "lat": -6.2088},
|
||||
{"city": "Sydney, Australia", "lon": 151.2093, "lat": -33.8688},
|
||||
{"city": "Melbourne, Australia", "lon": 144.9631, "lat": -37.8136},
|
||||
{"city": "Warsaw, Poland", "lon": 21.0122, "lat": 52.2297},
|
||||
{"city": "Hamina, Finland", "lon": 27.1979, "lat": 60.5690},
|
||||
{"city": "St. Ghislain, Belgium", "lon": 3.8186, "lat": 50.4541},
|
||||
{"city": "London, UK", "lon": -0.1278, "lat": 51.5074},
|
||||
{"city": "Frankfurt, Germany", "lon": 8.6821, "lat": 50.1109},
|
||||
{"city": "Eemshaven, Netherlands", "lon": 6.8647, "lat": 53.4386},
|
||||
{"city": "Zurich, Switzerland", "lon": 8.5417, "lat": 47.3769},
|
||||
{"city": "Milan, Italy", "lon": 9.1900, "lat": 45.4642},
|
||||
{"city": "Paris, France", "lon": 2.3522, "lat": 48.8566},
|
||||
{"city": "Berlin, Germany", "lon": 13.4050, "lat": 52.5200},
|
||||
{"city": "Turin, Italy", "lon": 7.6869, "lat": 45.0703},
|
||||
{"city": "Madrid, Spain", "lon": -3.7038, "lat": 40.4168},
|
||||
{"city": "Doha, Qatar", "lon": 51.2285, "lat": 25.2760},
|
||||
{"city": "Tel Aviv, Israel", "lon": 34.7818, "lat": 32.0853},
|
||||
{"city": "Montréal, Canada", "lon": -73.5673, "lat": 45.5017},
|
||||
{"city": "Toronto, Canada", "lon": -79.3837, "lat": 43.6511},
|
||||
{"city": "Querétaro, Mexico", "lon": -100.3899, "lat": 20.5888},
|
||||
{"city": "Santiago, Chile", "lon": -70.6693, "lat": -33.4489},
|
||||
{"city": "Osasco, São Paulo, Brazil", "lon": -46.7910, "lat": -23.5329},
|
||||
{"city": "Council Bluffs, Iowa, USA", "lon": -95.8608, "lat": 41.2619},
|
||||
{"city": "Moncks Corner, South Carolina, USA", "lon": -79.9989, "lat": 33.1960},
|
||||
{"city": "Ashburn, Northern Virginia, USA", "lon": -77.4874, "lat": 39.0438},
|
||||
{"city": "Columbus, Ohio, USA", "lon": -82.9988, "lat": 39.9612},
|
||||
{"city": "Dallas, Texas, USA", "lon": -96.7970, "lat": 32.7767},
|
||||
{"city": "The Dalles, Oregon, USA", "lon": -121.1787, "lat": 45.5946},
|
||||
{"city": "Los Angeles, California, USA", "lon": -118.2437, "lat": 34.0522},
|
||||
{"city": "Salt Lake City, Utah, USA", "lon": -111.8910, "lat": 40.7608},
|
||||
{"city": "Las Vegas, Nevada, USA", "lon": -115.1398, "lat": 36.1699},
|
||||
{"city": "Johannesburg, South Africa", "lon": 28.0473, "lat": -26.2041},
|
||||
]
|
||||
|
||||
# Create a map with equirectangular projection
|
||||
fig = plt.figure(figsize=(14, 7))
|
||||
ax = plt.axes(projection=ccrs.PlateCarree()) # Equirectangular projection
|
||||
ax.set_global()
|
||||
ax.coastlines()
|
||||
|
||||
# Plot the cities
|
||||
for city in coordinates:
|
||||
ax.plot(city["lon"], city["lat"], marker="o", color="#ff7300", markersize=10, transform=ccrs.PlateCarree())
|
||||
|
||||
# Add features and titles
|
||||
ax.add_feature(cfeature.BORDERS, linestyle=":")
|
||||
ax.add_feature(cfeature.LAND, edgecolor="#1b140e", facecolor="#f8f7f7")
|
||||
plt.subplots_adjust(left=0, right=1, top=1, bottom=0) # Extend map to borders
|
||||
|
||||
ax.axis("off")
|
||||
|
||||
plt.show()
|
||||
@@ -91,66 +91,62 @@ The separation between control plane and data plane state serves two functions:
|
||||
|
||||
Firezone uses the following tools for ops and infrastructure:
|
||||
|
||||
| Category | Tool/Service |
|
||||
| ----------------------- | ----------------------------- |
|
||||
| Cloud provider | Google Cloud Platform |
|
||||
| Source code management | GitHub |
|
||||
| CI/CD | GitHub Actions |
|
||||
| Monitoring and alerting | Google Cloud Monitoring |
|
||||
| Logging | Google Cloud Logging |
|
||||
| Persistence store | Google Cloud SQL (PostgreSQL) |
|
||||
| Infrastructure as code | Terraform |
|
||||
| Category | Tool/Service |
|
||||
| ----------------------------- | ----------------------------- |
|
||||
| Cloud provider: Control plane | Google Cloud Platform |
|
||||
| Cloud provider: Relays | Microsoft Azure |
|
||||
| Source code management | GitHub |
|
||||
| CI/CD | GitHub Actions |
|
||||
| Monitoring and alerting | Sentry |
|
||||
| Logging | Sentry |
|
||||
| Persistence store | Google Cloud SQL (PostgreSQL) |
|
||||
| Infrastructure as code | Terraform |
|
||||
|
||||
### Regional availability
|
||||
|
||||
The Firezone-managed components are deployed globally across the following GCP
|
||||
zones for load balancing and latency optimization:
|
||||
Firezone Relays are deployed globally to ensure low-latency fallback paths for
|
||||
cases where direct peer-to-peer connections aren't possible. Relays are deployed
|
||||
in the following Azure regions:
|
||||
|
||||
| City | Region | Zone |
|
||||
| ---------------------------------- | ------------------------- | --------------------------- |
|
||||
| Changhua County, Taiwan | `asia-east1` | `asia-east1-a` |
|
||||
| Hong Kong | `asia-east2` | `asia-east2-a` |
|
||||
| Tokyo, Japan | `asia-northeast1` | `asia-northeast1-a` |
|
||||
| Osaka, Japan | `asia-northeast2` | `asia-northeast2-a` |
|
||||
| Seoul, South Korea | `asia-northeast3` | `asia-northeast3-a` |
|
||||
| Mumbai, India | `asia-south1` | `asia-south1-a` |
|
||||
| Delhi, India | `asia-south2` | `asia-south2-a` |
|
||||
| Jurong West, Singapore | `asia-southeast1` | `asia-southeast1-a` |
|
||||
| Jakarta, Indonesia | `asia-southeast2` | `asia-southeast2-a` |
|
||||
| Sydney, Australia | `australia-southeast1` | `australia-southeast1-a` |
|
||||
| Melbourne, Australia | `australia-southeast2` | `australia-southeast2-a` |
|
||||
| Warsaw, Poland | `europe-central2` | `europe-central2-a` |
|
||||
| Hamina, Finland | `europe-north1` | `europe-north1-a` |
|
||||
| St. Ghislain, Belgium | `europe-west1` | `europe-west1-a` |
|
||||
| London, UK | `europe-west2` | `europe-west2-a` |
|
||||
| Frankfurt, Germany | `europe-west3` | `europe-west3-a` |
|
||||
| Eemshaven, Netherlands | `europe-west4` | `europe-west4-a` |
|
||||
| Zurich, Switzerland | `europe-west6` | `europe-west6-a` |
|
||||
| Milan, Italy | `europe-west8` | `europe-west8-a` |
|
||||
| Paris, France | `europe-west9` | `europe-west9-a` |
|
||||
| Berlin, Germany | `europe-west10` | `europe-west10-a` |
|
||||
| Turin, Italy | `europe-west12` | `europe-west12-a` |
|
||||
| Madrid, Spain | `europe-southwest1` | `europe-southwest1-a` |
|
||||
| Doha, Qatar | `me-central1` | `me-central1-a` |
|
||||
| Tel Aviv, Israel | `me-west1` | `me-west1-a` |
|
||||
| Montréal, Canada | `northamerica-northeast1` | `northamerica-northeast1-a` |
|
||||
| Toronto, Canada | `northamerica-northeast2` | `northamerica-northeast2-a` |
|
||||
| Querétaro, Mexico | `northamerica-south1` | `northamerica-south1-a` |
|
||||
| Santiago, Chile | `southamerica-west1` | `southamerica-west1-a` |
|
||||
| Osasco, São Paulo, Brazil | `southamerica-east1` | `southamerica-east1-a` |
|
||||
| Council Bluffs, Iowa, USA | `us-central1` | `us-central1-a` |
|
||||
| Moncks Corner, South Carolina, USA | `us-east1` | `us-east1-a` |
|
||||
| Ashburn, Northern Virginia, USA | `us-east4` | `us-east4-a` |
|
||||
| Columbus, Ohio, USA | `us-east5` | `us-east5-a` |
|
||||
| Dallas, Texas, USA | `us-south1` | `us-south1-a` |
|
||||
| The Dalles, Oregon, USA | `us-west1` | `us-west1-a` |
|
||||
| Los Angeles, California, USA | `us-west2` | `us-west2-a` |
|
||||
| Salt Lake City, Utah, USA | `us-west3` | `us-west3-a` |
|
||||
| Las Vegas, Nevada, USA | `us-west4` | `us-west4-a` |
|
||||
| City | Region |
|
||||
| ------------ | -------------------- |
|
||||
| Auckland | New Zealand North |
|
||||
| Dubai | UAE North |
|
||||
| Doha | Qatar Central |
|
||||
| Frankfurt | Germany West Central |
|
||||
| Gävle | Sweden Central |
|
||||
| Hong Kong | East Asia |
|
||||
| Illinois | North Central US |
|
||||
| Iowa | Central US |
|
||||
| Ireland | North Europe |
|
||||
| Jakarta | Indonesia Central |
|
||||
| Johannesburg | South Africa North |
|
||||
| Kuala Lumpur | Malaysia West |
|
||||
| London | UK South |
|
||||
| Madrid | Spain Central |
|
||||
| Milan | Italy North |
|
||||
| Oslo | Norway East |
|
||||
| Paris | France Central |
|
||||
| Phoenix | West US 3 |
|
||||
| Pune | Central India |
|
||||
| Querétaro | Mexico Central |
|
||||
| Santiago | Chile Central |
|
||||
| São Paulo | Brazil South |
|
||||
| Seoul | Korea Central |
|
||||
| Singapore | Southeast Asia |
|
||||
| Sydney | Australia East |
|
||||
| Tel Aviv | Israel Central |
|
||||
| Tokyo | Japan East |
|
||||
| Toronto | Canada Central |
|
||||
| Virginia | East US |
|
||||
| Virginia | East US 2 |
|
||||
| Warsaw | Poland Central |
|
||||
| Washington | West US 2 |
|
||||
| Zurich | Switzerland North |
|
||||
|
||||
#### Regional availability map
|
||||
|
||||
{/* Regenerate this using map.py in the current directory */}
|
||||
{/* Regenerate this using generate_map.py in the current directory */}
|
||||
|
||||
<Link
|
||||
target="_blank"
|
||||
@@ -159,7 +155,6 @@ zones for load balancing and latency optimization:
|
||||
<Image
|
||||
src="/images/kb/architecture/tech-stack/regional-availability.png"
|
||||
alt="Firezone regional availability diagram"
|
||||
className=""
|
||||
width={1200}
|
||||
height={1200}
|
||||
/>
|
||||
|
||||
Reference in New Issue
Block a user