diff --git a/tests/e2e-openshift/multi-cluster/00-assert.yaml b/tests/e2e-openshift/multi-cluster/00-assert.yaml new file mode 100644 index 0000000000..ea28ae0bd9 --- /dev/null +++ b/tests/e2e-openshift/multi-cluster/00-assert.yaml @@ -0,0 +1,29 @@ +apiVersion: project.openshift.io/v1 +kind: Project +metadata: + name: kuttl-multi-cluster-send +status: + phase: Active + +apiVersion: project.openshift.io/v1 +kind: Project +metadata: + name: kuttl-multi-cluster-receive +status: + phase: Active + +--- +apiVersion: cert-manager.io/v1 +kind: ClusterIssuer +metadata: + name: letsencrypt-staging +spec: + acme: + preferredChain: "" + privateKeySecretRef: + name: private-key-lets-encrypt + server: https://acme-staging-v02.api.letsencrypt.org/directory + solvers: + - http01: + ingress: + class: openshift-default diff --git a/tests/e2e-openshift/multi-cluster/00-cert-manager.yaml b/tests/e2e-openshift/multi-cluster/00-cert-manager.yaml new file mode 100644 index 0000000000..a43386966d --- /dev/null +++ b/tests/e2e-openshift/multi-cluster/00-cert-manager.yaml @@ -0,0 +1,27 @@ +apiVersion: v1 +kind: Namespace +metadata: + name: kuttl-multi-cluster-send + +--- +apiVersion: v1 +kind: Namespace +metadata: + name: kuttl-multi-cluster-receive + +--- +apiVersion: cert-manager.io/v1 +kind: ClusterIssuer +metadata: + name: letsencrypt-staging + namespace: observability +spec: + acme: + preferredChain: "" + privateKeySecretRef: + name: private-key-lets-encrypt + server: https://acme-staging-v02.api.letsencrypt.org/directory + solvers: + - http01: + ingress: + class: openshift-default diff --git a/tests/e2e-openshift/multi-cluster/01-assert.yaml b/tests/e2e-openshift/multi-cluster/01-assert.yaml new file mode 100644 index 0000000000..f2c8714806 --- /dev/null +++ b/tests/e2e-openshift/multi-cluster/01-assert.yaml @@ -0,0 +1,126 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app: jaeger + app.kubernetes.io/component: all-in-one + app.kubernetes.io/instance: jaeger-allinone + app.kubernetes.io/managed-by: jaeger-operator + app.kubernetes.io/name: jaeger-allinone + app.kubernetes.io/part-of: jaeger + name: jaeger-allinone + namespace: kuttl-multi-cluster-receive +status: + availableReplicas: 1 + readyReplicas: 1 + replicas: 1 + +--- +apiVersion: v1 +kind: Service +metadata: + labels: + app: jaeger + app.kubernetes.io/component: service-collector + app.kubernetes.io/instance: jaeger-allinone + app.kubernetes.io/managed-by: jaeger-operator + app.kubernetes.io/name: jaeger-allinone-collector + app.kubernetes.io/part-of: jaeger + name: jaeger-allinone-collector + namespace: kuttl-multi-cluster-receive +spec: + ports: + - name: http-zipkin + port: 9411 + protocol: TCP + targetPort: 9411 + - name: tls-grpc-jaeger + port: 14250 + protocol: TCP + targetPort: 14250 + - name: http-c-tchan-trft + port: 14267 + protocol: TCP + targetPort: 14267 + - name: http-c-binary-trft + port: 14268 + protocol: TCP + targetPort: 14268 + - name: admin-http + port: 14269 + protocol: TCP + targetPort: 14269 + - name: grpc-otlp + port: 4317 + protocol: TCP + targetPort: 4317 + - name: http-otlp + port: 4318 + protocol: TCP + targetPort: 4318 + selector: + app: jaeger + app.kubernetes.io/component: all-in-one + app.kubernetes.io/instance: jaeger-allinone + app.kubernetes.io/managed-by: jaeger-operator + app.kubernetes.io/name: jaeger-allinone + app.kubernetes.io/part-of: jaeger + type: ClusterIP + +--- +apiVersion: v1 +kind: Service +metadata: + labels: + app: jaeger + app.kubernetes.io/component: service-query + app.kubernetes.io/instance: jaeger-allinone + app.kubernetes.io/managed-by: jaeger-operator + app.kubernetes.io/name: jaeger-allinone-query + app.kubernetes.io/part-of: jaeger + name: jaeger-allinone-query + namespace: kuttl-multi-cluster-receive +spec: + ports: + - name: http-query + port: 16686 + protocol: TCP + targetPort: 16686 + - name: grpc-query + port: 16685 + protocol: TCP + targetPort: 16685 + - name: admin-http + port: 16687 + protocol: TCP + targetPort: 16687 + selector: + app: jaeger + app.kubernetes.io/component: all-in-one + app.kubernetes.io/instance: jaeger-allinone + app.kubernetes.io/managed-by: jaeger-operator + app.kubernetes.io/name: jaeger-allinone + app.kubernetes.io/part-of: jaeger + type: ClusterIP + +--- +apiVersion: route.openshift.io/v1 +kind: Route +metadata: + labels: + app: jaeger + app.kubernetes.io/component: query-route + app.kubernetes.io/instance: jaeger-allinone + app.kubernetes.io/managed-by: jaeger-operator + app.kubernetes.io/name: jaeger-allinone + app.kubernetes.io/part-of: jaeger + name: jaeger-allinone + namespace: kuttl-multi-cluster-receive +spec: + port: + targetPort: http-query + tls: + termination: edge + to: + kind: Service + name: jaeger-allinone-query diff --git a/tests/e2e-openshift/multi-cluster/01-create-jaeger.yaml b/tests/e2e-openshift/multi-cluster/01-create-jaeger.yaml new file mode 100644 index 0000000000..bac7266626 --- /dev/null +++ b/tests/e2e-openshift/multi-cluster/01-create-jaeger.yaml @@ -0,0 +1,9 @@ +apiVersion: jaegertracing.io/v1 +kind: Jaeger +metadata: + name: jaeger-allinone + namespace: kuttl-multi-cluster-receive +spec: + strategy: allinone + ingress: + security: none diff --git a/tests/e2e-openshift/multi-cluster/02-assert.yaml b/tests/e2e-openshift/multi-cluster/02-assert.yaml new file mode 100644 index 0000000000..760f5faf9b --- /dev/null +++ b/tests/e2e-openshift/multi-cluster/02-assert.yaml @@ -0,0 +1,125 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app.kubernetes.io/component: opentelemetry-collector + app.kubernetes.io/instance: kuttl-multi-cluster-receive.otlp-receiver + app.kubernetes.io/managed-by: opentelemetry-operator + app.kubernetes.io/name: otlp-receiver-collector + app.kubernetes.io/part-of: opentelemetry + app.kubernetes.io/version: latest + name: otlp-receiver-collector + namespace: kuttl-multi-cluster-receive +status: + availableReplicas: 1 + readyReplicas: 1 + replicas: 1 + +--- +apiVersion: v1 +kind: Service +metadata: + labels: + app.kubernetes.io/component: opentelemetry-collector + app.kubernetes.io/instance: kuttl-multi-cluster-receive.otlp-receiver + app.kubernetes.io/managed-by: opentelemetry-operator + app.kubernetes.io/name: otlp-receiver-collector + app.kubernetes.io/part-of: opentelemetry + app.kubernetes.io/version: latest + name: otlp-receiver-collector + namespace: kuttl-multi-cluster-receive +spec: + ports: + - appProtocol: http + name: otlp-http + port: 4318 + protocol: TCP + targetPort: 4318 + - appProtocol: http + name: otlp-http-legacy + port: 55681 + protocol: TCP + targetPort: 4318 + selector: + app.kubernetes.io/component: opentelemetry-collector + app.kubernetes.io/instance: kuttl-multi-cluster-receive.otlp-receiver + app.kubernetes.io/managed-by: opentelemetry-operator + app.kubernetes.io/part-of: opentelemetry + type: ClusterIP + +--- +apiVersion: v1 +kind: Service +metadata: + labels: + app.kubernetes.io/component: opentelemetry-collector + app.kubernetes.io/instance: kuttl-multi-cluster-receive.otlp-receiver + app.kubernetes.io/managed-by: opentelemetry-operator + app.kubernetes.io/name: otlp-receiver-collector + app.kubernetes.io/part-of: opentelemetry + app.kubernetes.io/version: latest + operator.opentelemetry.io/collector-headless-service: Exists + name: otlp-receiver-collector-headless + namespace: kuttl-multi-cluster-receive +spec: + ports: + - appProtocol: http + name: otlp-http + port: 4318 + protocol: TCP + targetPort: 4318 + - appProtocol: http + name: otlp-http-legacy + port: 55681 + protocol: TCP + targetPort: 4318 + selector: + app.kubernetes.io/component: opentelemetry-collector + app.kubernetes.io/instance: kuttl-multi-cluster-receive.otlp-receiver + app.kubernetes.io/managed-by: opentelemetry-operator + app.kubernetes.io/part-of: opentelemetry + type: ClusterIP + +--- +apiVersion: route.openshift.io/v1 +kind: Route +metadata: + annotations: + acme.cert-manager.io/http01-ingress-class: openshift-default + labels: + app.kubernetes.io/instance: kuttl-multi-cluster-receive.otlp-receiver + app.kubernetes.io/managed-by: opentelemetry-operator + app.kubernetes.io/name: otlp-http-legacy-otlp-receiver-route + name: otlp-http-legacy-otlp-receiver-route + namespace: kuttl-multi-cluster-receive +spec: + path: /otlp-http-legacy + port: + targetPort: otlp-http-legac + tls: + termination: edge + to: + kind: Service + name: otlp-receiver-collector + +--- +apiVersion: route.openshift.io/v1 +kind: Route +metadata: + annotations: + acme.cert-manager.io/http01-ingress-class: openshift-default + labels: + app.kubernetes.io/instance: kuttl-multi-cluster-receive.otlp-receiver + app.kubernetes.io/managed-by: opentelemetry-operator + app.kubernetes.io/name: otlp-http-otlp-receiver-route + name: otlp-http-otlp-receiver-route + namespace: kuttl-multi-cluster-receive +spec: + path: /otlp-http + port: + targetPort: otlp-http + tls: + termination: edge + to: + kind: Service + name: otlp-receiver-collector diff --git a/tests/e2e-openshift/multi-cluster/02-otlp-receiver.yaml b/tests/e2e-openshift/multi-cluster/02-otlp-receiver.yaml new file mode 100644 index 0000000000..b39fed1b72 --- /dev/null +++ b/tests/e2e-openshift/multi-cluster/02-otlp-receiver.yaml @@ -0,0 +1,10 @@ +apiVersion: kuttl.dev/v1beta1 +kind: TestStep +commands: +- script: ./create_bearer_token_creds.sh + +--- +apiVersion: kuttl.dev/v1beta1 +kind: TestStep +commands: +- script: ./create_otlp_receiver.sh diff --git a/tests/e2e-openshift/multi-cluster/03-assert.yaml b/tests/e2e-openshift/multi-cluster/03-assert.yaml new file mode 100644 index 0000000000..187b3d25b1 --- /dev/null +++ b/tests/e2e-openshift/multi-cluster/03-assert.yaml @@ -0,0 +1,61 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app.kubernetes.io/component: opentelemetry-collector + app.kubernetes.io/instance: kuttl-multi-cluster-send.otel-sender + app.kubernetes.io/managed-by: opentelemetry-operator + app.kubernetes.io/name: otel-sender-collector + app.kubernetes.io/part-of: opentelemetry + app.kubernetes.io/version: latest + name: otel-sender-collector + namespace: kuttl-multi-cluster-send +status: + availableReplicas: 1 + readyReplicas: 1 + replicas: 1 + +--- +apiVersion: v1 +kind: Service +metadata: + labels: + app.kubernetes.io/component: opentelemetry-collector + app.kubernetes.io/instance: kuttl-multi-cluster-send.otel-sender + app.kubernetes.io/managed-by: opentelemetry-operator + app.kubernetes.io/name: otel-sender-collector + app.kubernetes.io/part-of: opentelemetry + app.kubernetes.io/version: latest + name: otel-sender-collector + namespace: kuttl-multi-cluster-send +spec: + ports: + - name: opencensus + port: 55678 + protocol: TCP + targetPort: 55678 + - appProtocol: grpc + name: otlp-grpc + port: 4317 + protocol: TCP + targetPort: 4317 + - appProtocol: http + name: otlp-http + port: 4318 + protocol: TCP + targetPort: 4318 + - appProtocol: http + name: otlp-http-legacy + port: 55681 + protocol: TCP + targetPort: 4318 + - appProtocol: http + name: zipkin + port: 9411 + protocol: TCP + targetPort: 9411 + selector: + app.kubernetes.io/component: opentelemetry-collector + app.kubernetes.io/instance: kuttl-multi-cluster-send.otel-sender + app.kubernetes.io/managed-by: opentelemetry-operator + app.kubernetes.io/part-of: opentelemetry diff --git a/tests/e2e-openshift/multi-cluster/03-otlp-sender.yaml b/tests/e2e-openshift/multi-cluster/03-otlp-sender.yaml new file mode 100644 index 0000000000..6de7f6d3b1 --- /dev/null +++ b/tests/e2e-openshift/multi-cluster/03-otlp-sender.yaml @@ -0,0 +1,43 @@ +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + name: kuttl-multi-cluster + namespace: kuttl-multi-cluster-send + +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: kuttl-multi-cluster +rules: +- apiGroups: ["config.openshift.io"] + resources: ["infrastructures", "infrastructures/status"] + verbs: ["get", "watch", "list"] +- apiGroups: ["apps"] + resources: ["replicasets"] + verbs: ["get", "watch", "list"] +- apiGroups: [""] + resources: ["pods"] + verbs: ["get", "watch", "list"] + +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: kuttl-multi-cluster +subjects: +- kind: ServiceAccount + name: kuttl-multi-cluster + namespace: kuttl-multi-cluster-send +roleRef: + kind: ClusterRole + name: kuttl-multi-cluster + apiGroup: rbac.authorization.k8s.io + +--- +--- +apiVersion: kuttl.dev/v1beta1 +kind: TestStep +commands: +- script: ./create_otlp_sender.sh diff --git a/tests/e2e-openshift/multi-cluster/04-assert.yaml b/tests/e2e-openshift/multi-cluster/04-assert.yaml new file mode 100644 index 0000000000..08adf2fe4b --- /dev/null +++ b/tests/e2e-openshift/multi-cluster/04-assert.yaml @@ -0,0 +1,9 @@ +apiVersion: batch/v1 +kind: Job +metadata: + name: generate-traces + namespace: kuttl-multi-cluster-send +status: + conditions: + - status: "True" + type: Complete diff --git a/tests/e2e-openshift/multi-cluster/04-generate-traces.yaml b/tests/e2e-openshift/multi-cluster/04-generate-traces.yaml new file mode 100644 index 0000000000..66a96a2342 --- /dev/null +++ b/tests/e2e-openshift/multi-cluster/04-generate-traces.yaml @@ -0,0 +1,17 @@ +apiVersion: batch/v1 +kind: Job +metadata: + name: generate-traces + namespace: kuttl-multi-cluster-send +spec: + template: + spec: + containers: + - name: telemetrygen + image: ghcr.io/open-telemetry/opentelemetry-collector-contrib/telemetrygen:v0.75.0 + args: + - traces + - --otlp-endpoint=otel-sender-collector:4317 + - --otlp-insecure + - --traces=100 + restartPolicy: Never diff --git a/tests/e2e-openshift/multi-cluster/05-assert.yaml b/tests/e2e-openshift/multi-cluster/05-assert.yaml new file mode 100644 index 0000000000..749f4f555a --- /dev/null +++ b/tests/e2e-openshift/multi-cluster/05-assert.yaml @@ -0,0 +1,6 @@ +--- +apiVersion: kuttl.dev/v1beta1 +kind: TestAssert +timeout: 30 +commands: +- script: ./tests/e2e-openshift/kuttl-multi-cluster/check_traces.sh diff --git a/tests/e2e-openshift/multi-cluster/check_traces.sh b/tests/e2e-openshift/multi-cluster/check_traces.sh new file mode 100755 index 0000000000..7227297ee2 --- /dev/null +++ b/tests/e2e-openshift/multi-cluster/check_traces.sh @@ -0,0 +1,12 @@ +#!/bin/bash +JAEGER_URL=$(oc -n kuttl-multi-cluster-send get route jaeger-allinone -o json | jq '.spec.host' -r) +SERVICE_NAME="telemetrygen" + +trace_exists=$(curl -ksSL "https://$JAEGER_URL/api/traces?service=$SERVICE_NAME&limit=1" | jq -r '.data | length') + +if [[ $trace_exists -gt 0 ]]; then + echo "Traces for $SERVICE_NAME exist in Jaeger." +else + echo "Trace for $SERVICE_NAME does not exist in Jaeger." + exit 1 # Fail the test step if the trace doesn't exist +fi diff --git a/tests/e2e-openshift/multi-cluster/create_bearer_token_creds.sh b/tests/e2e-openshift/multi-cluster/create_bearer_token_creds.sh new file mode 100755 index 0000000000..b29bfd2784 --- /dev/null +++ b/tests/e2e-openshift/multi-cluster/create_bearer_token_creds.sh @@ -0,0 +1,12 @@ +#!/bin/bash + +# Generate a random bearer token +bearer_token=$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 1) + +# Create the OpenShift secret with bearer token in kuttl-multi-cluster-send project. +oc -n kuttl-multi-cluster-send create secret generic my-token-secret \ + --from-literal=bearer_token="$bearer_token" + +# Create the OpenShift secret with bearer token in kuttl-multi-cluster-receive project. +oc -n kuttl-multi-cluster-receive create secret generic my-token-secret \ + --from-literal=bearer_token="$bearer_token" diff --git a/tests/e2e-openshift/multi-cluster/create_otlp_receiver.sh b/tests/e2e-openshift/multi-cluster/create_otlp_receiver.sh new file mode 100755 index 0000000000..b41e81f841 --- /dev/null +++ b/tests/e2e-openshift/multi-cluster/create_otlp_receiver.sh @@ -0,0 +1,65 @@ +#!/bin/bash + +# Get the cluster domain +hostname_domain=apps.$(oc get dns cluster -o jsonpath='{.spec.baseDomain}') + +# Define the template content +template_content=$(cat <