From bb15f474df97ed5f378731bcbed9f8ebb32f0f86 Mon Sep 17 00:00:00 2001 From: Carlos Alberto Cortez Date: Thu, 2 Nov 2023 19:27:28 +0100 Subject: [PATCH 1/5] Add a Kong example. --- kong/app/Dockerfile | 12 +++++++ kong/app/client.py | 65 ++++++++++++++++++++++++++++++++++ kong/app/requirements.txt | 1 + kong/collector.yml | 31 ++++++++++++++++ kong/docker-compose.yml | 74 +++++++++++++++++++++++++++++++++++++++ kong/kong.conf | 2 ++ 6 files changed, 185 insertions(+) create mode 100644 kong/app/Dockerfile create mode 100644 kong/app/client.py create mode 100644 kong/app/requirements.txt create mode 100644 kong/collector.yml create mode 100644 kong/docker-compose.yml create mode 100644 kong/kong.conf diff --git a/kong/app/Dockerfile b/kong/app/Dockerfile new file mode 100644 index 00000000..3ccc34a7 --- /dev/null +++ b/kong/app/Dockerfile @@ -0,0 +1,12 @@ +#COPY ./httpd-info.conf /usr/local/apache2/conf/extra/httpd-info.conf +FROM python:3-alpine3.15 + +RUN apk add build-base + +RUN mkdir /app +WORKDIR /app +ADD requirements.txt . +RUN pip install -r requirements.txt + +ADD *.py ./ +CMD ["python", "-u", "/app/client.py"] diff --git a/kong/app/client.py b/kong/app/client.py new file mode 100644 index 00000000..76262fe7 --- /dev/null +++ b/kong/app/client.py @@ -0,0 +1,65 @@ +#!/usr/bin/env python +# +# perform requests to a local kong service +# +# export DESTINATION_HOST=my-host-address +# export COLLECTOR_HOST=my-collector-host +# python client.py + +import os +import time +import requests +import sys + +def config_kong(host, collector): + while True: + try: + requests.get(f"http://{host}:8001/") + break + except Exception as e: + print("Kong API is not running yet, sleeping") + time.sleep(1) + continue + + try: + # Configure the OpenTelemetry plugin + res = requests.post(f"http://{host}:8001/plugins", json={ + 'name': 'opentelemetry', + 'config': { + 'endpoint': f"http://{collector}:4318/v1/traces", + 'resource_attributes': { 'service.name': 'kong-dev' }, + }, + }) + print(res.text) + # Create the service + res = requests.post(f"http://{host}:8001/services", json={ + 'name': 'servicenow_service', + 'url': 'http://www.servicenow.com', + }) + print(res.text) + # Create the route + res = requests.post(f"http://{host}:8001/services/servicenow_service/routes", json={ + 'paths': ['/servicenow'], + 'name': 'servicenow_route', + }) + print(res.text) + except Exception as e: + print(f"Initial configuration failed: {e}") + sys.exit(1) + +def send_requests(url): + try: + res = requests.get(url) + print(f"Request to {url}, got {len(res.content)} bytes") + except Exception as e: + print(f"Request to {url} failed {e}") + +if __name__ == "__main__": + host = os.getenv("DESTINATION_HOST", "localhost") + collector = os.getenv("COLLECTOR_HOST", "localhost") + config_kong(host, collector) + + target = f"http://{host}:8000/servicenow/company.html" + while True: + send_requests(target) + time.sleep(.5) diff --git a/kong/app/requirements.txt b/kong/app/requirements.txt new file mode 100644 index 00000000..f2293605 --- /dev/null +++ b/kong/app/requirements.txt @@ -0,0 +1 @@ +requests diff --git a/kong/collector.yml b/kong/collector.yml new file mode 100644 index 00000000..070cceab --- /dev/null +++ b/kong/collector.yml @@ -0,0 +1,31 @@ +receivers: + otlp: + protocols: + http: + cors: + allowed_origins: + - "*" + grpc: + tls: + +exporters: + logging: + loglevel: debug + # configuring otlp to Lightstep + otlp: + endpoint: ingest.lightstep.com:443 + headers: + "lightstep-access-token": "${LS_ACCESS_TOKEN}" + +processors: + batch: + +service: + telemetry: + logs: + level: debug + pipelines: + traces: + receivers: [otlp] + processors: [batch] + exporters: [logging, otlp] diff --git a/kong/docker-compose.yml b/kong/docker-compose.yml new file mode 100644 index 00000000..89a3e19b --- /dev/null +++ b/kong/docker-compose.yml @@ -0,0 +1,74 @@ +version: '3.9' +services: + kong-database: + image: postgres:10.5 + restart: always + environment: + - POSTGRES_USER=kong + - POSTGRES_PASSWORD=kongpass + logging: + options: + max-size: 10m + max-file: "3" + ports: + - '5432:5432' + kong-db-init: + image: kong/kong-gateway:3.4.1.1 + command: kong migrations bootstrap + environment: + - KONG_DATABASE=postgres + - KONG_PG_HOST=kong-database + - KONG_PG_USER=kong + - KONG_PG_PASSWORD=kongpass + depends_on: + kong-database: + condition: service_started + kong-gateway: + image: kong/kong-gateway:3.4.1.1 + environment: + - KONG_DATABASE=postgres + - KONG_PG_HOST=kong-database + - KONG_PG_USER=kong + - KONG_PG_PASSWORD=kongpass + - KONG_PROXY_ACCESS_LOG=/dev/stdout + - KONG_ADMIN_ACCESS_LOG=/dev/stdout + - KONG_PROXY_ERROR_LOG=/dev/stderr + - KONG_ADMIN_ERROR_LOG=/dev/stderr + - KONG_ADMIN_LISTEN=0.0.0.0:8001 + - KONG_ADMIN_GUI_URL=http://localhost:8002 + ports: + - '8000:8000' + - '8443:8443' + - '8001:8001' + - '8444:8444' + - '8002:8002' + - '8445:8445' + - '8003:8003' + - '8004:8004' + depends_on: + kong-db-init: + condition: service_completed_successfully + volumes: + - ./kong.conf:/etc/kong/kong.conf:rw + client: + build: ./app + container_name: client + environment: + - DESTINATION_HOST=kong-gateway + - COLLECTOR_HOST=otel-collector + depends_on: + kong-gateway: + condition: service_started + otel-collector: + condition: service_started + stop_grace_period: 1s + otel-collector: + container_name: otel-collector + image: otel/opentelemetry-collector-contrib:0.88.0 + command: ["--config=/conf/collector.yml"] + environment: + LS_ACCESS_TOKEN: ${LS_ACCESS_TOKEN} + ports: + - "4318:4318" + volumes: + - ./collector.yml:/conf/collector.yml:rw diff --git a/kong/kong.conf b/kong/kong.conf new file mode 100644 index 00000000..0379780f --- /dev/null +++ b/kong/kong.conf @@ -0,0 +1,2 @@ +tracing_instrumentations = all +tracing_sampling_rate = 1.0 From 6fdd2b901b440240c349c4553bd5492cdebe59bf Mon Sep 17 00:00:00 2001 From: Carlos Alberto Cortez Date: Thu, 2 Nov 2023 19:30:28 +0100 Subject: [PATCH 2/5] Add README --- kong/README.md | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 kong/README.md diff --git a/kong/README.md b/kong/README.md new file mode 100644 index 00000000..7de82b9d --- /dev/null +++ b/kong/README.md @@ -0,0 +1,6 @@ +# Kong Example + +``` +export LS_ACCESS_TOKEN="my-access-token" +docker-compose up +``` From 4c124d2a1db189ac2f81b1a7f8ed89ddaea08a30 Mon Sep 17 00:00:00 2001 From: Carlos Alberto Cortez Date: Wed, 22 Nov 2023 17:11:07 +0100 Subject: [PATCH 3/5] Move the current kong example to be under a k8s subdir. --- collector/kong/{ => k8s}/Makefile | 0 collector/kong/{ => k8s}/README.md | 0 collector/kong/{ => k8s}/install_collector.sh | 0 collector/kong/{ => k8s}/kind-config.yaml | 0 collector/kong/{ => k8s}/values-collector.yaml | 0 5 files changed, 0 insertions(+), 0 deletions(-) rename collector/kong/{ => k8s}/Makefile (100%) rename collector/kong/{ => k8s}/README.md (100%) rename collector/kong/{ => k8s}/install_collector.sh (100%) rename collector/kong/{ => k8s}/kind-config.yaml (100%) rename collector/kong/{ => k8s}/values-collector.yaml (100%) diff --git a/collector/kong/Makefile b/collector/kong/k8s/Makefile similarity index 100% rename from collector/kong/Makefile rename to collector/kong/k8s/Makefile diff --git a/collector/kong/README.md b/collector/kong/k8s/README.md similarity index 100% rename from collector/kong/README.md rename to collector/kong/k8s/README.md diff --git a/collector/kong/install_collector.sh b/collector/kong/k8s/install_collector.sh similarity index 100% rename from collector/kong/install_collector.sh rename to collector/kong/k8s/install_collector.sh diff --git a/collector/kong/kind-config.yaml b/collector/kong/k8s/kind-config.yaml similarity index 100% rename from collector/kong/kind-config.yaml rename to collector/kong/k8s/kind-config.yaml diff --git a/collector/kong/values-collector.yaml b/collector/kong/k8s/values-collector.yaml similarity index 100% rename from collector/kong/values-collector.yaml rename to collector/kong/k8s/values-collector.yaml From e4df31b047e09a82d862b8186be5c8857a13a24b Mon Sep 17 00:00:00 2001 From: Carlos Alberto Cortez Date: Wed, 22 Nov 2023 17:21:01 +0100 Subject: [PATCH 4/5] Move the new kong example to be under collector/kong/compose --- {kong => collector/kong/compose}/README.md | 0 {kong => collector/kong/compose}/app/Dockerfile | 0 {kong => collector/kong/compose}/app/client.py | 0 {kong => collector/kong/compose}/app/requirements.txt | 0 {kong => collector/kong/compose}/collector.yml | 0 {kong => collector/kong/compose}/docker-compose.yml | 0 {kong => collector/kong/compose}/kong.conf | 0 7 files changed, 0 insertions(+), 0 deletions(-) rename {kong => collector/kong/compose}/README.md (100%) rename {kong => collector/kong/compose}/app/Dockerfile (100%) rename {kong => collector/kong/compose}/app/client.py (100%) rename {kong => collector/kong/compose}/app/requirements.txt (100%) rename {kong => collector/kong/compose}/collector.yml (100%) rename {kong => collector/kong/compose}/docker-compose.yml (100%) rename {kong => collector/kong/compose}/kong.conf (100%) diff --git a/kong/README.md b/collector/kong/compose/README.md similarity index 100% rename from kong/README.md rename to collector/kong/compose/README.md diff --git a/kong/app/Dockerfile b/collector/kong/compose/app/Dockerfile similarity index 100% rename from kong/app/Dockerfile rename to collector/kong/compose/app/Dockerfile diff --git a/kong/app/client.py b/collector/kong/compose/app/client.py similarity index 100% rename from kong/app/client.py rename to collector/kong/compose/app/client.py diff --git a/kong/app/requirements.txt b/collector/kong/compose/app/requirements.txt similarity index 100% rename from kong/app/requirements.txt rename to collector/kong/compose/app/requirements.txt diff --git a/kong/collector.yml b/collector/kong/compose/collector.yml similarity index 100% rename from kong/collector.yml rename to collector/kong/compose/collector.yml diff --git a/kong/docker-compose.yml b/collector/kong/compose/docker-compose.yml similarity index 100% rename from kong/docker-compose.yml rename to collector/kong/compose/docker-compose.yml diff --git a/kong/kong.conf b/collector/kong/compose/kong.conf similarity index 100% rename from kong/kong.conf rename to collector/kong/compose/kong.conf From cdbfe96d167dfd1cd060e8fb975fb1543cb11894 Mon Sep 17 00:00:00 2001 From: Carlos Alberto Cortez Date: Fri, 24 Nov 2023 16:56:32 +0100 Subject: [PATCH 5/5] Use httpbin instead of servicenow.com for testing purposes. --- collector/kong/compose/app/client.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/collector/kong/compose/app/client.py b/collector/kong/compose/app/client.py index 76262fe7..32990344 100644 --- a/collector/kong/compose/app/client.py +++ b/collector/kong/compose/app/client.py @@ -33,14 +33,14 @@ def config_kong(host, collector): print(res.text) # Create the service res = requests.post(f"http://{host}:8001/services", json={ - 'name': 'servicenow_service', - 'url': 'http://www.servicenow.com', + 'name': 'httpbin_service', + 'url': 'http://httpbin.org', }) print(res.text) # Create the route - res = requests.post(f"http://{host}:8001/services/servicenow_service/routes", json={ - 'paths': ['/servicenow'], - 'name': 'servicenow_route', + res = requests.post(f"http://{host}:8001/services/httpbin_service/routes", json={ + 'paths': ['/httpbin'], + 'name': 'httpbin_route', }) print(res.text) except Exception as e: @@ -59,7 +59,7 @@ def send_requests(url): collector = os.getenv("COLLECTOR_HOST", "localhost") config_kong(host, collector) - target = f"http://{host}:8000/servicenow/company.html" + target = f"http://{host}:8000/httpbin/get" while True: send_requests(target) time.sleep(.5)