diff --git a/test/multicloud/README.md b/test/multicloud/README.md index dc7bd0c230..02d1bbb17d 100644 --- a/test/multicloud/README.md +++ b/test/multicloud/README.md @@ -6,10 +6,14 @@ This project leverages [OpenTofu](https://opentofu.org/docs/intro/) Infrastructu ## Modules available -* [aks](./modules/aks/) -* [gke](./modules/gke/) -* [kind](./modules/kind/) -* [retina](./modules/retina/) +* [aks](./modules/aks/): Deploy Azure Kubernetes Service cluster. +* [gke](./modules/gke/): Deploy Google Kubernetes Engine cluster. +* [kind](./modules/kind/): Deploy KIND cluster. +* [helm-release](./modules/helm-release/): Deploy a Helm Chart, used to deploy Retina and Prometheus. +* [kubernetes-lb](./modules/kubernetes-lb/): Create a Kubernetes Service of type Load Balancer, used to expose Prometheus. +* [grafana](./modules/grafana/): Set up multiple Prometheus data sources in Grafana Cloud. +* [aks-nsg](./modules/aks-nsg/): Inboud and outbount rules for AKS Load Balancer. +* [gke-firewall](./modules/gke-firewall/): Inboud and outbount rules for GKE Load Balancer. ## Prerequisites @@ -17,10 +21,10 @@ This project leverages [OpenTofu](https://opentofu.org/docs/intro/) Infrastructu * AKS: - 1. create an Azure account - 2. [Install az](https://learn.microsoft.com/en-us/cli/azure/install-azure-cli) + 1. Create an Azure account. + 2. [Install az](https://learn.microsoft.com/en-us/cli/azure/install-azure-cli). - To deploy an AKS cluster and install retina, create file `live/retina-aks/terraform.tfvars` with the Azure TenantID and SubscriptionID + To deploy an AKS cluster and install retina, create file `live/retina-aks/terraform.tfvars` with the Azure TenantID and SubscriptionID. ```sh # example values @@ -30,10 +34,10 @@ This project leverages [OpenTofu](https://opentofu.org/docs/intro/) Infrastructu * GKE: - 1. create a gcloud account, project and enable billing - 2. create a service account and service account key - 3. [Enable Kubernetes Engine API](https://console.developers.google.com/apis/api/container.googleapis.com/overview?project=mc-retina) - 4. [Install gcloud](https://cloud.google.com/sdk/docs/install) + 1. create a gcloud account, project and enable billing. + 2. create a service account and service account key. + 3. [Enable Kubernetes Engine API](https://console.developers.google.com/apis/api/container.googleapis.com/overview?project=mc-retina). + 4. [Install gcloud](https://cloud.google.com/sdk/docs/install). To deploy a GKE cluster export `GOOGLE_APPLICATION_CREDENTIALS` env variable to point to the path where your [service account key](https://cloud.google.com/iam/docs/keys-create-delete) is located. @@ -42,12 +46,24 @@ This project leverages [OpenTofu](https://opentofu.org/docs/intro/) Infrastructu export GOOGLE_APPLICATION_CREDENTIALS=/Users/srodi/src/retina/test/multicloud/live/retina-gke/service-key.json ``` +* Grafana + + 1. Set up a [Grafana Cloud free account](https://grafana.com/pricing/) and start an instance. + 2. Create a [Service Account](https://grafana.com/docs/grafana/latest/administration/service-accounts/#create-a-service-account-in-grafana). + 3. Export `GRAFANA_AUTH` environmnet variable containing the service account token. + + ```sh + export GRAFANA_AUTH=glsa_s0MeRan0mS7r1ng_1ab2c345 + ``` + * Kind: 1. Docker installed on the host machine ## Quickstart +![Hubble on GKE v1 dataplane (no Cilium)](./diagrams/mc-gke-hubble.png) + The following Make targets can be used to manage each stack lifecycle. ### Create @@ -93,9 +109,13 @@ make test ## Providers references -* [GKE resource documentation](https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/container_cluster) -* [AKS resource documentation](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/kubernetes_cluster) -* [Kind resource documentation](https://registry.terraform.io/providers/tehcyx/kind/latest/docs/resources/cluster) +Resources documentation: + +* [GKE](https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/container_cluster) +* [AKS](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/kubernetes_cluster) +* [Kind](https://registry.terraform.io/providers/tehcyx/kind/latest/docs/resources/cluster) +* [Helm Release](https://registry.terraform.io/providers/hashicorp/helm/latest/docs/resources/release) +* [Kubernetes LB Service](https://registry.terraform.io/providers/hashicorp/kubernetes/latest/docs/resources/service) ## Troubleshooting @@ -111,3 +131,9 @@ tofu import module.gke.google_service_account.default projects/mc-retina/service ``` >Note: each resource documentation contains a section on how to import resources into the State. [Example for google_container_cluster resource](https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/container_cluster#import) + +## Multi-Cloud + +The [live/](./live/) directory contains the multi-cloud / multi-cluster stacks to deploy clusters, install Retina, install Prometheus, expose all Prometheus using load blanaces, and configure a Grafana Cloud instance to consume prometheus data sources to visualize multiple cluster in a single Grafana dashboard. + +![Architecture Diagram](./diagrams/mc-diagram.svg) diff --git a/test/multicloud/diagrams/mc-diagram.svg b/test/multicloud/diagrams/mc-diagram.svg new file mode 100644 index 0000000000..e69de29bb2 diff --git a/test/multicloud/diagrams/mc-diagram.svg:Zone.Identifier b/test/multicloud/diagrams/mc-diagram.svg:Zone.Identifier new file mode 100644 index 0000000000..e69de29bb2 diff --git a/test/multicloud/diagrams/mc-gke-hubble.png b/test/multicloud/diagrams/mc-gke-hubble.png new file mode 100644 index 0000000000..4e24e1841d Binary files /dev/null and b/test/multicloud/diagrams/mc-gke-hubble.png differ diff --git a/test/multicloud/diagrams/mc.excalidraw b/test/multicloud/diagrams/mc.excalidraw new file mode 100644 index 0000000000..29933ea48e --- /dev/null +++ b/test/multicloud/diagrams/mc.excalidraw @@ -0,0 +1,1668 @@ +{ + "type": "excalidraw", + "version": 2, + "source": "https://excalidraw.com", + "elements": [ + { + "id": "5_W8BA86fmJwBrO8OOuPX", + "type": "rectangle", + "x": -2249.8401050585435, + "y": -4831.408627109235, + "width": 733.8626026995305, + "height": 578.2723004694836, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#b2f2bb", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [ + "fOcHMc9ibAwtyrNzv-fW2" + ], + "frameId": null, + "index": "b30", + "roundness": null, + "seed": 1293699874, + "version": 116, + "versionNonce": 615131390, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "Ob0OCX23MOiEbsyYw09Q_" + } + ], + "updated": 1738868692592, + "link": null, + "locked": false + }, + { + "id": "d28sVSeqD7ZfcpnCUPhEV", + "type": "rectangle", + "x": -2215.00442430737, + "y": -4787.864026170268, + "width": 664.1912411971831, + "height": 491.1830985915493, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#b2f2bb", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [ + "8L44eYOYO7FDP2Zg1MlGt", + "fOcHMc9ibAwtyrNzv-fW2" + ], + "frameId": null, + "index": "b31", + "roundness": null, + "seed": 191534818, + "version": 116, + "versionNonce": 1898409442, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "NA8oNuGt4fh3m1DthNwkE" + } + ], + "updated": 1738868692592, + "link": null, + "locked": false + }, + { + "id": "A2RHneu8H0fGDdpLB7tBJ", + "type": "rectangle", + "x": -1988.5520878930506, + "y": -4744.319425231301, + "width": 259.4986062206573, + "height": 76.63849765258216, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#b2f2bb", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [ + "8L44eYOYO7FDP2Zg1MlGt", + "fOcHMc9ibAwtyrNzv-fW2" + ], + "frameId": null, + "index": "b32", + "roundness": null, + "seed": 1134922018, + "version": 118, + "versionNonce": 699947326, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "CtpnCpFfWLdxLVvedMba5" + }, + { + "id": "kDU7e25YwdEMqvAFaCfwu", + "type": "arrow" + }, + { + "id": "oALAJlovVFoi_38XF4DOW", + "type": "arrow" + } + ], + "updated": 1738868692592, + "link": null, + "locked": false + }, + { + "id": "aCskzcYN27x7cynUC4saW", + "type": "rectangle", + "x": -2130.895306056196, + "y": -4580.591725700784, + "width": 254.79034624413146, + "height": 76.63849765258216, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffec99", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [ + "8L44eYOYO7FDP2Zg1MlGt", + "fOcHMc9ibAwtyrNzv-fW2" + ], + "frameId": null, + "index": "b33", + "roundness": null, + "seed": 438047970, + "version": 122, + "versionNonce": 1168604419, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "yQK62_6M8KI3F6JJLR9LS" + }, + { + "id": "kDU7e25YwdEMqvAFaCfwu", + "type": "arrow" + }, + { + "id": "jeot-u8S5-vTtE_yHkMI5", + "type": "arrow" + }, + { + "id": "Fwx5NZsMkIR2630Y4XWgt", + "type": "arrow" + } + ], + "updated": 1739265694968, + "link": null, + "locked": false + }, + { + "id": "YMdaT_7SIJWQw88SC4lKI", + "type": "rectangle", + "x": -1789.0157579341305, + "y": -4580.591725700784, + "width": 149.8206426056338, + "height": 76.63849765258216, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffc9c9", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [ + "8L44eYOYO7FDP2Zg1MlGt", + "fOcHMc9ibAwtyrNzv-fW2" + ], + "frameId": null, + "index": "b34", + "roundness": null, + "seed": 1095444642, + "version": 119, + "versionNonce": 251383747, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "hf32z2Siv6dHsHwUnDoa9" + }, + { + "id": "oALAJlovVFoi_38XF4DOW", + "type": "arrow" + }, + { + "id": "jeot-u8S5-vTtE_yHkMI5", + "type": "arrow" + } + ], + "updated": 1739188806761, + "link": null, + "locked": false + }, + { + "id": "Jt3KXMwuTXW_WUfPAAo20", + "type": "rectangle", + "x": -2154.041982992816, + "y": -4416.864026170268, + "width": 301.0837001173709, + "height": 76.63849765258216, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffec99", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [ + "8L44eYOYO7FDP2Zg1MlGt", + "fOcHMc9ibAwtyrNzv-fW2" + ], + "frameId": null, + "index": "b35", + "roundness": null, + "seed": 551666786, + "version": 123, + "versionNonce": 1419039171, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "uCkY73YAeDCRobquy1ap_" + }, + { + "id": "DSjqSaeG5wuUW0oTNN6gO", + "type": "arrow" + }, + { + "id": "Fwx5NZsMkIR2630Y4XWgt", + "type": "arrow" + } + ], + "updated": 1739265694968, + "link": null, + "locked": false + }, + { + "id": "kDU7e25YwdEMqvAFaCfwu", + "type": "arrow", + "x": -1926.766711398967, + "y": -4666.680927578718, + "width": 76.73309495065678, + "height": 75.98685446009404, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#b2f2bb", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [ + "8L44eYOYO7FDP2Zg1MlGt", + "fOcHMc9ibAwtyrNzv-fW2" + ], + "frameId": null, + "index": "b36", + "roundness": { + "type": 2 + }, + "seed": 1318111010, + "version": 336, + "versionNonce": 1023779262, + "isDeleted": false, + "boundElements": [], + "updated": 1738868692592, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + -76.73309495065666, + 42.54460093896695 + ], + [ + -76.73309495065678, + 75.98685446009404 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "A2RHneu8H0fGDdpLB7tBJ", + "focus": -0.014844242323280478, + "gap": 1, + "fixedPoint": null + }, + "endBinding": { + "elementId": "aCskzcYN27x7cynUC4saW", + "focus": 0.0000025635547945955497, + "gap": 10.102347417840065, + "fixedPoint": null + }, + "startArrowhead": null, + "endArrowhead": "arrow", + "elbowed": false + }, + { + "id": "oALAJlovVFoi_38XF4DOW", + "type": "arrow", + "x": -1790.838967027979, + "y": -4666.680927578718, + "width": 76.73309495065587, + "height": 75.98685446009404, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#b2f2bb", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [ + "8L44eYOYO7FDP2Zg1MlGt", + "fOcHMc9ibAwtyrNzv-fW2" + ], + "frameId": null, + "index": "b37", + "roundness": { + "type": 2 + }, + "seed": 1626313442, + "version": 336, + "versionNonce": 955048226, + "isDeleted": false, + "boundElements": [], + "updated": 1738868692592, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 76.73309495065575, + 42.54460093896695 + ], + [ + 76.73309495065587, + 75.98685446009404 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "A2RHneu8H0fGDdpLB7tBJ", + "focus": 0.014844789746762505, + "gap": 1, + "fixedPoint": null + }, + "endBinding": { + "elementId": "YMdaT_7SIJWQw88SC4lKI", + "focus": -0.000005812897364906603, + "gap": 10.102347417840065, + "fixedPoint": null + }, + "startArrowhead": null, + "endArrowhead": "arrow", + "elbowed": false + }, + { + "id": "Ob0OCX23MOiEbsyYw09Q_", + "type": "text", + "x": -1993.1568582131727, + "y": -4826.408627109235, + "width": 220.49610900878906, + "height": 43.544600938967136, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#b2f2bb", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [ + "fOcHMc9ibAwtyrNzv-fW2" + ], + "frameId": null, + "index": "b39", + "roundness": null, + "seed": 952504802, + "version": 210, + "versionNonce": 481848546, + "isDeleted": false, + "boundElements": [], + "updated": 1738868692592, + "link": null, + "locked": false, + "text": "Google Cloud", + "fontSize": 34.83568075117371, + "fontFamily": 5, + "textAlign": "center", + "verticalAlign": "top", + "containerId": "5_W8BA86fmJwBrO8OOuPX", + "originalText": "Google Cloud", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "NA8oNuGt4fh3m1DthNwkE", + "type": "text", + "x": -1919.667890317665, + "y": -4782.864026170268, + "width": 73.51817321777344, + "height": 43.544600938967136, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#b2f2bb", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [ + "8L44eYOYO7FDP2Zg1MlGt", + "fOcHMc9ibAwtyrNzv-fW2" + ], + "frameId": null, + "index": "b3A", + "roundness": null, + "seed": 1403880866, + "version": 190, + "versionNonce": 2063256126, + "isDeleted": false, + "boundElements": [], + "updated": 1738868692592, + "link": null, + "locked": false, + "text": "GKE", + "fontSize": 34.83568075117371, + "fontFamily": 5, + "textAlign": "center", + "verticalAlign": "top", + "containerId": "d28sVSeqD7ZfcpnCUPhEV", + "originalText": "GKE", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "CtpnCpFfWLdxLVvedMba5", + "type": "text", + "x": -1954.3762787402416, + "y": -4727.772476874493, + "width": 191.14698791503906, + "height": 43.544600938967136, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#b2f2bb", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [ + "8L44eYOYO7FDP2Zg1MlGt", + "fOcHMc9ibAwtyrNzv-fW2" + ], + "frameId": null, + "index": "b3B", + "roundness": null, + "seed": 1745653730, + "version": 187, + "versionNonce": 1587314850, + "isDeleted": false, + "boundElements": [], + "updated": 1738868692592, + "link": null, + "locked": false, + "text": "Deployment", + "fontSize": 34.83568075117371, + "fontFamily": 5, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "A2RHneu8H0fGDdpLB7tBJ", + "originalText": "Deployment", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "yQK62_6M8KI3F6JJLR9LS", + "type": "text", + "x": -2103.0778459468256, + "y": -4564.044777343976, + "width": 199.15542602539062, + "height": 43.544600938967136, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#b2f2bb", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [ + "8L44eYOYO7FDP2Zg1MlGt", + "fOcHMc9ibAwtyrNzv-fW2" + ], + "frameId": null, + "index": "b3C", + "roundness": null, + "seed": 292832162, + "version": 187, + "versionNonce": 1206047358, + "isDeleted": false, + "boundElements": [], + "updated": 1738868692592, + "link": null, + "locked": false, + "text": "Prometheus", + "fontSize": 34.83568075117371, + "fontFamily": 5, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "aCskzcYN27x7cynUC4saW", + "originalText": "Prometheus", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "hf32z2Siv6dHsHwUnDoa9", + "type": "text", + "x": -1770.3147643290677, + "y": -4564.044777343976, + "width": 112.41865539550781, + "height": 43.544600938967136, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#b2f2bb", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [ + "8L44eYOYO7FDP2Zg1MlGt", + "fOcHMc9ibAwtyrNzv-fW2" + ], + "frameId": null, + "index": "b3D", + "roundness": null, + "seed": 1664057186, + "version": 187, + "versionNonce": 977804386, + "isDeleted": false, + "boundElements": [], + "updated": 1738868692592, + "link": null, + "locked": false, + "text": "Retina", + "fontSize": 34.83568075117371, + "fontFamily": 5, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "YMdaT_7SIJWQw88SC4lKI", + "originalText": "Retina", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "uCkY73YAeDCRobquy1ap_", + "type": "text", + "x": -2122.9611314692866, + "y": -4400.31707781346, + "width": 238.9219970703125, + "height": 43.544600938967136, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#b2f2bb", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [ + "8L44eYOYO7FDP2Zg1MlGt", + "fOcHMc9ibAwtyrNzv-fW2" + ], + "frameId": null, + "index": "b3E", + "roundness": null, + "seed": 428688162, + "version": 187, + "versionNonce": 52417214, + "isDeleted": false, + "boundElements": [], + "updated": 1738868692592, + "link": null, + "locked": false, + "text": "Load Balancer", + "fontSize": 34.83568075117371, + "fontFamily": 5, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "Jt3KXMwuTXW_WUfPAAo20", + "originalText": "Load Balancer", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "ySLiFMO4r4b4LlrRsv9sX", + "type": "rectangle", + "x": -3018.538388509248, + "y": -4831.408627109235, + "width": 733.8626026995305, + "height": 578.2723004694836, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#a5d8ff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [ + "bt-VhRQhDFqv8jcCszqVa" + ], + "frameId": null, + "index": "b46", + "roundness": null, + "seed": 1232693922, + "version": 111, + "versionNonce": 1820238718, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "0k-vgU5nVIbAPjb0Tq7r8" + } + ], + "updated": 1738868697737, + "link": null, + "locked": false + }, + { + "id": "aSvGjP4QbabYEHlnAgE3c", + "type": "rectangle", + "x": -2983.702707758074, + "y": -4787.864026170268, + "width": 664.1912411971831, + "height": 491.1830985915493, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#a5d8ff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [ + "PaaD7t02Cbaj_dpdXMJsB", + "bt-VhRQhDFqv8jcCszqVa" + ], + "frameId": null, + "index": "b47", + "roundness": null, + "seed": 1308083810, + "version": 113, + "versionNonce": 1081301630, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "i0rUd_n3FWos5cjK1Dnu2" + } + ], + "updated": 1738868731897, + "link": null, + "locked": false + }, + { + "id": "gaSIjLioK91UP6ZKn02GG", + "type": "rectangle", + "x": -2757.250371343755, + "y": -4744.319425231301, + "width": 259.4986062206573, + "height": 76.63849765258216, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#a5d8ff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [ + "PaaD7t02Cbaj_dpdXMJsB", + "bt-VhRQhDFqv8jcCszqVa" + ], + "frameId": null, + "index": "b48", + "roundness": null, + "seed": 833923618, + "version": 115, + "versionNonce": 920917090, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "nfObjFuMAdQeg4qWRsBsn" + }, + { + "id": "wLDFKwCFlsFH2rDkYCIj-", + "type": "arrow" + }, + { + "id": "B2ZybM6g3eqzdDPBOWFx6", + "type": "arrow" + } + ], + "updated": 1738868731897, + "link": null, + "locked": false + }, + { + "id": "P0mrMQhq0Ho30iSPherV-", + "type": "rectangle", + "x": -2899.5935895069006, + "y": -4580.591725700784, + "width": 254.79034624413146, + "height": 76.63849765258216, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffec99", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [ + "PaaD7t02Cbaj_dpdXMJsB", + "bt-VhRQhDFqv8jcCszqVa" + ], + "frameId": null, + "index": "b49", + "roundness": null, + "seed": 463410658, + "version": 120, + "versionNonce": 1020224259, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "tscBhKdnq7GYtaDZARFAx" + }, + { + "id": "wLDFKwCFlsFH2rDkYCIj-", + "type": "arrow" + }, + { + "id": "zWFufuHJi7CLphBMnMldg", + "type": "arrow" + }, + { + "id": "YEMWrrusmwSNpbwxTPjiY", + "type": "arrow" + } + ], + "updated": 1739265688212, + "link": null, + "locked": false + }, + { + "id": "K47BC13LcdrvsNLazxRE7", + "type": "rectangle", + "x": -2557.7140413848347, + "y": -4580.591725700784, + "width": 149.8206426056338, + "height": 76.63849765258216, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffc9c9", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [ + "PaaD7t02Cbaj_dpdXMJsB", + "bt-VhRQhDFqv8jcCszqVa" + ], + "frameId": null, + "index": "b4A", + "roundness": null, + "seed": 2093353378, + "version": 116, + "versionNonce": 2117781251, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "l1Vvgj_0UQDsc3lRNN_Dj" + }, + { + "id": "B2ZybM6g3eqzdDPBOWFx6", + "type": "arrow" + }, + { + "id": "zWFufuHJi7CLphBMnMldg", + "type": "arrow" + } + ], + "updated": 1739188798896, + "link": null, + "locked": false + }, + { + "id": "yKavBaPFLcmv_bmePHGVO", + "type": "rectangle", + "x": -2922.7402664435203, + "y": -4416.864026170268, + "width": 301.0837001173709, + "height": 76.63849765258216, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffec99", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [ + "PaaD7t02Cbaj_dpdXMJsB", + "bt-VhRQhDFqv8jcCszqVa" + ], + "frameId": null, + "index": "b4B", + "roundness": null, + "seed": 1280869730, + "version": 120, + "versionNonce": 1314797507, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "MGMD6CcTmmrjeH1zsUf44" + }, + { + "id": "cfQ6jN5FceKgSHuAPjtTz", + "type": "arrow" + }, + { + "id": "YEMWrrusmwSNpbwxTPjiY", + "type": "arrow" + } + ], + "updated": 1739265688212, + "link": null, + "locked": false + }, + { + "id": "u9MMGbZqVWiGYV6ZaSm8e", + "type": "rectangle", + "x": -2464.6578684094825, + "y": -4166.047124761817, + "width": 181.03667840375587, + "height": 98, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffec99", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b4G", + "roundness": null, + "seed": 1387194402, + "version": 118, + "versionNonce": 109556877, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "wOH_Q7yt7xcYe_utGkmP1" + }, + { + "id": "cfQ6jN5FceKgSHuAPjtTz", + "type": "arrow" + }, + { + "id": "DSjqSaeG5wuUW0oTNN6gO", + "type": "arrow" + } + ], + "updated": 1739188783428, + "link": null, + "locked": false + }, + { + "id": "wLDFKwCFlsFH2rDkYCIj-", + "type": "arrow", + "x": -2695.464777126667, + "y": -4666.680927578718, + "width": 76.73309495065632, + "height": 75.98685446009404, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#a5d8ff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [ + "PaaD7t02Cbaj_dpdXMJsB", + "bt-VhRQhDFqv8jcCszqVa" + ], + "frameId": null, + "index": "b4H", + "roundness": { + "type": 2 + }, + "seed": 1587647458, + "version": 333, + "versionNonce": 1270560418, + "isDeleted": false, + "boundElements": [], + "updated": 1738868731898, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + -76.73309495065621, + 42.54460093896695 + ], + [ + -76.73309495065632, + 75.98685446009404 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "gaSIjLioK91UP6ZKn02GG", + "focus": -0.014845337170242176, + "gap": 1, + "fixedPoint": null + }, + "endBinding": { + "elementId": "P0mrMQhq0Ho30iSPherV-", + "focus": 0.000004272591324920846, + "gap": 10.102347417840065, + "fixedPoint": null + }, + "startArrowhead": null, + "endArrowhead": "arrow", + "elbowed": false + }, + { + "id": "B2ZybM6g3eqzdDPBOWFx6", + "type": "arrow", + "x": -2559.537032755679, + "y": -4666.680927578718, + "width": 76.73309495065632, + "height": 75.98685446009404, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#a5d8ff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [ + "PaaD7t02Cbaj_dpdXMJsB", + "bt-VhRQhDFqv8jcCszqVa" + ], + "frameId": null, + "index": "b4I", + "roundness": { + "type": 2 + }, + "seed": 1992869794, + "version": 333, + "versionNonce": 1042289250, + "isDeleted": false, + "boundElements": [], + "updated": 1738868731898, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 76.73309495065621, + 42.54460093896695 + ], + [ + 76.73309495065632, + 75.98685446009404 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "gaSIjLioK91UP6ZKn02GG", + "focus": 0.014843694899800591, + "gap": 1, + "fixedPoint": null + }, + "endBinding": { + "elementId": "K47BC13LcdrvsNLazxRE7", + "focus": -0.0000029064486854885798, + "gap": 10.102347417840065, + "fixedPoint": null + }, + "startArrowhead": null, + "endArrowhead": "arrow", + "elbowed": false + }, + { + "id": "0k-vgU5nVIbAPjb0Tq7r8", + "type": "text", + "x": -2699.7111063245216, + "y": -4826.408627109235, + "width": 96.20803833007812, + "height": 43.544600938967136, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#a5d8ff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [ + "bt-VhRQhDFqv8jcCszqVa" + ], + "frameId": null, + "index": "b4R", + "roundness": null, + "seed": 1357939042, + "version": 187, + "versionNonce": 385620578, + "isDeleted": false, + "boundElements": [], + "updated": 1738868697737, + "link": null, + "locked": false, + "text": "Azure", + "fontSize": 34.83568075117371, + "fontFamily": 5, + "textAlign": "center", + "verticalAlign": "top", + "containerId": "ySLiFMO4r4b4LlrRsv9sX", + "originalText": "Azure", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "i0rUd_n3FWos5cjK1Dnu2", + "type": "text", + "x": -2685.0550165418067, + "y": -4782.864026170268, + "width": 66.89585876464844, + "height": 43.544600938967136, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#a5d8ff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [ + "PaaD7t02Cbaj_dpdXMJsB", + "bt-VhRQhDFqv8jcCszqVa" + ], + "frameId": null, + "index": "b4S", + "roundness": null, + "seed": 1809712418, + "version": 187, + "versionNonce": 1955277694, + "isDeleted": false, + "boundElements": [], + "updated": 1738868731897, + "link": null, + "locked": false, + "text": "AKS", + "fontSize": 34.83568075117371, + "fontFamily": 5, + "textAlign": "center", + "verticalAlign": "top", + "containerId": "aSvGjP4QbabYEHlnAgE3c", + "originalText": "AKS", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "nfObjFuMAdQeg4qWRsBsn", + "type": "text", + "x": -2723.074562190946, + "y": -4727.772476874493, + "width": 191.14698791503906, + "height": 43.544600938967136, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#a5d8ff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [ + "PaaD7t02Cbaj_dpdXMJsB", + "bt-VhRQhDFqv8jcCszqVa" + ], + "frameId": null, + "index": "b4T", + "roundness": null, + "seed": 501551330, + "version": 184, + "versionNonce": 1303237474, + "isDeleted": false, + "boundElements": [], + "updated": 1738868731897, + "link": null, + "locked": false, + "text": "Deployment", + "fontSize": 34.83568075117371, + "fontFamily": 5, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "gaSIjLioK91UP6ZKn02GG", + "originalText": "Deployment", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "tscBhKdnq7GYtaDZARFAx", + "type": "text", + "x": -2871.77612939753, + "y": -4564.044777343976, + "width": 199.15542602539062, + "height": 43.544600938967136, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#a5d8ff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [ + "PaaD7t02Cbaj_dpdXMJsB", + "bt-VhRQhDFqv8jcCszqVa" + ], + "frameId": null, + "index": "b4U", + "roundness": null, + "seed": 1519690914, + "version": 184, + "versionNonce": 190122942, + "isDeleted": false, + "boundElements": [], + "updated": 1738868731897, + "link": null, + "locked": false, + "text": "Prometheus", + "fontSize": 34.83568075117371, + "fontFamily": 5, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "P0mrMQhq0Ho30iSPherV-", + "originalText": "Prometheus", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "l1Vvgj_0UQDsc3lRNN_Dj", + "type": "text", + "x": -2539.0130477797716, + "y": -4564.044777343976, + "width": 112.41865539550781, + "height": 43.544600938967136, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#a5d8ff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [ + "PaaD7t02Cbaj_dpdXMJsB", + "bt-VhRQhDFqv8jcCszqVa" + ], + "frameId": null, + "index": "b4V", + "roundness": null, + "seed": 1268498530, + "version": 184, + "versionNonce": 1226905378, + "isDeleted": false, + "boundElements": [], + "updated": 1738868731897, + "link": null, + "locked": false, + "text": "Retina", + "fontSize": 34.83568075117371, + "fontFamily": 5, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "K47BC13LcdrvsNLazxRE7", + "originalText": "Retina", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "MGMD6CcTmmrjeH1zsUf44", + "type": "text", + "x": -2891.659414919991, + "y": -4400.31707781346, + "width": 238.9219970703125, + "height": 43.544600938967136, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#a5d8ff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [ + "PaaD7t02Cbaj_dpdXMJsB", + "bt-VhRQhDFqv8jcCszqVa" + ], + "frameId": null, + "index": "b4W", + "roundness": null, + "seed": 214524962, + "version": 184, + "versionNonce": 645456894, + "isDeleted": false, + "boundElements": [], + "updated": 1738868731897, + "link": null, + "locked": false, + "text": "Load Balancer", + "fontSize": 34.83568075117371, + "fontFamily": 5, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "yKavBaPFLcmv_bmePHGVO", + "originalText": "Load Balancer", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "wOH_Q7yt7xcYe_utGkmP1", + "type": "text", + "x": -2442.5792112144404, + "y": -4160.591725700784, + "width": 136.87936401367188, + "height": 87.08920187793427, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b4b", + "roundness": null, + "seed": 251432674, + "version": 188, + "versionNonce": 1864249122, + "isDeleted": false, + "boundElements": [], + "updated": 1738868618892, + "link": null, + "locked": false, + "text": "Grafana\nCloud", + "fontSize": 34.83568075117371, + "fontFamily": 5, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "u9MMGbZqVWiGYV6ZaSm8e", + "originalText": "Grafana Cloud", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "cfQ6jN5FceKgSHuAPjtTz", + "type": "arrow", + "x": -2466.210263509248, + "y": -4120.408627109235, + "width": 313, + "height": 218, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffc9c9", + "fillStyle": "hachure", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b4c", + "roundness": { + "type": 2 + }, + "seed": 1379029549, + "version": 107, + "versionNonce": 824194339, + "isDeleted": false, + "boundElements": null, + "updated": 1739188774980, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + -236, + -31 + ], + [ + -313, + -218 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "u9MMGbZqVWiGYV6ZaSm8e", + "focus": -0.14341464045019223, + "gap": 1.5523950997653628, + "fixedPoint": null + }, + "endBinding": { + "elementId": "yKavBaPFLcmv_bmePHGVO", + "focus": 0.14152504609275607, + "gap": 1.8169014084505761, + "fixedPoint": null + }, + "startArrowhead": null, + "endArrowhead": "arrow", + "elbowed": false + }, + { + "id": "DSjqSaeG5wuUW0oTNN6gO", + "type": "arrow", + "x": -2285.210263509248, + "y": -4119.408627109235, + "width": 285, + "height": 222, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffc9c9", + "fillStyle": "hachure", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b4d", + "roundness": { + "type": 2 + }, + "seed": 1715706051, + "version": 129, + "versionNonce": 1284813517, + "isDeleted": false, + "boundElements": null, + "updated": 1739188787635, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 238, + -32 + ], + [ + 285, + -222 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "u9MMGbZqVWiGYV6ZaSm8e", + "focus": 0.1568626794957365, + "gap": 1, + "fixedPoint": null + }, + "endBinding": { + "elementId": "Jt3KXMwuTXW_WUfPAAo20", + "focus": -0.07796598033823895, + "gap": 1, + "fixedPoint": null + }, + "startArrowhead": null, + "endArrowhead": "arrow", + "elbowed": false + }, + { + "id": "zWFufuHJi7CLphBMnMldg", + "type": "arrow", + "x": -2644.210263509248, + "y": -4542.408627109235, + "width": 85, + "height": 0, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffc9c9", + "fillStyle": "hachure", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b4e", + "roundness": { + "type": 2 + }, + "seed": 226747427, + "version": 65, + "versionNonce": 32516963, + "isDeleted": false, + "boundElements": null, + "updated": 1739188798896, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 85, + 0 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "P0mrMQhq0Ho30iSPherV-", + "focus": -0.0035530507228614863, + "gap": 1, + "fixedPoint": null + }, + "endBinding": { + "elementId": "K47BC13LcdrvsNLazxRE7", + "focus": 0.0035530507228614863, + "gap": 1.4962221244131797, + "fixedPoint": null + }, + "startArrowhead": null, + "endArrowhead": "arrow", + "elbowed": false + }, + { + "id": "jeot-u8S5-vTtE_yHkMI5", + "type": "arrow", + "x": -1876.2102635092479, + "y": -4539.408627109235, + "width": 85, + "height": 0, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffc9c9", + "fillStyle": "hachure", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b4f", + "roundness": { + "type": 2 + }, + "seed": 1289027853, + "version": 77, + "versionNonce": 1647813123, + "isDeleted": false, + "boundElements": null, + "updated": 1739188818249, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 85, + 0 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "aCskzcYN27x7cynUC4saW", + "focus": 0.07473658417054697, + "gap": 1, + "fixedPoint": null + }, + "endBinding": { + "elementId": "YMdaT_7SIJWQw88SC4lKI", + "focus": -0.07473658417054699, + "gap": 2.194505575117205, + "fixedPoint": null + }, + "startArrowhead": null, + "endArrowhead": "arrow", + "elbowed": false + }, + { + "id": "YEMWrrusmwSNpbwxTPjiY", + "type": "arrow", + "x": -2785.210263509248, + "y": -4417.408627109235, + "width": 2, + "height": 83, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffc9c9", + "fillStyle": "hachure", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b4g", + "roundness": { + "type": 2 + }, + "seed": 513863011, + "version": 29, + "versionNonce": 1038632803, + "isDeleted": false, + "boundElements": null, + "updated": 1739265688212, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 2, + -83 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "yKavBaPFLcmv_bmePHGVO", + "focus": -0.09208930453946242, + "gap": 1, + "fixedPoint": null + }, + "endBinding": { + "elementId": "P0mrMQhq0Ho30iSPherV-", + "focus": 0.07795506834372791, + "gap": 3.5446009389670508, + "fixedPoint": null + }, + "startArrowhead": null, + "endArrowhead": "arrow", + "elbowed": false + }, + { + "id": "Fwx5NZsMkIR2630Y4XWgt", + "type": "arrow", + "x": -2004.2102635092479, + "y": -4417.408627109235, + "width": 2, + "height": 88, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffc9c9", + "fillStyle": "hachure", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b4h", + "roundness": { + "type": 2 + }, + "seed": 1315153165, + "version": 24, + "versionNonce": 909877603, + "isDeleted": false, + "boundElements": null, + "updated": 1739265694968, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + -2, + -88 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "Jt3KXMwuTXW_WUfPAAo20", + "focus": 0.001143488555546266, + "gap": 1, + "fixedPoint": null + }, + "endBinding": { + "elementId": "aCskzcYN27x7cynUC4saW", + "focus": 0.027660826256840885, + "gap": 1, + "fixedPoint": null + }, + "startArrowhead": null, + "endArrowhead": "arrow", + "elbowed": false + } + ], + "appState": { + "gridSize": 20, + "gridStep": 5, + "gridModeEnabled": false, + "viewBackgroundColor": "#ffffff" + }, + "files": {} +} \ No newline at end of file diff --git a/test/multicloud/diagrams/mc.excalidraw:Zone.Identifier b/test/multicloud/diagrams/mc.excalidraw:Zone.Identifier new file mode 100644 index 0000000000..e69de29bb2 diff --git a/test/multicloud/examples/integration/prometheus-kind/main.tf b/test/multicloud/examples/integration/prometheus-kind/main.tf index 92a57f2f67..2372d3d74a 100644 --- a/test/multicloud/examples/integration/prometheus-kind/main.tf +++ b/test/multicloud/examples/integration/prometheus-kind/main.tf @@ -14,7 +14,7 @@ module "retina" { } module "prometheus" { - depends_on = [ + depends_on = [ module.kind, module.retina ] diff --git a/test/multicloud/image.png b/test/multicloud/image.png new file mode 100644 index 0000000000..4e24e1841d Binary files /dev/null and b/test/multicloud/image.png differ diff --git a/test/multicloud/live/files/retina-hubble.yaml b/test/multicloud/live/files/retina-hubble.yaml new file mode 100644 index 0000000000..c34b2b5938 --- /dev/null +++ b/test/multicloud/live/files/retina-hubble.yaml @@ -0,0 +1,29 @@ +# hubble control-plane +operator: + enabled: true + tag: v0.0.24 + repository: ghcr.io/microsoft/retina/retina-operator + +agent: + enabled: true + repository: ghcr.io/microsoft/retina/retina-agent + tag: v0.0.24 + init: + enabled: true + repository: ghcr.io/microsoft/retina/retina-init + tag: v0.0.24 + +hubble: + relay: + tls: + server: + enabled: false + tls: + enabled: false + auto: + enabled: false + method: cronJob + certValidityDuration: 1 + schedule: "*/10 * * * *" # every 10 minutes + +enabledPlugin_linux: '["packetparser","dropreason","packetforward","linuxutil","dns"]' diff --git a/test/multicloud/live/files/retina-standard-advanced-local-operator.yaml b/test/multicloud/live/files/retina-standard-advanced-local-operator.yaml new file mode 100644 index 0000000000..b66e396261 --- /dev/null +++ b/test/multicloud/live/files/retina-standard-advanced-local-operator.yaml @@ -0,0 +1,16 @@ +# advanced/pod-level mode designed for scale +# metrics are aggregated by "local" Pod (source for outgoing traffic, destination for incoming traffic) +image: + repository: ghcr.io/microsoft/retina/retina-agent + initRepository: ghcr.io/microsoft/retina/retina-init + tag: v0.0.24 + +operator: + enabled: true + enableRetinaEndpoint: true + tag: v0.0.24 + repository: ghcr.io/microsoft/retina/retina-operator + +enabledPlugin_linux: '["packetparser","dropreason","packetforward","linuxutil","dns"]' +enablePodLevel: true +enableAnnotations: true diff --git a/test/multicloud/live/files/retina-standard-advanced-remote-operator.yaml b/test/multicloud/live/files/retina-standard-advanced-remote-operator.yaml new file mode 100644 index 0000000000..f752cb2b2a --- /dev/null +++ b/test/multicloud/live/files/retina-standard-advanced-remote-operator.yaml @@ -0,0 +1,17 @@ +# advanced/pod-level mode with scale limitations +# metrics are aggregated by source and destination Pod +image: + repository: ghcr.io/microsoft/retina/retina-agent + initRepository: ghcr.io/microsoft/retina/retina-init + tag: v0.0.24 + +operator: + enabled: true + enableRetinaEndpoint: true + tag: v0.0.24 + repository: ghcr.io/microsoft/retina/retina-operator + +enabledPlugin_linux: '["packetparser","dropreason","packetforward","linuxutil","dns"]' +enablePodLevel: true +enableAnnotations: true +remoteContext: true diff --git a/test/multicloud/live/files/retina-standard-basic-mode.yaml b/test/multicloud/live/files/retina-standard-basic-mode.yaml new file mode 100644 index 0000000000..b873e00860 --- /dev/null +++ b/test/multicloud/live/files/retina-standard-basic-mode.yaml @@ -0,0 +1,6 @@ +# basic/node-level mode +image: + rag: v0.0.24 +operator: + tag: v0.0.24 +enabledPlugin_linux: '["dropreason","packetforward","linuxutil","dns"]' diff --git a/test/multicloud/live/retina-aks/locals.tf b/test/multicloud/live/retina-aks/locals.tf index dd6869dee5..7b80b77988 100644 --- a/test/multicloud/live/retina-aks/locals.tf +++ b/test/multicloud/live/retina-aks/locals.tf @@ -3,25 +3,19 @@ locals { resource_group_name = "mc-rg" prefix = "mc" - retina_release_name = "retina" - retina_repository_url = "oci://ghcr.io/microsoft/retina/charts" - retina_chart_version = "v0.0.24" - retina_chart_name = "retina" - retina_values = { - image = { - tag = "v0.0.24" - } - logLevel = "info" - operator = { - tag = "v0.0.24" - } - } + retina_release_name = "retina" + retina_release_namespace = "kube-system" + retina_repository_url = "oci://ghcr.io/microsoft/retina/charts" + retina_chart_version = "v0.0.24" + retina_chart_name = "retina-hubble" + retina_values = yamldecode(file("../files/retina-hubble.yaml")) - prometheus_release_name = "prometheus" - prometheus_repository_url = "https://prometheus-community.github.io/helm-charts" - prometheus_chart_version = "68.4.3" - prometheus_chart_name = "kube-prometheus-stack" - prometheus_values = yamldecode(file("../../../../deploy/standard/prometheus/values.yaml")) + prometheus_release_name = "prometheus" + prometheus_release_namespace = "kube-system" + prometheus_repository_url = "https://prometheus-community.github.io/helm-charts" + prometheus_chart_version = "68.4.3" + prometheus_chart_name = "kube-prometheus-stack" + prometheus_values = yamldecode(file("../../../../deploy/standard/prometheus/values.yaml")) aks_security_rules = [ { @@ -50,7 +44,7 @@ locals { default_node_pool = { name = "agentpool" - node_count = 2 + node_count = 3 vm_size = "standard_a2_v2" os_disk_size_gb = 128 os_disk_type = "Managed" diff --git a/test/multicloud/live/retina-aks/main.tf b/test/multicloud/live/retina-aks/main.tf index b3d572bb4e..c8b1b6b69b 100644 --- a/test/multicloud/live/retina-aks/main.tf +++ b/test/multicloud/live/retina-aks/main.tf @@ -7,23 +7,25 @@ module "aks" { } module "retina_aks" { - depends_on = [module.aks] - source = "../../modules/helm-release" - chart_version = local.retina_chart_version - release_name = local.retina_release_name - repository_url = local.retina_repository_url - chart_name = local.retina_chart_name - values = local.retina_values + depends_on = [module.aks] + source = "../../modules/helm-release" + chart_version = local.retina_chart_version + release_name = local.retina_release_name + release_namespace = local.retina_release_namespace + repository_url = local.retina_repository_url + chart_name = local.retina_chart_name + values = local.retina_values } module "prometheus_aks" { - depends_on = [module.aks] - source = "../../modules/helm-release" - chart_version = local.prometheus_chart_version - values = local.prometheus_values - release_name = local.prometheus_release_name - repository_url = local.prometheus_repository_url - chart_name = local.prometheus_chart_name + depends_on = [module.aks] + source = "../../modules/helm-release" + chart_version = local.prometheus_chart_version + values = local.prometheus_values + release_name = local.prometheus_release_name + release_namespace = local.prometheus_release_namespace + repository_url = local.prometheus_repository_url + chart_name = local.prometheus_chart_name } module "prometheus_lb_aks" { diff --git a/test/multicloud/live/retina-gke/locals.tf b/test/multicloud/live/retina-gke/locals.tf index c8a2cc4642..e5cdba2086 100644 --- a/test/multicloud/live/retina-gke/locals.tf +++ b/test/multicloud/live/retina-gke/locals.tf @@ -4,25 +4,19 @@ locals { machine_type = "e2-standard-4" - retina_release_name = "retina" - retina_repository_url = "oci://ghcr.io/microsoft/retina/charts" - retina_chart_version = "v0.0.24" - retina_chart_name = "retina" - retina_values = { - image = { - tag = "v0.0.24" - } - logLevel = "info" - operator = { - tag = "v0.0.24" - } - } + retina_release_name = "retina" + retina_repository_url = "oci://ghcr.io/microsoft/retina/charts" + retina_chart_version = "v0.0.24" + retina_release_namespace = "kube-system" + retina_chart_name = "retina-hubble" + retina_values = yamldecode(file("../files/retina-hubble.yaml")) - prometheus_release_name = "prometheus" - prometheus_repository_url = "https://prometheus-community.github.io/helm-charts" - prometheus_chart_version = "68.4.3" - prometheus_chart_name = "kube-prometheus-stack" - prometheus_values = yamldecode(file("../../../../deploy/standard/prometheus/values.yaml")) + prometheus_release_name = "prometheus" + prometheus_repository_url = "https://prometheus-community.github.io/helm-charts" + prometheus_chart_version = "68.4.3" + prometheus_chart_name = "kube-prometheus-stack" + prometheus_release_namespace = "kube-system" + prometheus_values = yamldecode(file("../../../../deploy/standard/prometheus/values.yaml")) gke_firwall_rules = { inbound = { diff --git a/test/multicloud/live/retina-gke/main.tf b/test/multicloud/live/retina-gke/main.tf index db0e5c8f2b..0b912c3157 100644 --- a/test/multicloud/live/retina-gke/main.tf +++ b/test/multicloud/live/retina-gke/main.tf @@ -7,23 +7,25 @@ module "gke" { } module "retina_gke" { - depends_on = [module.gke] - source = "../../modules/helm-release" - chart_version = local.retina_chart_version - release_name = local.retina_release_name - repository_url = local.retina_repository_url - chart_name = local.retina_chart_name - values = local.retina_values + depends_on = [module.gke] + source = "../../modules/helm-release" + chart_version = local.retina_chart_version + release_name = local.retina_release_name + release_namespace = local.retina_release_namespace + repository_url = local.retina_repository_url + chart_name = local.retina_chart_name + values = local.retina_values } module "prometheus_gke" { - depends_on = [module.gke] - source = "../../modules/helm-release" - chart_version = local.prometheus_chart_version - values = local.prometheus_values - release_name = local.prometheus_release_name - repository_url = local.prometheus_repository_url - chart_name = local.prometheus_chart_name + depends_on = [module.gke] + source = "../../modules/helm-release" + chart_version = local.prometheus_chart_version + values = local.prometheus_values + release_name = local.prometheus_release_name + release_namespace = local.prometheus_release_namespace + repository_url = local.prometheus_repository_url + chart_name = local.prometheus_chart_name } module "prometheus_lb_gke" { diff --git a/test/multicloud/live/retina-kind/.terraform.lock.hcl b/test/multicloud/live/retina-kind/.terraform.lock.hcl new file mode 100644 index 0000000000..a641109262 --- /dev/null +++ b/test/multicloud/live/retina-kind/.terraform.lock.hcl @@ -0,0 +1,34 @@ +# This file is maintained automatically by "tofu init". +# Manual edits may be lost in future updates. + +provider "registry.opentofu.org/hashicorp/helm" { + version = "2.17.0" + constraints = "2.17.0" + hashes = [ + "h1:69PnHoYrrDrm7C8+8PiSvRGPI55taqL14SvQR/FGM+g=", + "zh:02690815e35131a42cb9851f63a3369c216af30ad093d05b39001d43da04b56b", + "zh:27a62f12b29926387f4d71aeeee9f7ffa0ccb81a1b6066ee895716ad050d1b7a", + "zh:2d0a5babfa73604b3fefc9dab9c87f91c77fce756c2e32b294e9f1290aed26c0", + "zh:3976400ceba6dda4636e1d297e3097e1831de5628afa534a166de98a70d1dcbe", + "zh:54440ef14f342b41d75c1aded7487bfcc3f76322b75894235b47b7e89ac4bfa4", + "zh:6512e2ab9f2fa31cbb90d9249647b5c5798f62eb1215ec44da2cdaa24e38ad25", + "zh:795f327ca0b8c5368af0ed03d5d4f6da7260692b4b3ca0bd004ed542e683464d", + "zh:ba659e1d94f224bc3f1fd34cbb9d2663e3a8e734108e5a58eb49eda84b140978", + "zh:c5c8575c4458835c2acbc3d1ed5570589b14baa2525d8fbd04295c097caf41eb", + "zh:e0877a5dac3de138e61eefa26b2f5a13305a17259779465899880f70e11314e0", + ] +} + +provider "registry.opentofu.org/tehcyx/kind" { + version = "0.7.0" + constraints = "0.7.0" + hashes = [ + "h1:nFhFHmE5+dCd9S9dEMwnMNWzyxoVipYobkhXYoDbhgA=", + "zh:171a2fb0137bfbdebd56cd65afd2e0e2167315fe4cb6a07a218db40cb17339c3", + "zh:3260b078b7997ddfd03845326ffaeed7f678eeaaf7918430356f22e299e36f22", + "zh:4066ab3feb482a0dd1bfff6590d89a0ec30478f63c9d8253cfdadb4b8db2234d", + "zh:537af73261d53f4840d1f89d8e5835c52ddb97102e6314f6aea9b8e49c43d610", + "zh:d63e94d828ba0339600d992b0a6695cff939b0aaac1c39b31d38e3c4f3823674", + "zh:f971c617bf6b37d07a5042f13a9ab02b42d0ceb14934174eecc81abeec233c40", + ] +} diff --git a/test/multicloud/live/retina-kind/locals.tf b/test/multicloud/live/retina-kind/locals.tf new file mode 100644 index 0000000000..04979c8605 --- /dev/null +++ b/test/multicloud/live/retina-kind/locals.tf @@ -0,0 +1,17 @@ +locals { + prefix = "mc" + + retina_release_name = "retina" + retina_release_namespace = "kube-system" + retina_repository_url = "oci://ghcr.io/microsoft/retina/charts" + retina_chart_version = "v0.0.24" + retina_chart_name = "retina" + retina_values = yamldecode(file("../files/retina-standard-advanced-remote-operator.yaml")) + + prometheus_release_name = "prometheus" + prometheus_release_namespace = "kube-system" + prometheus_repository_url = "https://prometheus-community.github.io/helm-charts" + prometheus_chart_version = "68.4.3" + prometheus_chart_name = "kube-prometheus-stack" + prometheus_values = yamldecode(file("../../../../deploy/standard/prometheus/values.yaml")) +} \ No newline at end of file diff --git a/test/multicloud/live/retina-kind/main.tf b/test/multicloud/live/retina-kind/main.tf new file mode 100644 index 0000000000..c847e53e84 --- /dev/null +++ b/test/multicloud/live/retina-kind/main.tf @@ -0,0 +1,26 @@ +module "kind" { + source = "../../modules/kind" + prefix = local.prefix +} + +module "retina_kind" { + depends_on = [module.kind] + source = "../../modules/helm-release" + chart_version = local.retina_chart_version + release_name = local.retina_release_name + release_namespace = local.retina_release_namespace + repository_url = local.retina_repository_url + chart_name = local.retina_chart_name + values = local.retina_values +} + +module "prometheus_kind" { + depends_on = [module.kind] + source = "../../modules/helm-release" + chart_version = local.prometheus_chart_version + values = local.prometheus_values + release_name = local.prometheus_release_name + release_namespace = local.prometheus_release_namespace + repository_url = local.prometheus_repository_url + chart_name = local.prometheus_chart_name +} diff --git a/test/multicloud/live/retina-kind/providers.tf b/test/multicloud/live/retina-kind/providers.tf new file mode 100644 index 0000000000..7b8baf2518 --- /dev/null +++ b/test/multicloud/live/retina-kind/providers.tf @@ -0,0 +1,26 @@ +terraform { + required_version = "1.8.3" + required_providers { + kind = { + source = "tehcyx/kind" + version = "0.7.0" + } + helm = { + source = "hashicorp/helm" + version = "2.17.0" + } + } +} + +# Initialize the kind provider +provider "kind" {} + +# Initialize the Helm provider +provider "helm" { + kubernetes { + host = module.kind.host + client_certificate = module.kind.client_certificate + client_key = module.kind.client_key + cluster_ca_certificate = module.kind.cluster_ca_certificate + } +} \ No newline at end of file diff --git a/test/multicloud/modules/helm-release/main.tf b/test/multicloud/modules/helm-release/main.tf index 6a33458fa3..790a2acbb2 100644 --- a/test/multicloud/modules/helm-release/main.tf +++ b/test/multicloud/modules/helm-release/main.tf @@ -1,5 +1,6 @@ resource "helm_release" "release" { name = var.release_name + namespace = var.release_namespace repository = var.repository_url chart = var.chart_name version = var.chart_version diff --git a/test/multicloud/modules/helm-release/variables.tf b/test/multicloud/modules/helm-release/variables.tf index d450efa04b..fcf86fb2de 100644 --- a/test/multicloud/modules/helm-release/variables.tf +++ b/test/multicloud/modules/helm-release/variables.tf @@ -3,6 +3,12 @@ variable "release_name" { type = string } +variable "release_namespace" { + description = "The namespace to install the Helm chart." + type = string + default = "default" +} + variable "repository_url" { description = "The URL of the Helm repository." type = string diff --git a/test/multicloud/modules/kubernetes-lb/main.tf b/test/multicloud/modules/kubernetes-lb/main.tf index e9b4ceae05..76c28e721b 100644 --- a/test/multicloud/modules/kubernetes-lb/main.tf +++ b/test/multicloud/modules/kubernetes-lb/main.tf @@ -1,6 +1,7 @@ resource "kubernetes_service" "load_balancer_service" { metadata { - name = var.name + name = var.name + namespace = var.namespace } spec { diff --git a/test/multicloud/modules/kubernetes-lb/variables.tf b/test/multicloud/modules/kubernetes-lb/variables.tf index 2da295dc85..4b7a9fe849 100644 --- a/test/multicloud/modules/kubernetes-lb/variables.tf +++ b/test/multicloud/modules/kubernetes-lb/variables.tf @@ -4,6 +4,12 @@ variable "name" { default = "prometheus" } +variable "namespace" { + description = "Namespace for the LoadBalancer service" + type = string + default = "kube-system" +} + variable "label_selector" { description = "Label selector for the backend pods" type = map(string)