From c84d5d287acbffb57b967996b5594cd040e5d244 Mon Sep 17 00:00:00 2001 From: Grant Meyer <77987842+gnmeyer@users.noreply.github.com> Date: Thu, 25 Sep 2025 13:42:10 -0700 Subject: [PATCH 1/8] feat: add ipv6 toggling logic --- .env | 5 ++++- docker-compose.yml | 5 +++++ src/currency/src/server.cpp | 12 +++++++++++- src/frontend-proxy/envoy.tmpl.yaml | 2 +- src/payment/index.js | 16 ++++++++++++++-- src/quote/public/index.php | 13 ++++++++++++- src/shipping/src/main.rs | 12 +++++++++++- 7 files changed, 58 insertions(+), 7 deletions(-) diff --git a/.env b/.env index e714af6b70..8f83849bf0 100644 --- a/.env +++ b/.env @@ -5,6 +5,8 @@ IMAGE_VERSION=2.0.2 IMAGE_NAME=ghcr.io/open-telemetry/demo DEMO_VERSION=latest +IPV6_ENABLED=true + # Build Args TRACETEST_IMAGE_VERSION=v1.7.1 OTEL_JAVA_AGENT_VERSION=2.20.0 @@ -83,9 +85,10 @@ FRONTEND_DOCKERFILE=./src/frontend/Dockerfile # Frontend Proxy (Envoy) FRONTEND_HOST=frontend -ENVOY_PORT=8080 FRONTEND_PROXY_ADDR=frontend-proxy:${ENVOY_PORT} FRONTEND_PROXY_DOCKERFILE=./src/frontend-proxy/Dockerfile +ENVOY_ADDR=0.0.0.0 +ENVOY_PORT=8080 # Image Provider IMAGE_PROVIDER_HOST=image-provider diff --git a/docker-compose.yml b/docker-compose.yml index f65580ccc3..f5abe6b284 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -192,6 +192,7 @@ services: - VERSION=${IMAGE_VERSION} - OTEL_EXPORTER_OTLP_ENDPOINT - OTEL_RESOURCE_ATTRIBUTES=${OTEL_RESOURCE_ATTRIBUTES},service.name=currency # The C++ SDK does not support OTEL_SERVICE_NAME + - IPV6_ENABLED depends_on: otel-collector: condition: service_started @@ -352,6 +353,7 @@ services: - OTEL_RESOURCE_ATTRIBUTES - OTEL_SERVICE_NAME=frontend-proxy - ENVOY_PORT + - ENVOY_ADDR - FLAGD_HOST - FLAGD_PORT - FLAGD_UI_HOST @@ -458,6 +460,7 @@ services: - OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE - OTEL_RESOURCE_ATTRIBUTES - OTEL_SERVICE_NAME=payment + - IPV6_ENABLED depends_on: otel-collector: condition: service_started @@ -523,6 +526,7 @@ services: - OTEL_RESOURCE_ATTRIBUTES - OTEL_SERVICE_NAME=quote - OTEL_PHP_INTERNAL_METRICS_ENABLED=true + - IPV6_ENABLED depends_on: otel-collector: condition: service_started @@ -587,6 +591,7 @@ services: - OTEL_RESOURCE_ATTRIBUTES - OTEL_SERVICE_NAME=shipping - OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + - IPV6_ENABLED healthcheck: test: ["CMD-SHELL", "timeout 1 bash -c '>/dev/tcp/localhost/${SHIPPING_PORT}'"] start_period: 10s diff --git a/src/currency/src/server.cpp b/src/currency/src/server.cpp index 41e3d70390..9045c98e25 100644 --- a/src/currency/src/server.cpp +++ b/src/currency/src/server.cpp @@ -238,7 +238,17 @@ class CurrencyService final : public oteldemo::CurrencyService::Service void RunServer(uint16_t port) { - std::string address("0.0.0.0:" + std::to_string(port)); + std::string ip("0.0.0.0"); + + const char* ipv6_enabled = std::getenv("IPV6_ENABLED"); + + if (ipv6_enabled == "true") { + ip = "[::]"; + logger->Info("Overwriting Localhost IP: " + ip); + } + + std::string address(ip + ":" + std::to_string(port)); + CurrencyService currencyService; HealthServer healthService; ServerBuilder builder; diff --git a/src/frontend-proxy/envoy.tmpl.yaml b/src/frontend-proxy/envoy.tmpl.yaml index 433fa900c3..79b7eb4b0e 100644 --- a/src/frontend-proxy/envoy.tmpl.yaml +++ b/src/frontend-proxy/envoy.tmpl.yaml @@ -6,7 +6,7 @@ static_resources: listeners: - address: socket_address: - address: 0.0.0.0 + address: "${ENVOY_ADDR}" port_value: ${ENVOY_PORT} filter_chains: - filters: diff --git a/src/payment/index.js b/src/payment/index.js index f9b9fcb1ac..3b5da47165 100644 --- a/src/payment/index.js +++ b/src/payment/index.js @@ -44,12 +44,24 @@ server.addService(health.service, new health.Implementation({ server.addService(otelDemoPackage.oteldemo.PaymentService.service, { charge: chargeServiceHandler }) -server.bindAsync(`0.0.0.0:${process.env['PAYMENT_PORT']}`, grpc.ServerCredentials.createInsecure(), (err, port) => { + +let ip = "0.0.0.0"; + +const ipv6_enabled = process.env.IPV6_ENABLED; + +if (ipv6_enabled == "true") { + ip = "[::]"; + logger.info(`Overwriting Localhost IP: ${ip}`) +} + +const address = ip + `:${process.env['PAYMENT_PORT']}`; + +server.bindAsync(address, grpc.ServerCredentials.createInsecure(), (err, port) => { if (err) { return logger.error({ err }) } - logger.info(`payment gRPC server started on port ${port}`) + logger.info(`payment gRPC server started on ${address}`) }) process.once('SIGINT', closeGracefully) diff --git a/src/quote/public/index.php b/src/quote/public/index.php index fd02e5b0c1..e44169f5ca 100644 --- a/src/quote/public/index.php +++ b/src/quote/public/index.php @@ -87,7 +87,18 @@ return $response; }); -$address = '0.0.0.0:' . getenv('QUOTE_PORT'); + +$ip = "0.0.0.0"; + +$ipv6_enabled = getenv('IPV6_ENABLED'); + +if ($ipv6_enabled == "true") { + $ip = "[::]"; + echo "Overwriting Localhost IP: {$ip}" . PHP_EOL; +} + +$address = $ip . ':' . getenv('QUOTE_PORT'); + $socket = new SocketServer($address); $server->listen($socket); diff --git a/src/shipping/src/main.rs b/src/shipping/src/main.rs index 4196df4eca..7d2e986db8 100644 --- a/src/shipping/src/main.rs +++ b/src/shipping/src/main.rs @@ -26,7 +26,17 @@ async fn main() -> std::io::Result<()> { .expect("$SHIPPING_PORT is not set") .parse() .expect("$SHIPPING_PORT is not a valid port"); - let addr = format!("0.0.0.0:{}", port); + + let mut ip = "0.0.0.0".to_string(); + + if let Ok(ipv6_enabled) = env::var("IPV6_ENABLED") { + if ipv6_enabled == "true" { + ip = "[::]".to_string(); + info!("Overwriting Localhost IP: {ip}"); + } + } + + let addr = format!("{}:{}", ip, port); info!( name = "ServerStartedSuccessfully", addr = addr.as_str(), From b61d79aac6ff6bcd3081c104613f2f389b0caccf Mon Sep 17 00:00:00 2001 From: Grant Meyer <77987842+gnmeyer@users.noreply.github.com> Date: Thu, 25 Sep 2025 14:20:13 -0700 Subject: [PATCH 2/8] fix: remove ipv6 from env and docker compose (#2) --- .env | 2 -- docker-compose.yml | 4 ---- 2 files changed, 6 deletions(-) diff --git a/.env b/.env index 8f83849bf0..f71332fcc7 100644 --- a/.env +++ b/.env @@ -5,8 +5,6 @@ IMAGE_VERSION=2.0.2 IMAGE_NAME=ghcr.io/open-telemetry/demo DEMO_VERSION=latest -IPV6_ENABLED=true - # Build Args TRACETEST_IMAGE_VERSION=v1.7.1 OTEL_JAVA_AGENT_VERSION=2.20.0 diff --git a/docker-compose.yml b/docker-compose.yml index f5abe6b284..1071113bc5 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -192,7 +192,6 @@ services: - VERSION=${IMAGE_VERSION} - OTEL_EXPORTER_OTLP_ENDPOINT - OTEL_RESOURCE_ATTRIBUTES=${OTEL_RESOURCE_ATTRIBUTES},service.name=currency # The C++ SDK does not support OTEL_SERVICE_NAME - - IPV6_ENABLED depends_on: otel-collector: condition: service_started @@ -460,7 +459,6 @@ services: - OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE - OTEL_RESOURCE_ATTRIBUTES - OTEL_SERVICE_NAME=payment - - IPV6_ENABLED depends_on: otel-collector: condition: service_started @@ -526,7 +524,6 @@ services: - OTEL_RESOURCE_ATTRIBUTES - OTEL_SERVICE_NAME=quote - OTEL_PHP_INTERNAL_METRICS_ENABLED=true - - IPV6_ENABLED depends_on: otel-collector: condition: service_started @@ -591,7 +588,6 @@ services: - OTEL_RESOURCE_ATTRIBUTES - OTEL_SERVICE_NAME=shipping - OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE - - IPV6_ENABLED healthcheck: test: ["CMD-SHELL", "timeout 1 bash -c '>/dev/tcp/localhost/${SHIPPING_PORT}'"] start_period: 10s From 40ccb4c81cabb7a5f8d987f910c2caccf52d8bd2 Mon Sep 17 00:00:00 2001 From: gnmeyer Date: Thu, 25 Sep 2025 15:47:15 -0700 Subject: [PATCH 3/8] chore: update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index c0ab13b245..18a7d3aa63 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ process content of "Unreleased" section content will generate release notes for the release. ## Unreleased +* add ipv6 support ## 2.1.1 From e5d26b7fad4815a2a2b9d987d73cb93f2b5792a2 Mon Sep 17 00:00:00 2001 From: Juliano Costa Date: Thu, 2 Oct 2025 16:22:11 +0200 Subject: [PATCH 4/8] Update CHANGELOG.md --- CHANGELOG.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 653b6e1935..5c8a27588e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,7 +6,9 @@ process content of "Unreleased" section content will generate release notes for the release. ## Unreleased -* add ipv6 support + +* [feat] add ipv6 support + ([#2594](https://github.com/open-telemetry/opentelemetry-demo/pull/2594)) ## 2.1.3 From 85ae0e117e4c03d1136839c8205de7dff870b87c Mon Sep 17 00:00:00 2001 From: Juliano Costa Date: Fri, 3 Oct 2025 09:14:39 +0200 Subject: [PATCH 5/8] Move ENVOY_PORT up --- .env | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.env b/.env index 46637b5525..6ad64b1c96 100644 --- a/.env +++ b/.env @@ -81,12 +81,12 @@ FRONTEND_ADDR=frontend:${FRONTEND_PORT} FRONTEND_DOCKERFILE=./src/frontend/Dockerfile # Frontend Proxy (Envoy) -FRONTEND_HOST=frontend -FRONTEND_PROXY_ADDR=frontend-proxy:${ENVOY_PORT} -FRONTEND_PROXY_DOCKERFILE=./src/frontend-proxy/Dockerfile ENVOY_ADDR=0.0.0.0 ENVOY_PORT=8080 ENVOY_ADMIN_PORT=10000 +FRONTEND_HOST=frontend +FRONTEND_PROXY_ADDR=frontend-proxy:${ENVOY_PORT} +FRONTEND_PROXY_DOCKERFILE=./src/frontend-proxy/Dockerfile # Image Provider IMAGE_PROVIDER_HOST=image-provider From 9589ec2d0e465f321e64c9b0c2bd7b1bcdcec7f7 Mon Sep 17 00:00:00 2001 From: Juliano Costa Date: Fri, 3 Oct 2025 10:28:40 +0200 Subject: [PATCH 6/8] Add `IPV6_ENABLED` env var --- docker-compose.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/docker-compose.yml b/docker-compose.yml index d2ec8c78d8..aca04fb2fc 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -190,6 +190,7 @@ services: - "${CURRENCY_PORT}" environment: - CURRENCY_PORT + - IPV6_ENABLED - VERSION=${IMAGE_VERSION} - OTEL_EXPORTER_OTLP_ENDPOINT - OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE @@ -342,6 +343,7 @@ services: - "${ENVOY_PORT}:${ENVOY_PORT}" - "${ENVOY_ADMIN_PORT}:${ENVOY_ADMIN_PORT}" environment: + - IPV6_ENABLED - FRONTEND_PORT - FRONTEND_HOST - LOCUST_WEB_HOST @@ -460,6 +462,7 @@ services: ports: - "${PAYMENT_PORT}" environment: + - IPV6_ENABLED - PAYMENT_PORT - FLAGD_HOST - FLAGD_PORT @@ -526,6 +529,7 @@ services: ports: - "${QUOTE_PORT}" environment: + - IPV6_ENABLED - OTEL_EXPORTER_OTLP_ENDPOINT=http://${OTEL_COLLECTOR_HOST}:${OTEL_COLLECTOR_PORT_HTTP} - OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE - OTEL_PHP_AUTOLOAD_ENABLED=true @@ -591,6 +595,7 @@ services: ports: - "${SHIPPING_PORT}" environment: + - IPV6_ENABLED - SHIPPING_PORT - QUOTE_ADDR - OTEL_EXPORTER_OTLP_ENDPOINT From d3ab0b12107e82595ed691e28a2bc44a42ce4ab8 Mon Sep 17 00:00:00 2001 From: Juliano Costa Date: Fri, 3 Oct 2025 10:29:21 +0200 Subject: [PATCH 7/8] Add IPv6 Flag control --- .env | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.env b/.env index 6ad64b1c96..1d32478baa 100644 --- a/.env +++ b/.env @@ -24,6 +24,9 @@ TRACETEST_IMAGE=kubeshop/tracetest:${TRACETEST_IMAGE_VERSION} # Demo Platform ENV_PLATFORM=local +# IPv6 Flag control +IPV6_ENABLED=false + # OpenTelemetry Collector HOST_FILESYSTEM=/ DOCKER_SOCK=/var/run/docker.sock From 2f922bd2de58ad642f4c0db836fb4a2410ab42bf Mon Sep 17 00:00:00 2001 From: Grant Meyer <77987842+gnmeyer@users.noreply.github.com> Date: Fri, 3 Oct 2025 16:52:05 -0700 Subject: [PATCH 8/8] update docker compose minimal --- docker-compose.minimal.yml | 5 +++++ docker-compose.yml | 1 - 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/docker-compose.minimal.yml b/docker-compose.minimal.yml index 5a4b306389..e51b86183d 100644 --- a/docker-compose.minimal.yml +++ b/docker-compose.minimal.yml @@ -152,6 +152,7 @@ services: ports: - "${CURRENCY_PORT}" environment: + - IPV6_ENABLED - CURRENCY_PORT - VERSION=${IMAGE_VERSION} - OTEL_EXPORTER_OTLP_ENDPOINT @@ -284,6 +285,7 @@ services: - OTEL_SERVICE_NAME=frontend-proxy - ENVOY_PORT - ENVOY_ADMIN_PORT + - ENVOY_ADDR - FLAGD_HOST - FLAGD_PORT - FLAGD_UI_HOST @@ -382,6 +384,7 @@ services: ports: - "${PAYMENT_PORT}" environment: + - IPV6_ENABLED - FLAGD_HOST - FLAGD_PORT - PAYMENT_PORT @@ -444,6 +447,7 @@ services: ports: - "${QUOTE_PORT}" environment: + - IPV6_ENABLED - OTEL_EXPORTER_OTLP_ENDPOINT=http://${OTEL_COLLECTOR_HOST}:${OTEL_COLLECTOR_PORT_HTTP} - OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE - OTEL_PHP_AUTOLOAD_ENABLED=true @@ -507,6 +511,7 @@ services: ports: - "${SHIPPING_PORT}" environment: + - IPV6_ENABLED - SHIPPING_PORT - QUOTE_ADDR - OTEL_EXPORTER_OTLP_ENDPOINT diff --git a/docker-compose.yml b/docker-compose.yml index aca04fb2fc..0a15c6866c 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -343,7 +343,6 @@ services: - "${ENVOY_PORT}:${ENVOY_PORT}" - "${ENVOY_ADMIN_PORT}:${ENVOY_ADMIN_PORT}" environment: - - IPV6_ENABLED - FRONTEND_PORT - FRONTEND_HOST - LOCUST_WEB_HOST