diff --git a/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md b/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md new file mode 100644 index 00000000000..e69de29bb2d diff --git a/infra/gcp/terraform/k8s-infra-oci-proxy-prod/README.md b/infra/gcp/terraform/k8s-infra-oci-proxy-prod/README.md new file mode 100644 index 00000000000..2841f236208 --- /dev/null +++ b/infra/gcp/terraform/k8s-infra-oci-proxy-prod/README.md @@ -0,0 +1,117 @@ +## AWS ↔ GCP region pairing and mapping + +This document contains the GCP regions that we serve image registries from including future regions. + +At a high level: + - A global GCP loadbalancer routes traffic to the closest Cloud Run service + - Image Manifests are fetched from GCP + - Traffic originating from GCP fetches image blobs from GCP Artifact Registry + - Traffic originating from AWS fetches image blobs from S3 Buckets + - Traffic originating from outside of GCP and AWS is fetched from S3 buckets + - If a GCP region doesn't have an paired AWS region, the user fetches image blobs from AWS Cloudfront CDN. + +| Metro / Country | AWS region | GCP region | Is the GCP region deployed? | Blobs served from GCP to non cloud users? | Active GCP Image Registry | Active S3 Bucket | Nearest Blob Location +|---|---|---|---|---|---|---|---| +| South Africa | `af-south-1` | `africa-south1` | πŸ”΄ | No | No | Yes | Same Region | Same Region | +| Taiwan | `ap-east-2` | `asia-east1` | 🟒 | No | Yes | Yes | Same Region | +| Hong Kong (SAR) | `ap-east-1` | `asia-east2` | πŸ”΄ | No | No | Yes | Same Region | Same Region | +| Tokyo, Japan | `ap-northeast-1` | `asia-northeast1` | 🟒 | No | Yes | Yes | Same Region | +| Osaka, Japan | `ap-northeast-3` | `asia-northeast2` | 🟒 | No | Yes | Yes | Same Region | +| Seoul, South Korea | `ap-northeast-2` | `asia-northeast3` | πŸ”΄ | No | No | Yes | Same Region | +| Mumbai, India | `ap-south-1` | `asia-south1` | 🟒 | No | Yes | Yes | Same Region | +| Hydrebad, India | β€” | `asia-south2` | πŸ”΄ | No | No | β€” | AWS Cloudfront | +| Singapore | `ap-southeast-1` | `asia-southeast1` | πŸ”΄ | No | Yes | Yes | Same Region | +| Jakarta, Indonesia | `ap-southeast-3` | `asia-southeast2` | πŸ”΄ | No | Yes | Yes | Same Region | +| Sydney, Australia | `ap-southeast-2` | `australia-southeast1`| 🟒 | No | Yes | Yes | Same Region | +| Melbourne, Australia | `ap-southeast-4` | `australia-southeast2` | πŸ”΄ | No | No | Yes | Same Region | +| Warsaw, Poland | β€” | `europe-central2` | πŸ”΄ | No | No | β€” | AWS Cloudfront | +| Hamina, Finland | β€” | `europe-north1` | 🟒 | No | Yes | β€” | AWS Cloudfront | +| Stockholm, Sweden | `eu-north-1` | `europe-north2` | πŸ”΄ | No | No | Yes | Same Region | +| Madrid, Spain | `eu-south-2` | `europe-southwest1` | 🟒 | No | Yes | Yes | Same Region | +| St. Ghislain, Belgium | β€” | `europe-west1` | 🟒 | No | Yes | β€” | Europe | +| London, UK | `eu-west-2` | `europe-west2` | 🟒 | No | Yes | Yes | Same Region | +| Frankfurt, Germany | `eu-central-1` | `europe-west3` | 🟒 | No | Yes | Yes | Same Region | +| Eemshaven, Netherlands | β€” | `europe-west4` | 🟒 | No | Yes | Yes | Europe | +| ZΓΌrich, Switzerland | `eu-central-2` | `europe-west6` | πŸ”΄ | No | No | Yes | Same Region | +| Milan, Italy | `eu-south-1` | `europe-west8` | 🟒 | No | Yes | Yes | Same Region | +| Paris, France | `eu-south-2` | `europe-west9` | 🟒 | No | Yes | Yes | Same Region | +| Berlin, Germany | β€” | `europe-west10` | 🟒 | No | Yes | Yes | Same Country | +| Turin, Italy | β€” | `europe-west12` | πŸ”΄ | No | No | β€” | AWS Cloudfront | +| Doha, Qatar | β€” | `me-central1` | πŸ”΄ | No | No | β€” | AWS Cloudfront | +| Dammam, Saudi Arabia | β€” | `me-central2` | πŸ”΄ | No | No | β€” | AWS Cloudfront | +| Tel Aviv, Israel | `il-central-1` | `me-west1` | πŸ”΄ | No | No | Yes | Europe | +| MontrΓ©al, Canada | `ca-central-1` | `northamerica-northeast1` | πŸ”΄ | No | No | Yes | Same Region | +| Toronto, Canada | β€” | `northamerica-northeast2` | πŸ”΄ | No | No | β€” | AWS Cloudfront | +| QuerΓ©taro, Mexico | `mx-central-1` | `northamerica-south1` | πŸ”΄ | No | No | Yes | Same Region | +| SΓ£o Paulo, Brazil | `sa-east-1` | `southamerica-east1` | πŸ”΄ | No | No | Yes | Same Region | +| Santiago, Chile | β€” | `southamerica-west1` | 🟒 | No | Yes | No | AWS Cloudfront | +| Council Bluffs (Iowa), USA | β€” | `us-central1` | 🟒 | No | Yes | Yes | `us-east-2` | +| Moncks Corner (South Carolina), USA | β€” | `us-east1` | 🟒 | No | Yes | β€” | `us-east-1` | +| Ashburn (N. Virginia), USA | `us-east-1` | `us-east4` | 🟒 | No | Yes | Yes | Same Region | +| Columbus (Ohio), USA | `us-east-2` | `us-east5` | 🟒 | No | Yes | Yes | Same Region | +| Dallas (Texas), USA | β€” | `us-south1` | 🟒 | No | Yes | β€” | `us-east-2` | +| The Dalles (Oregon), USA | `us-west-2` | `us-west1` | 🟒 | No | Yes | Yes | Same Region | +| California, USA | `us-west-1` | `us-west2` | 🟒 | No | Yes | Yes | Same Region | +| Salt Lake City (Utah), USA | β€” | `us-west3` | πŸ”΄ | No | No | β€” | AWS Cloudfront | +| Las Vegas (Nevada), USA | β€” | `us-west4` | πŸ”΄ | No | No | β€” | AWS Cloudfront | + + +Priority Regions: +- P1 + - `af-south-1`. 1st region in Africa + - `me-central1`. 1st region in the Middle East + - `asia-east2`. A paired region that will also serve AWS China traffic. + - `northamerica-northeast1`. First paired region in Canada +- P2 + - `europe-north2`. A paired region + - `northamerica-south1` A paired region + - `asia-southeast1`. A paired region +- Backlog + - Remaining US regions + +Regions we should replace given promoter capacity: + - `asia-northeast2`, another region of the same country is already active + - `europe-west10`, another region of the same country is already active + +As of 13th of December 2025, all the AWS regions that publicly available have been populated and configured in archeio. + +``` +# aws ec2 describe-regions --all-regions --query "Regions[].RegionName" --output json | jq .[] | awk '{print $0","}' | sort --version-sort +"af-south-1", +"ap-east-1", +"ap-east-2", +"ap-northeast-1", +"ap-northeast-2", +"ap-northeast-3", +"ap-southeast-1", +"ap-southeast-2", +"ap-southeast-3", +"ap-southeast-4", +"ap-southeast-5", +"ap-southeast-6", +"ap-southeast-7", +"ap-south-1", +"ap-south-2", +"ca-central-1", +"ca-west-1", +"eu-central-1", +"eu-central-2", +"eu-north-1", +"eu-south-1", +"eu-south-2", +"eu-west-1", +"eu-west-2", +"eu-west-3", +"il-central-1", +"me-central-1", +"me-south-1", +"mx-central-1", +"sa-east-1", +"us-east-1", +"us-east-2", +"us-west-1", +"us-west-2", +``` + +Helpful Guides: +- https://cloudregionsmap.z6.web.core.windows.net/ diff --git a/infra/gcp/terraform/k8s-infra-oci-proxy-prod/main.tf b/infra/gcp/terraform/k8s-infra-oci-proxy-prod/main.tf index 549b967c2db..0862b54df99 100644 --- a/infra/gcp/terraform/k8s-infra-oci-proxy-prod/main.tf +++ b/infra/gcp/terraform/k8s-infra-oci-proxy-prod/main.tf @@ -22,9 +22,8 @@ locals { module "oci-proxy" { source = "../modules/oci-proxy" // ***** production vs staging variables inputs ***** - // - // explicitly using default digest here vs staging which overrides it - digest = null + // v0.6.0 + digest = "sha256:1f004a487c09c76ebf14d1dc01434aa17e31e39def56451ec5727160fdcd0017" domain = "registry.k8s.io" project_id = local.project_id service_account_name = "oci-proxy-prod" diff --git a/infra/gcp/terraform/modules/oci-proxy/main.tf b/infra/gcp/terraform/modules/oci-proxy/main.tf index 9905c86d7e2..d3a54a9d839 100644 --- a/infra/gcp/terraform/modules/oci-proxy/main.tf +++ b/infra/gcp/terraform/modules/oci-proxy/main.tf @@ -21,8 +21,8 @@ locals { environment_variables = [ { name = "DEFAULT_AWS_BASE_URL", - // AWS Cloudfront - value = "https://d39mqg4b1dx9z1.cloudfront.net", + // AWS ap-east-2 is Taiwan + value = "https://prod-registry-k8s-io-ap-east-2.s3.dualstack.ap-east-2.amazonaws.com", }, { name = "UPSTREAM_REGISTRY_ENDPOINT", @@ -111,8 +111,8 @@ locals { environment_variables = [ { name = "DEFAULT_AWS_BASE_URL", - // AWS eu-central-1 is Frankfurt - value = "https://prod-registry-k8s-io-eu-central-1.s3.dualstack.eu-central-1.amazonaws.com", + // AWS Cloudfront + value = "https://d39mqg4b1dx9z1.cloudfront.net", }, { name = "UPSTREAM_REGISTRY_ENDPOINT", @@ -183,8 +183,9 @@ locals { environment_variables = [ { name = "DEFAULT_AWS_BASE_URL", - // AWS eu-west-1 is Ireland - value = "https://prod-registry-k8s-io-eu-west-1.s3.dualstack.eu-west-1.amazonaws.com", + // AWS eu-west-2 is London + // https://github.com/kubernetes/registry.k8s.io/blob/main/cmd/archeio/internal/app/buckets.go#L111 + value = "https://767373bbdcb8270361b96548387bf2a9ad0d48758c35-eu-west-2.s3.dualstack.eu-west-2.amazonaws.com", }, { name = "UPSTREAM_REGISTRY_ENDPOINT", diff --git a/registry.k8s.io/images/k8s-staging-infra-tools/images.yaml b/registry.k8s.io/images/k8s-staging-infra-tools/images.yaml index 23c143fdec9..c78eec1c72d 100644 --- a/registry.k8s.io/images/k8s-staging-infra-tools/images.yaml +++ b/registry.k8s.io/images/k8s-staging-infra-tools/images.yaml @@ -12,6 +12,7 @@ "sha256:a8e39369650944a3bc7f7ce5bc6f28dbc79b4eb856e54d3968e84f0485a29019": ["v0.3.1"] "sha256:7a4d062fed0dd80d216f94803e7c6bfb06022ae76aa0960602878d964fa9fdd2": ["v0.4.0"] "sha256:d91229530a784c0569adf7192978f64c9371e906ed726cc3061aa98c2706bdce": ["v0.5.0"] + "sha256:1f004a487c09c76ebf14d1dc01434aa17e31e39def56451ec5727160fdcd0017": ["v0.6.0"] - name: octodns dmap: "sha256:838d6134142eea4ce926c0bfe2f2bd2bbd7580e42e42aea39259575951273c44": ["v20200501-36789b1"]