diff --git a/README.md b/README.md
index 78a327c..e3daec7 100644
--- a/README.md
+++ b/README.md
@@ -36,6 +36,7 @@
|------|--------|---------|
| [cert\_manager](#module\_cert\_manager) | ./modules/cert-manager | n/a |
| [cert\_manager\_lets\_encrypt\_issuer](#module\_cert\_manager\_lets\_encrypt\_issuer) | ./modules/cert-manager-issuer-lets-encrypt | n/a |
+| [envoy\_gateway](#module\_envoy\_gateway) | ./modules/envoy-gateway | n/a |
| [grafana\_loki\_datasource](#module\_grafana\_loki\_datasource) | ./modules/monitoring-grafana-loki-datasource | n/a |
| [grafana\_tempo\_datasource](#module\_grafana\_tempo\_datasource) | ./modules/monitoring-grafana-tempo-datasource | n/a |
| [ingress\_controller\_apisix](#module\_ingress\_controller\_apisix) | ./modules/ingress-controller-apisix | n/a |
@@ -49,6 +50,7 @@
| [opentelemetry\_operator](#module\_opentelemetry\_operator) | ./modules/monitoring-opentelemetry-operator | n/a |
| [prometheus\_stack](#module\_prometheus\_stack) | ./modules/monitoring-prometheus-stack | n/a |
| [pulsar\_kaap](#module\_pulsar\_kaap) | ./modules/pulsar-kaap | n/a |
+| [pulsar\_resources\_operator](#module\_pulsar\_resources\_operator) | ./modules/pulsar-resources-operator | n/a |
| [streamx\_dashboards](#module\_streamx\_dashboards) | ./modules/monitoring-streamx-grafana-dashboards | n/a |
| [streamx\_operator](#module\_streamx\_operator) | ./modules/streamx-operator | n/a |
| [streamx\_operator\_image\_pull\_secret](#module\_streamx\_operator\_image\_pull\_secret) | ./modules/docker-config-secret | n/a |
@@ -90,11 +92,21 @@
| [cert\_manager\_settings](#input\_cert\_manager\_settings) | Additional key value settings which will be passed to the Helm chart values, e.g. { "namespace" = "kube-system" }. | `map(any)` | `null` | no |
| [cert\_manager\_timeout](#input\_cert\_manager\_timeout) | Time in seconds to wait for any individual kubernetes operation | `number` | `null` | no |
| [cert\_manager\_values](#input\_cert\_manager\_values) | A list of values in raw YAML to be applied to the helm release. Overrides default values from [default-configs](./default-configs). Merges with the settings input, can also be used with the `file()` function, i.e. `file("my/values.yaml")`. | `list(string)` | `null` | no |
+| [envoy\_gateway\_chart\_name](#input\_envoy\_gateway\_chart\_name) | The name of the Helm chart to install | `string` | `null` | no |
+| [envoy\_gateway\_chart\_repository](#input\_envoy\_gateway\_chart\_repository) | The repository containing the Helm chart to install. | `string` | `null` | no |
+| [envoy\_gateway\_chart\_version](#input\_envoy\_gateway\_chart\_version) | The version of the Helm chart to install. | `string` | `null` | no |
+| [envoy\_gateway\_create\_namespace](#input\_envoy\_gateway\_create\_namespace) | Create a namespace for the deployment. | `bool` | `null` | no |
+| [envoy\_gateway\_enabled](#input\_envoy\_gateway\_enabled) | Enables Envoy Gateway. | `bool` | `false` | no |
+| [envoy\_gateway\_namespace](#input\_envoy\_gateway\_namespace) | The namespace used for the deployment | `string` | `null` | no |
+| [envoy\_gateway\_release\_name](#input\_envoy\_gateway\_release\_name) | The name of the helm release. | `string` | `null` | no |
+| [envoy\_gateway\_settings](#input\_envoy\_gateway\_settings) | Additional key value settings which will be passed to the Helm chart values, e.g. { "namespace" = "kube-system" }. | `map(any)` | `null` | no |
+| [envoy\_gateway\_timeout](#input\_envoy\_gateway\_timeout) | Time in seconds to wait for any individual kubernetes operation | `number` | `null` | no |
+| [envoy\_gateway\_values](#input\_envoy\_gateway\_values) | A list of values in raw YAML to be applied to the helm release. Overrides default values from [default-configs](./default-configs). Merges with the settings input, can also be used with the `file()` function, i.e. `file("my/values.yaml")`. | `list(string)` | `null` | no |
| [ingress\_controller\_apisix\_chart\_name](#input\_ingress\_controller\_apisix\_chart\_name) | The name of the Helm chart to install | `string` | `null` | no |
| [ingress\_controller\_apisix\_chart\_repository](#input\_ingress\_controller\_apisix\_chart\_repository) | The repository containing the Helm chart to install. | `string` | `null` | no |
| [ingress\_controller\_apisix\_chart\_version](#input\_ingress\_controller\_apisix\_chart\_version) | The version of the Helm chart to install. | `string` | `null` | no |
| [ingress\_controller\_apisix\_create\_namespace](#input\_ingress\_controller\_apisix\_create\_namespace) | Create a namespace for the deployment. | `bool` | `null` | no |
-| [ingress\_controller\_apisix\_enabled](#input\_ingress\_controller\_apisix\_enabled) | Enables APISIX Ingress Controller. | `bool` | `true` | no |
+| [ingress\_controller\_apisix\_enabled](#input\_ingress\_controller\_apisix\_enabled) | Enables APISIX Ingress Controller. | `bool` | `false` | no |
| [ingress\_controller\_apisix\_namespace](#input\_ingress\_controller\_apisix\_namespace) | The namespace used for the deployment | `string` | `null` | no |
| [ingress\_controller\_apisix\_release\_name](#input\_ingress\_controller\_apisix\_release\_name) | The name of the helm release. | `string` | `null` | no |
| [ingress\_controller\_apisix\_settings](#input\_ingress\_controller\_apisix\_settings) | Additional key value settings which will be passed to the Helm chart values, e.g. { "namespace" = "kube-system" }. | `map(any)` | `null` | no |
@@ -184,12 +196,27 @@
| [pulsar\_kaap\_settings](#input\_pulsar\_kaap\_settings) | Additional key value settings which will be passed to the Helm chart values, e.g. { "namespace" = "kube-system" }. | `map(any)` | `null` | no |
| [pulsar\_kaap\_timeout](#input\_pulsar\_kaap\_timeout) | Time in seconds to wait for any individual kubernetes operation | `number` | `null` | no |
| [pulsar\_kaap\_values](#input\_pulsar\_kaap\_values) | A list of values in raw YAML to be applied to the helm release. Overrides default values from [default-configs](./default-configs). Merges with the settings input, can also be used with the `file()` function, i.e. `file("my/values.yaml")`. | `list(string)` | `null` | no |
+| [pulsar\_resources\_operator\_chart\_name](#input\_pulsar\_resources\_operator\_chart\_name) | The name of the Helm chart to install | `string` | `null` | no |
+| [pulsar\_resources\_operator\_chart\_repository](#input\_pulsar\_resources\_operator\_chart\_repository) | The repository containing the Helm chart to install. | `string` | `null` | no |
+| [pulsar\_resources\_operator\_chart\_repository\_password](#input\_pulsar\_resources\_operator\_chart\_repository\_password) | The password used for the repository authentication. | `string` | `null` | no |
+| [pulsar\_resources\_operator\_chart\_repository\_username](#input\_pulsar\_resources\_operator\_chart\_repository\_username) | The username used for the repository authentication. | `string` | `null` | no |
+| [pulsar\_resources\_operator\_chart\_version](#input\_pulsar\_resources\_operator\_chart\_version) | The version of the Helm chart to install. | `string` | `null` | no |
+| [pulsar\_resources\_operator\_create\_namespace](#input\_pulsar\_resources\_operator\_create\_namespace) | Create a namespace for the deployment. | `bool` | `true` | no |
+| [pulsar\_resources\_operator\_enabled](#input\_pulsar\_resources\_operator\_enabled) | Enables Pulsar Resources Operator. | `bool` | `true` | no |
+| [pulsar\_resources\_operator\_namespace](#input\_pulsar\_resources\_operator\_namespace) | The namespace used for the deployment | `string` | `"pulsar-resources-operator"` | no |
+| [pulsar\_resources\_operator\_release\_name](#input\_pulsar\_resources\_operator\_release\_name) | The name of the helm release. | `string` | `null` | no |
+| [pulsar\_resources\_operator\_settings](#input\_pulsar\_resources\_operator\_settings) | Additional key value settings which will be passed to the Helm chart values, e.g. { "namespace" = "kube-system" }. | `map(any)` | `null` | no |
+| [pulsar\_resources\_operator\_timeout](#input\_pulsar\_resources\_operator\_timeout) | Time in seconds to wait for any individual kubernetes operation. | `number` | `null` | no |
+| [pulsar\_resources\_operator\_values](#input\_pulsar\_resources\_operator\_values) | A list of values in raw YAML to be applied to the helm release. Overrides default composed values. Merges with the settings input, can also be used with the `file()` function, i.e. `file("my/values.yaml")`. | `list(string)` | `null` | no |
| [streamx\_operator\_chart\_name](#input\_streamx\_operator\_chart\_name) | The name of the Helm chart to install | `string` | `null` | no |
| [streamx\_operator\_chart\_repository](#input\_streamx\_operator\_chart\_repository) | The repository containing the Helm chart to install. | `string` | `null` | no |
| [streamx\_operator\_chart\_repository\_password](#input\_streamx\_operator\_chart\_repository\_password) | The password used for the repository authentication. | `string` | `null` | no |
| [streamx\_operator\_chart\_repository\_username](#input\_streamx\_operator\_chart\_repository\_username) | The username used for the repository authentication. | `string` | `null` | no |
| [streamx\_operator\_chart\_version](#input\_streamx\_operator\_chart\_version) | The version of the Helm chart to install. | `string` | `null` | no |
| [streamx\_operator\_create\_namespace](#input\_streamx\_operator\_create\_namespace) | Create a namespace for the deployment. | `bool` | `true` | no |
+| [streamx\_operator\_default\_gateway\_certificate\_ref](#input\_streamx\_operator\_default\_gateway\_certificate\_ref) | n/a | `string` | `null` | no |
+| [streamx\_operator\_default\_gateway\_class\_name](#input\_streamx\_operator\_default\_gateway\_class\_name) | n/a | `string` | `null` | no |
+| [streamx\_operator\_default\_gateway\_domain](#input\_streamx\_operator\_default\_gateway\_domain) | n/a | `string` | `null` | no |
| [streamx\_operator\_enabled](#input\_streamx\_operator\_enabled) | Enables StreamX Operator. | `bool` | `true` | no |
| [streamx\_operator\_image\_pull\_secret\_enabled](#input\_streamx\_operator\_image\_pull\_secret\_enabled) | Enables StreamX Operator Image Pull Secret. | `bool` | `true` | no |
| [streamx\_operator\_image\_pull\_secret\_name](#input\_streamx\_operator\_image\_pull\_secret\_name) | StreamX Operator image pull secret name. | `string` | `"sx-operator-image-pull-secret"` | no |
@@ -201,7 +228,7 @@
| [streamx\_operator\_messaging\_pulsar\_client\_service\_url](#input\_streamx\_operator\_messaging\_pulsar\_client\_service\_url) | Pulsar client service URL passed to StreamX Operator. If null and KAAP enabled then KAAP default URL is used. | `string` | `null` | no |
| [streamx\_operator\_monitoring\_traces\_endpoint](#input\_streamx\_operator\_monitoring\_traces\_endpoint) | Traces collector URL | `string` | `null` | no |
| [streamx\_operator\_monitoring\_traces\_mode](#input\_streamx\_operator\_monitoring\_traces\_mode) | Traces monitoring mode for StreamX Meshes deployed by StreamX Operator | `string` | `null` | no |
-| [streamx\_operator\_namespace](#input\_streamx\_operator\_namespace) | The namespace used for the deployment | `string` | `"streamx-operator"` | no |
+| [streamx\_operator\_namespace](#input\_streamx\_operator\_namespace) | The namespace used for the deployment | `string` | `"streamx-system"` | no |
| [streamx\_operator\_release\_name](#input\_streamx\_operator\_release\_name) | The name of the helm release. | `string` | `null` | no |
| [streamx\_operator\_settings](#input\_streamx\_operator\_settings) | Additional key value settings which will be passed to the Helm chart values, e.g. { "namespace" = "kube-system" }. | `map(any)` | `null` | no |
| [streamx\_operator\_timeout](#input\_streamx\_operator\_timeout) | Time in seconds to wait for any individual kubernetes operation. | `number` | `null` | no |
@@ -222,5 +249,5 @@
| Name | Description |
|------|-------------|
| [cert\_manager\_lets\_encrypt\_issuer\_ingress\_annotations](#output\_cert\_manager\_lets\_encrypt\_issuer\_ingress\_annotations) | Ingress annotations with Cert Manager Let's Encrypt issuer configuration |
-| [loadbalancer\_ip](#output\_loadbalancer\_ip) | K8s cluster Load Balancer IP |
+| [load\_balancer\_ip](#output\_load\_balancer\_ip) | K8s cluster Load Balancer IP |
diff --git a/main.tf b/main.tf
index 333db2f..8c9b5f8 100644
--- a/main.tf
+++ b/main.tf
@@ -47,6 +47,21 @@ module "ingress_controller_nginx" {
])
}
+module "envoy_gateway" {
+ count = var.envoy_gateway_enabled ? 1 : 0
+ source = "./modules/envoy-gateway"
+
+ chart_name = var.envoy_gateway_chart_name
+ chart_repository = var.envoy_gateway_chart_repository
+ chart_version = var.envoy_gateway_chart_version
+ create_namespace = var.envoy_gateway_create_namespace
+ namespace = var.envoy_gateway_namespace
+ release_name = var.envoy_gateway_release_name
+ settings = var.envoy_gateway_settings
+ timeout = var.envoy_gateway_timeout
+ values = var.envoy_gateway_values
+}
+
module "cert_manager" {
count = var.cert_manager_enabled ? 1 : 0
source = "./modules/cert-manager"
@@ -438,6 +453,9 @@ module "streamx_operator" {
imagePullSecrets = local.streamx_operator_image_pull_secret_name == null ? [] : [
{ name = local.streamx_operator_image_pull_secret_name }
]
+ image = {
+ tag = "2.0.3-jvm"
+ }
}
mesh = {
monitoring = {
@@ -446,6 +464,11 @@ module "streamx_operator" {
endpoint = var.streamx_operator_monitoring_traces_endpoint
}
}
+ defaultGateway = {
+ className = var.streamx_operator_default_gateway_class_name
+ domain = var.streamx_operator_default_gateway_domain
+ certificateRef = var.streamx_operator_default_gateway_certificate_ref
+ }
}
federation = {
# Disable Mesh Federation by default
diff --git a/modules/envoy-gateway/README.md b/modules/envoy-gateway/README.md
new file mode 100644
index 0000000..e59790d
--- /dev/null
+++ b/modules/envoy-gateway/README.md
@@ -0,0 +1,52 @@
+
+## Requirements
+
+| Name | Version |
+|------|---------|
+| [terraform](#requirement\_terraform) | >= 1.0.0 |
+| [helm](#requirement\_helm) | >= 2.17.0, < 3.0.0 |
+| [kubectl](#requirement\_kubectl) | >= 1.14.0 |
+
+## Providers
+
+| Name | Version |
+|------|---------|
+| [helm](#provider\_helm) | >= 2.17.0, < 3.0.0 |
+| [kubectl](#provider\_kubectl) | >= 1.14.0 |
+| [kubernetes](#provider\_kubernetes) | n/a |
+
+## Modules
+
+No modules.
+
+## Resources
+
+| Name | Type |
+|------|------|
+| [helm_release.this](https://registry.terraform.io/providers/hashicorp/helm/latest/docs/resources/release) | resource |
+| [kubectl_manifest.gateway_class](https://registry.terraform.io/providers/gavinbunney/kubectl/latest/docs/resources/manifest) | resource |
+| [kubernetes_service_v1.gateway](https://registry.terraform.io/providers/hashicorp/kubernetes/latest/docs/data-sources/service_v1) | data source |
+
+## Inputs
+
+| Name | Description | Type | Default | Required |
+|------|-------------|------|---------|:--------:|
+| [atomic](#input\_atomic) | Purge the chart on a failed installation. | `bool` | `true` | no |
+| [chart\_name](#input\_chart\_name) | The name of the Helm chart to install | `string` | `"oci://docker.io/envoyproxy/gateway-helm"` | no |
+| [chart\_repository](#input\_chart\_repository) | The repository containing the Helm chart to install | `string` | `null` | no |
+| [chart\_version](#input\_chart\_version) | The version of the Helm chart to install | `string` | `"v1.6.1"` | no |
+| [cleanup\_on\_fail](#input\_cleanup\_on\_fail) | Allow deletion of new resources created in this upgrade when upgrade fails | `bool` | `true` | no |
+| [create\_namespace](#input\_create\_namespace) | Create a namespace for the deployment. Defaults to "true". | `bool` | `true` | no |
+| [force\_defaults\_for\_null\_variables](#input\_force\_defaults\_for\_null\_variables) | Enables forcing default variable values when the variable value passed to the module is null. | `bool` | `true` | no |
+| [namespace](#input\_namespace) | The namespace used for the deployment | `string` | `"envoy-gateway-system"` | no |
+| [release\_name](#input\_release\_name) | The name of the helm release | `string` | `"envoy-gateway"` | no |
+| [settings](#input\_settings) | Settings which will be passed to the Helm chart values | `map(any)` | `{}` | no |
+| [timeout](#input\_timeout) | Time in seconds to wait for any individual kubernetes operation | `number` | `300` | no |
+| [values](#input\_values) | A list of values in raw YAML to be applied to the helm release. Merges with the settings input, can also be used with the `file()` function, i.e. `file("my/values.yaml")`. | `list` | `[]` | no |
+
+## Outputs
+
+| Name | Description |
+|------|-------------|
+| [load\_balancer\_ip](#output\_load\_balancer\_ip) | IP of the Load Balancer |
+
\ No newline at end of file
diff --git a/modules/envoy-gateway/gateway-class.yaml b/modules/envoy-gateway/gateway-class.yaml
new file mode 100644
index 0000000..21ad2ef
--- /dev/null
+++ b/modules/envoy-gateway/gateway-class.yaml
@@ -0,0 +1,6 @@
+apiVersion: gateway.networking.k8s.io/v1
+kind: GatewayClass
+metadata:
+ name: envoy
+spec:
+ controllerName: gateway.envoyproxy.io/gatewayclass-controller
\ No newline at end of file
diff --git a/modules/envoy-gateway/main.tf b/modules/envoy-gateway/main.tf
new file mode 100644
index 0000000..138d74a
--- /dev/null
+++ b/modules/envoy-gateway/main.tf
@@ -0,0 +1,79 @@
+# Copyright 2025 Dynamic Solutions Sp. z o.o. sp.k.
+
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+locals {
+ default_atomic = true
+ default_chart_name = "oci://docker.io/envoyproxy/gateway-helm"
+ default_chart_repository = null
+ default_chart_version = "v1.6.1"
+ default_cleanup_on_fail = true
+ default_create_namespace = true
+ default_namespace = "envoy-gateway-system"
+ default_release_name = "envoy-gateway"
+ default_settings = {}
+ default_timeout = 300
+ default_values = []
+
+ atomic = var.force_defaults_for_null_variables && var.atomic == null ? local.default_atomic : var.atomic
+ chart_name = var.force_defaults_for_null_variables && var.chart_name == null ? local.default_chart_name : var.chart_name
+ chart_repository = var.force_defaults_for_null_variables && var.chart_repository == null ? local.default_chart_repository : var.chart_repository
+ chart_version = var.force_defaults_for_null_variables && var.chart_version == null ? local.default_chart_version : var.chart_version
+ cleanup_on_fail = var.force_defaults_for_null_variables && var.cleanup_on_fail == null ? local.default_cleanup_on_fail : var.cleanup_on_fail
+ create_namespace = var.force_defaults_for_null_variables && var.create_namespace == null ? local.default_create_namespace : var.create_namespace
+ namespace = var.force_defaults_for_null_variables && var.namespace == null ? local.default_namespace : var.namespace
+ release_name = var.force_defaults_for_null_variables && var.release_name == null ? local.default_release_name : var.release_name
+ settings = var.force_defaults_for_null_variables && var.settings == null ? local.default_settings : var.settings
+ timeout = var.force_defaults_for_null_variables && var.timeout == null ? local.default_timeout : var.timeout
+ values = var.force_defaults_for_null_variables && var.values == null ? local.default_values : var.values
+}
+
+resource "helm_release" "this" {
+ atomic = local.atomic
+ chart = local.chart_name
+ cleanup_on_fail = local.cleanup_on_fail
+ create_namespace = local.create_namespace
+ name = local.release_name
+ namespace = local.namespace
+ repository = local.chart_repository
+ timeout = local.timeout
+ version = local.chart_version
+ values = local.values
+
+ dynamic "set" {
+ for_each = local.settings
+ content {
+ name = set.key
+ value = set.value
+ }
+ }
+}
+
+resource "kubectl_manifest" "gateway_class" {
+ yaml_body = file("${path.module}/gateway-class.yaml")
+ override_namespace = local.namespace
+
+ depends_on = [helm_release.this]
+}
+
+data "kubernetes_service_v1" "gateway" {
+ metadata {
+ name = "envoy-gateway"
+ namespace = local.namespace
+ }
+
+ depends_on = [
+ helm_release.this
+ ]
+}
diff --git a/modules/envoy-gateway/outputs.tf b/modules/envoy-gateway/outputs.tf
new file mode 100644
index 0000000..fc6d23f
--- /dev/null
+++ b/modules/envoy-gateway/outputs.tf
@@ -0,0 +1,23 @@
+# Copyright 2025 Dynamic Solutions Sp. z o.o. sp.k.
+
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+locals {
+ load_balancer_ip = data.kubernetes_service_v1.gateway.status.0.load_balancer.0.ingress.0.ip
+}
+
+output "load_balancer_ip" {
+ description = "IP of the Load Balancer"
+ value = local.load_balancer_ip
+}
diff --git a/modules/envoy-gateway/variables.tf b/modules/envoy-gateway/variables.tf
new file mode 100644
index 0000000..23dca87
--- /dev/null
+++ b/modules/envoy-gateway/variables.tf
@@ -0,0 +1,85 @@
+# Copyright 2025 Dynamic Solutions Sp. z o.o. sp.k.
+
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+variable "force_defaults_for_null_variables" {
+ default = true
+ description = "Enables forcing default variable values when the variable value passed to the module is null."
+ type = bool
+}
+
+variable "atomic" {
+ default = true
+ description = "Purge the chart on a failed installation."
+ type = bool
+}
+
+variable "chart_name" {
+ default = "oci://docker.io/envoyproxy/gateway-helm"
+ description = "The name of the Helm chart to install"
+ type = string
+}
+
+variable "chart_repository" {
+ default = null
+ description = "The repository containing the Helm chart to install"
+ type = string
+}
+
+variable "chart_version" {
+ default = "v1.6.1"
+ description = "The version of the Helm chart to install"
+ type = string
+}
+
+variable "cleanup_on_fail" {
+ default = true
+ description = "Allow deletion of new resources created in this upgrade when upgrade fails"
+ type = bool
+}
+
+variable "create_namespace" {
+ default = true
+ description = "Create a namespace for the deployment. Defaults to \"true\"."
+ type = bool
+}
+
+variable "namespace" {
+ default = "envoy-gateway-system"
+ description = "The namespace used for the deployment"
+ type = string
+}
+
+variable "release_name" {
+ default = "envoy-gateway"
+ description = "The name of the helm release"
+ type = string
+}
+
+variable "settings" {
+ default = {}
+ description = "Settings which will be passed to the Helm chart values"
+ type = map(any)
+}
+
+variable "timeout" {
+ default = 300
+ description = "Time in seconds to wait for any individual kubernetes operation"
+ type = number
+}
+
+variable "values" {
+ default = []
+ description = "A list of values in raw YAML to be applied to the helm release. Merges with the settings input, can also be used with the `file()` function, i.e. `file(\"my/values.yaml\")`."
+}
diff --git a/modules/envoy-gateway/versions.tf b/modules/envoy-gateway/versions.tf
new file mode 100644
index 0000000..aa2e27e
--- /dev/null
+++ b/modules/envoy-gateway/versions.tf
@@ -0,0 +1,28 @@
+# Copyright 2025 Dynamic Solutions Sp. z o.o. sp.k.
+
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+terraform {
+ required_version = ">= 1.0.0"
+ required_providers {
+ helm = {
+ source = "hashicorp/helm"
+ version = ">= 2.17.0, < 3.0.0"
+ }
+ kubectl = {
+ source = "gavinbunney/kubectl"
+ version = ">= 1.14.0"
+ }
+ }
+}
diff --git a/modules/monitoring-kaap-pod-monitor/README.md b/modules/monitoring-kaap-pod-monitor/README.md
index ae38cfc..211117e 100644
--- a/modules/monitoring-kaap-pod-monitor/README.md
+++ b/modules/monitoring-kaap-pod-monitor/README.md
@@ -23,6 +23,7 @@ No modules.
| [kubectl_manifest.kaap_bookkeeper_pod_monitor](https://registry.terraform.io/providers/gavinbunney/kubectl/latest/docs/resources/manifest) | resource |
| [kubectl_manifest.kaap_broker_pod_monitor](https://registry.terraform.io/providers/gavinbunney/kubectl/latest/docs/resources/manifest) | resource |
| [kubectl_manifest.kaap_operator_pod_monitor](https://registry.terraform.io/providers/gavinbunney/kubectl/latest/docs/resources/manifest) | resource |
+| [kubectl_manifest.kaap_proxy_pod_monitor](https://registry.terraform.io/providers/gavinbunney/kubectl/latest/docs/resources/manifest) | resource |
| [kubectl_manifest.kaap_zookeeper_pod_monitor](https://registry.terraform.io/providers/gavinbunney/kubectl/latest/docs/resources/manifest) | resource |
## Inputs
diff --git a/modules/monitoring-loki-grafana-dashboards/README.md b/modules/monitoring-loki-grafana-dashboards/README.md
index 11f1cce..346bd53 100644
--- a/modules/monitoring-loki-grafana-dashboards/README.md
+++ b/modules/monitoring-loki-grafana-dashboards/README.md
@@ -27,6 +27,7 @@ No modules.
| Name | Description | Type | Default | Required |
|------|-------------|------|---------|:--------:|
| [force\_defaults\_for\_null\_variables](#input\_force\_defaults\_for\_null\_variables) | Enables forcing default variable values when the variable value passed to the module is null. | `bool` | `true` | no |
+| [multicluster](#input\_multicluster) | If false Cluster variable in dashboards is hidden | `bool` | `false` | no |
| [namespace](#input\_namespace) | The namespace used for Grafana deployment | `string` | `"prometheus-stack"` | no |
## Outputs
diff --git a/modules/monitoring-opentelemetry-collector/README.md b/modules/monitoring-opentelemetry-collector/README.md
index 8f71457..3f1126b 100644
--- a/modules/monitoring-opentelemetry-collector/README.md
+++ b/modules/monitoring-opentelemetry-collector/README.md
@@ -29,7 +29,7 @@ No modules.
| [atomic](#input\_atomic) | Purge the chart on a failed installation. Default's to "true". | `bool` | `true` | no |
| [chart\_name](#input\_chart\_name) | The name of the Helm chart to install | `string` | `"opentelemetry-collector"` | no |
| [chart\_repository](#input\_chart\_repository) | The repository containing the Helm chart to install | `string` | `"https://open-telemetry.github.io/opentelemetry-helm-charts"` | no |
-| [chart\_version](#input\_chart\_version) | The version of the Helm chart to install | `string` | `"0.117.0"` | no |
+| [chart\_version](#input\_chart\_version) | The version of the Helm chart to install | `string` | `"0.139.0"` | no |
| [cleanup\_on\_fail](#input\_cleanup\_on\_fail) | Allow deletion of new resources created in this upgrade when upgrade fails | `bool` | `true` | no |
| [create\_namespace](#input\_create\_namespace) | Create a namespace for the deployment. Defaults to "true". | `bool` | `true` | no |
| [force\_defaults\_for\_null\_variables](#input\_force\_defaults\_for\_null\_variables) | Enables forcing default variable values when the variable value passed to the module is null. | `bool` | `true` | no |
diff --git a/modules/monitoring-opentelemetry-operator/README.md b/modules/monitoring-opentelemetry-operator/README.md
index 89b0935..7280552 100644
--- a/modules/monitoring-opentelemetry-operator/README.md
+++ b/modules/monitoring-opentelemetry-operator/README.md
@@ -29,7 +29,7 @@ No modules.
| [atomic](#input\_atomic) | Purge the chart on a failed installation. Default's to "true". | `bool` | `true` | no |
| [chart\_name](#input\_chart\_name) | The name of the Helm chart to install | `string` | `"opentelemetry-operator"` | no |
| [chart\_repository](#input\_chart\_repository) | The repository containing the Helm chart to install | `string` | `"https://open-telemetry.github.io/opentelemetry-helm-charts"` | no |
-| [chart\_version](#input\_chart\_version) | The version of the Helm chart to install | `string` | `"0.80.2"` | no |
+| [chart\_version](#input\_chart\_version) | The version of the Helm chart to install | `string` | `"0.99.0"` | no |
| [cleanup\_on\_fail](#input\_cleanup\_on\_fail) | Allow deletion of new resources created in this upgrade when upgrade fails | `bool` | `true` | no |
| [create\_namespace](#input\_create\_namespace) | Create a namespace for the deployment. Defaults to "true". | `bool` | `true` | no |
| [force\_defaults\_for\_null\_variables](#input\_force\_defaults\_for\_null\_variables) | Enables forcing default variable values when the variable value passed to the module is null. | `bool` | `true` | no |
diff --git a/modules/monitoring-streamx-grafana-dashboards/README.md b/modules/monitoring-streamx-grafana-dashboards/README.md
index b67026b..496f061 100644
--- a/modules/monitoring-streamx-grafana-dashboards/README.md
+++ b/modules/monitoring-streamx-grafana-dashboards/README.md
@@ -27,6 +27,7 @@ No modules.
| Name | Description | Type | Default | Required |
|------|-------------|------|---------|:--------:|
| [force\_defaults\_for\_null\_variables](#input\_force\_defaults\_for\_null\_variables) | Enables forcing default variable values when the variable value passed to the module is null. | `bool` | `true` | no |
+| [multicluster](#input\_multicluster) | If false Cluster variable in dashboards is hidden | `bool` | `false` | no |
| [namespace](#input\_namespace) | The namespace used for the deployment | `string` | `"prometheus-stack"` | no |
## Outputs
diff --git a/modules/monitoring-streamx-pod-monitor/README.md b/modules/monitoring-streamx-pod-monitor/README.md
index 3c9e82f..9b04b10 100644
--- a/modules/monitoring-streamx-pod-monitor/README.md
+++ b/modules/monitoring-streamx-pod-monitor/README.md
@@ -20,6 +20,7 @@ No modules.
| Name | Type |
|------|------|
+| [kubectl_manifest.streamx_operator_pod_monitor](https://registry.terraform.io/providers/gavinbunney/kubectl/latest/docs/resources/manifest) | resource |
| [kubectl_manifest.streamx_pod_monitor](https://registry.terraform.io/providers/gavinbunney/kubectl/latest/docs/resources/manifest) | resource |
## Inputs
diff --git a/modules/pulsar-resources-operator/README.md b/modules/pulsar-resources-operator/README.md
new file mode 100644
index 0000000..63c5168
--- /dev/null
+++ b/modules/pulsar-resources-operator/README.md
@@ -0,0 +1,47 @@
+
+## Requirements
+
+| Name | Version |
+|------|---------|
+| [terraform](#requirement\_terraform) | >= 1.0.0 |
+| [helm](#requirement\_helm) | >= 2.17.0, < 3.0.0 |
+
+## Providers
+
+| Name | Version |
+|------|---------|
+| [helm](#provider\_helm) | >= 2.17.0, < 3.0.0 |
+
+## Modules
+
+No modules.
+
+## Resources
+
+| Name | Type |
+|------|------|
+| [helm_release.pulsar_resources_operator](https://registry.terraform.io/providers/hashicorp/helm/latest/docs/resources/release) | resource |
+
+## Inputs
+
+| Name | Description | Type | Default | Required |
+|------|-------------|------|---------|:--------:|
+| [atomic](#input\_atomic) | Purge the chart on a failed installation. Default's to "true". | `bool` | `true` | no |
+| [chart\_name](#input\_chart\_name) | The name of the Helm chart to install | `string` | `"pulsar-resources-operator"` | no |
+| [chart\_repository](#input\_chart\_repository) | The repository containing the Helm chart to install | `string` | `"https://charts.streamnative.io"` | no |
+| [chart\_repository\_password](#input\_chart\_repository\_password) | The password used for the repository authentication | `string` | `null` | no |
+| [chart\_repository\_username](#input\_chart\_repository\_username) | The username used for the repository authentication | `string` | `null` | no |
+| [chart\_version](#input\_chart\_version) | The version of the Helm chart to install | `string` | `"0.12.0"` | no |
+| [cleanup\_on\_fail](#input\_cleanup\_on\_fail) | Allow deletion of new resources created in this upgrade when upgrade fails | `bool` | `true` | no |
+| [create\_namespace](#input\_create\_namespace) | Create a namespace for the deployment. Defaults to "true". | `bool` | `true` | no |
+| [force\_defaults\_for\_null\_variables](#input\_force\_defaults\_for\_null\_variables) | Enables forcing default variable values when the variable value passed to the module is null. | `bool` | `true` | no |
+| [namespace](#input\_namespace) | The namespace used for the deployment | `string` | `"pulsar-resources-operator"` | no |
+| [release\_name](#input\_release\_name) | The name of the helm release | `string` | `"pulsar-resources-operator"` | no |
+| [settings](#input\_settings) | Settings which will be passed to the Helm chart values | `map(any)` | `{}` | no |
+| [timeout](#input\_timeout) | Time in seconds to wait for any individual kubernetes operation | `number` | `300` | no |
+| [values](#input\_values) | A list of values in raw YAML to be applied to the helm release. Merges with the settings input, can also be used with the `file()` function, i.e. `file("my/values.yaml")`. | `list` | `[]` | no |
+
+## Outputs
+
+No outputs.
+
\ No newline at end of file
diff --git a/modules/streamx-operator/README.md b/modules/streamx-operator/README.md
index 7db1217..d527cdd 100644
--- a/modules/streamx-operator/README.md
+++ b/modules/streamx-operator/README.md
@@ -20,13 +20,14 @@
|------|---------|
| [terraform](#requirement\_terraform) | >= 1.0.0 |
| [helm](#requirement\_helm) | >= 2.17.0, < 3.0.0 |
+| [kubectl](#requirement\_kubectl) | >= 1.14.0 |
## Providers
| Name | Version |
|------|---------|
| [helm](#provider\_helm) | 2.17.0 |
-| [kubectl](#provider\_kubectl) | n/a |
+| [kubectl](#provider\_kubectl) | >= 1.14.0 |
## Modules
@@ -37,7 +38,7 @@ No modules.
| Name | Type |
|------|------|
| [helm_release.streamx_operator](https://registry.terraform.io/providers/hashicorp/helm/latest/docs/resources/release) | resource |
-| [kubectl_manifest.pulsar_messaging_config](https://registry.terraform.io/providers/hashicorp/kubectl/latest/docs/resources/manifest) | resource |
+| [kubectl_manifest.pulsar_messaging_config](https://registry.terraform.io/providers/gavinbunney/kubectl/latest/docs/resources/manifest) | resource |
## Inputs
@@ -48,12 +49,12 @@ No modules.
| [chart\_repository](#input\_chart\_repository) | The repository containing the Helm chart to install | `string` | `"oci://europe-west1-docker.pkg.dev/streamx-releases/streamx-helm-charts"` | no |
| [chart\_repository\_password](#input\_chart\_repository\_password) | The password used for the repository authentication | `string` | `null` | no |
| [chart\_repository\_username](#input\_chart\_repository\_username) | The username used for the repository authentication | `string` | `null` | no |
-| [chart\_version](#input\_chart\_version) | The version of the Helm chart to install | `string` | `"0.0.7"` | no |
+| [chart\_version](#input\_chart\_version) | The version of the Helm chart to install | `string` | `"2.0.4"` | no |
| [cleanup\_on\_fail](#input\_cleanup\_on\_fail) | Allow deletion of new resources created in this upgrade when upgrade fails | `bool` | `true` | no |
| [create\_namespace](#input\_create\_namespace) | Create a namespace for the deployment. Defaults to "true". | `bool` | `true` | no |
| [force\_defaults\_for\_null\_variables](#input\_force\_defaults\_for\_null\_variables) | Enables forcing default variable values when the variable value passed to the module is null. | `bool` | `true` | no |
-| [namespace](#input\_namespace) | The namespace used for the deployment | `string` | `"streamx-operator"` | no |
-| [pulsar\_messaging\_config\_admin\_service\_url](#input\_pulsar\_messaging\_config\_admin\_service\_url) | Pulsar admin service URL passed to StreamX Operator. If null then default MessagingConfig is not created. | `string` | `null` | no |
+| [namespace](#input\_namespace) | The namespace used for the deployment | `string` | `"streamx-system"` | no |
+| [pulsar\_messaging\_config\_admin\_service\_url](#input\_pulsar\_messaging\_config\_admin\_service\_url) | Pulsar admin service URL passed to default MessagingConfig resource. If null then default MessagingConfig is not created. | `string` | `null` | no |
| [pulsar\_messaging\_config\_client\_service\_url](#input\_pulsar\_messaging\_config\_client\_service\_url) | Pulsar client service URL passed to default MessagingConfig resource. If null then default MessagingConfig is not created. | `string` | `null` | no |
| [release\_name](#input\_release\_name) | The name of the helm release | `string` | `"streamx-operator"` | no |
| [settings](#input\_settings) | Settings which will be passed to the Helm chart values | `map(any)` | `{}` | no |
diff --git a/modules/streamx-operator/config/pulsar-messaging-config.yaml b/modules/streamx-operator/config/pulsar-messaging-config.yaml
index eaa32ad..2b781f1 100644
--- a/modules/streamx-operator/config/pulsar-messaging-config.yaml
+++ b/modules/streamx-operator/config/pulsar-messaging-config.yaml
@@ -1,4 +1,4 @@
-apiVersion: "streamx.dev/v1alpha1"
+apiVersion: "streamx.com/v1alpha1"
kind: MessagingClass
metadata:
name: default
diff --git a/modules/streamx-operator/main.tf b/modules/streamx-operator/main.tf
index 59a4fb1..1b0ec97 100644
--- a/modules/streamx-operator/main.tf
+++ b/modules/streamx-operator/main.tf
@@ -17,7 +17,7 @@ locals {
default_atomic = true
default_chart_name = "streamx-operator"
default_chart_repository = "oci://europe-west1-docker.pkg.dev/streamx-releases/streamx-helm-charts"
- default_chart_version = "0.1.1"
+ default_chart_version = "2.0.4"
default_cleanup_on_fail = true
default_create_namespace = true
default_namespace = "streamx-system"
diff --git a/modules/streamx-operator/variables.tf b/modules/streamx-operator/variables.tf
index 78aa777..8f17764 100644
--- a/modules/streamx-operator/variables.tf
+++ b/modules/streamx-operator/variables.tf
@@ -51,7 +51,7 @@ variable "chart_repository_password" {
}
variable "chart_version" {
- default = "0.0.8"
+ default = "2.0.4"
description = "The version of the Helm chart to install"
type = string
}
diff --git a/outputs.tf b/outputs.tf
index 9c44cb0..7fb9be8 100644
--- a/outputs.tf
+++ b/outputs.tf
@@ -13,9 +13,9 @@
# limitations under the License.
#
-output "loadbalancer_ip" {
+output "load_balancer_ip" {
description = "K8s cluster Load Balancer IP"
- value = length(module.ingress_controller_nginx) > 0 ? module.ingress_controller_nginx.0.ingress_ip : length(module.ingress_controller_apisix) > 0 ? module.ingress_controller_apisix.0.ingress_ip : null
+ value = try(coalesce(try(module.ingress_controller_nginx.0.ingress_ip, null), try(module.ingress_controller_apisix.0.ingress_ip, null), try(module.envoy_gateway.0.load_balancer_ip, null)), null)
}
output "cert_manager_lets_encrypt_issuer_ingress_annotations" {
diff --git a/variables.tf b/variables.tf
index 7322791..fbcd4af 100644
--- a/variables.tf
+++ b/variables.tf
@@ -15,7 +15,7 @@
### Enable/Disable sub-modules
variable "ingress_controller_apisix_enabled" {
- default = true
+ default = false
description = "Enables APISIX Ingress Controller."
type = bool
}
@@ -26,6 +26,12 @@ variable "ingress_controller_nginx_enabled" {
type = bool
}
+variable "envoy_gateway_enabled" {
+ default = false
+ description = "Enables Envoy Gateway."
+ type = bool
+}
+
variable "cert_manager_enabled" {
default = true
description = "Enables Cert Manager."
@@ -130,6 +136,19 @@ variable "ingress_controller_apisix_namespace" {
type = string
}
+### Envoy Gateway
+variable "envoy_gateway_create_namespace" {
+ default = null
+ description = "Create a namespace for the deployment."
+ type = bool
+}
+
+variable "envoy_gateway_namespace" {
+ default = null
+ description = "The namespace used for the deployment"
+ type = string
+}
+
### Cert Manager
variable "cert_manager_create_namespace" {
default = null
@@ -376,6 +395,51 @@ variable "ingress_controller_nginx_values" {
type = list(string)
}
+#######
+### Envoy Gateway
+#######
+variable "envoy_gateway_chart_name" {
+ default = null
+ description = "The name of the Helm chart to install"
+ type = string
+}
+
+variable "envoy_gateway_chart_repository" {
+ default = null
+ description = "The repository containing the Helm chart to install."
+ type = string
+}
+
+variable "envoy_gateway_chart_version" {
+ default = null
+ description = "The version of the Helm chart to install."
+ type = string
+}
+
+variable "envoy_gateway_release_name" {
+ default = null
+ description = "The name of the helm release."
+ type = string
+}
+
+variable "envoy_gateway_settings" {
+ default = null
+ description = "Additional key value settings which will be passed to the Helm chart values, e.g. { \"namespace\" = \"kube-system\" }."
+ type = map(any)
+}
+
+variable "envoy_gateway_timeout" {
+ default = null
+ description = "Time in seconds to wait for any individual kubernetes operation"
+ type = number
+}
+
+variable "envoy_gateway_values" {
+ default = null
+ description = "A list of values in raw YAML to be applied to the helm release. Overrides default values from [default-configs](./default-configs). Merges with the settings input, can also be used with the `file()` function, i.e. `file(\"my/values.yaml\")`."
+ type = list(string)
+}
+
#######
### Cert manager
#######
@@ -979,6 +1043,21 @@ variable "streamx_operator_monitoring_traces_endpoint" {
type = string
}
+variable "streamx_operator_default_gateway_class_name" {
+ default = null
+ type = string
+}
+
+variable "streamx_operator_default_gateway_domain" {
+ default = null
+ type = string
+}
+
+variable "streamx_operator_default_gateway_certificate_ref" {
+ default = null
+ type = string
+}
+
#######
### StreamX Operator image pull secret
#######