Easy problems: only port-forward works, ingress doesn't. Spring boot doesn't deploy processes

Hi everyone, thanks for reading this.
There are two problems:

  • Even if I setup the ingress and the controller, the UI is not accessible from the browser. With port forward, it works
  • Even if I port forwarded the task list and zeebe gateway, the spring boot application doesn’t deploy my process. It doesn’t give any error but it doesn’t deploy.

Environment description

  • Running on MacBook pro i9 8cores, 36 Gb ram
  • Docker limits 8 cores - 24 Gb ram, swap 1Gb
  • /etc/hosts has the following records:

127.0.0.1 camunda.local
127.0.0.1 zeebe.camunda.local
  • camunda-platform-core-kind-values.yaml
global:
  identity:
    auth:
      # Disable the Identity authentication for local development
      # it will fall back to basic-auth: demo/demo as default user
      enabled: false
      publicIssuerUrl: "https://camunda.local/auth/realms/camunda-platform"
      operate:
        redirectUrl: "https://camunda.local/operate"
      tasklist:
        redirectUrl: "https://camunda.local/tasklist"
      optimize:
        redirectUrl: "https://camunda.local/optimize"
      webModeler:
        redirectUrl: "https://camunda.local/modeler"
      console:
        redirectUrl: "https://camunda.local/console"

# Disable identity as part of the Camunda core
identity:
  enabled: false
  contextPath: "/identity"
  fullURL: "https://camunda.local/identity"

operate:
  contextPath: "/operate"

optimize:
  enabled: false
  contextPath: "/optimize"

tasklist:
  contextPath: "/tasklist"

webModeler:
  contextPath: "/modeler"

console:
  contextPath: "/console"

zeebe:
  clusterSize: 1
  partitionCount: 1
  replicationFactor: 1
  pvcSize: 10Gi

zeebeGateway:
  replicas: 1
  contextPath: "/zeebe"

connectors:
  enabled: true
  inbound:
    mode: disabled

elasticsearch:
  master:
    replicaCount: 1
    persistence:
      size: 15Gi

# Ingress configuration
ingress:
  enabled: true
  className: nginx
  annotations:
    kubernetes.io/ingress.class: "nginx"
  hosts:
    - host: "camunda.local"
      paths:
        - path: "/"
          pathType: ImplementationSpecific
          backend:
            service:
              name: camunda-platform-tasklist
              port:
                number: 80
        - path: "/operate"
          pathType: ImplementationSpecific
          backend:
            service:
              name: camunda-platform-operate
              port:
                number: 80
        - path: "/tasklist"
          pathType: ImplementationSpecific
          backend:
            service:
              name: camunda-platform-tasklist
              port:
                number: 80
        - path: "/identity"
          pathType: ImplementationSpecific
          backend:
            service:
              name: camunda-platform-keycloak
              port:
                number: 80

  • Kind config:
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
  - role: control-plane
    kubeadmConfigPatches:
      - |
        kind: InitConfiguration
        nodeRegistration:
          kubeletExtraArgs:
            node-labels: "ingress-ready=true"
    extraPortMappings:
      - containerPort: 80
        hostPort: 80
      - containerPort: 443
        hostPort: 443
      - containerPort: 26500
        hostPort: 26500
      - containerPort: 18080
        hostPort: 18080
  • deployment script:

#!/bin/zsh

# Function to run a command in a new Terminal window
run_in_new_window() {
    osascript -e "tell application \"Terminal\" to do script \"$1\""
}

kind delete cluster --name camunda-platform-local
# Set the directory containing the YAML and config files
CONFIG_DIR="$(pwd)"

# Function to check for command availability
function check_command() {
  command -v $1 >/dev/null 2>&1 || { echo >&2 "I require $1 but it's not installed. Aborting."; exit 1; }
}

echo "Checking for required commands..."
check_command helm
check_command kind
check_command kubectl

echo "Adding the Camunda Helm repository..."
helm repo add camunda https://helm.camunda.io

echo "Updating Helm repositories..."
helm repo update

echo "Creating a Kind cluster..."
kind create cluster --name camunda-platform-local --config $CONFIG_DIR/kind.config

echo "Applying NGINX Ingress..."
helm install -f ingress_nginx_values.yml \
    ingress-nginx ingress-nginx \
    --repo https://kubernetes.github.io/ingress-nginx \
    --version "4.9.0" \
    --namespace ingress-nginx \
    --create-namespace

echo "Waiting for NGINX Ingress to be ready..."
kubectl wait --namespace ingress-nginx \
  --for=condition=ready pod \
  --selector=app.kubernetes.io/component=controller \
  --timeout=120s

echo "Installing Camunda BPM platform..."
helm install camunda-platform camunda/camunda-platform \
    -f $CONFIG_DIR/camunda-platform-core-kind-values.yaml

echo "Setup complete. You can now access the Camunda Tasklist UI at http://localhost."

echo "Start port forwardings"

The result is that all the pods are running, no visible errors but the tasklist web app is not reachable from the browser. It gives nginx 404.

with port forwarding, I can access the task list web app:

port-forward svc/camunda-platform-tasklist 8080:80 
port-forward svc/camunda-platform-zeebe-gateway 26500:26500

Then, when I run the spring boot application with this properties file:

spring.datasource.url: jdbc:h2:file:./camunda-h2-database

spring:
  application:
    name: bpm-orchestration

  datasource:
    url: jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE
    driver-class-name: org.h2.Driver
    username: sa
    password:

  jpa:
    database-platform: org.hibernate.dialect.H2Dialect
    hibernate:
      ddl-auto: update
    show-sql: true

camunda:
  bpm:
    client:
      request-timeout: 5000 # Milliseconds
      base-url: http://camunda.local/zeebe # URL to your Zeebe gateway
      worker:
        id: default-worker
        max-tasks: 100
        lock-duration: 10000 # Milliseconds
    enabled: true # Enables Camunda Bpm Client

zeebe:
  client:
    worker:
      hazelcast:
        enabled: false
    job:
      worker:
        name: default-worker
        max-jobs-active: 32
        timeout: 30000 # Milliseconds
        poll-interval: 100 # Milliseconds
    cloud:
      enabled: false
    broker:
      gateway-address: camunda.local:26500 # Adjust the port if different
      security:
        plaintext: true

and this code:

package com.dungbeetle.configuration;

import org.camunda.bpm.engine.RepositoryService;
import org.camunda.bpm.engine.repository.Deployment;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;

@Component
public class ProcessDeployer implements CommandLineRunner {

    @Autowired
    private RepositoryService repositoryService;

    @Override
    public void run(String... args) {
        deployProcess("llm-demo.bpmn");
    }

    private void deployProcess(String resourcePath) {
        Deployment deployment = repositoryService.createDeployment()
                .addClasspathResource(resourcePath)
                .name("My Process Deployment")
                .deploy();

        System.out.println("Deployed process definition id: " + deployment.getId());
    }
}

Please, forgive the System out :slight_smile:
The logs are:

2024-05-11T21:16:38.380+10:00  INFO 39273 --- [           main] com.dungbeetle.Application               : Starting Application using Java 17.0.8.1 with PID 39273 (/Users/danilo/Documents/repos/mono-llm/applications/bpm-orchestration/target/classes started by danilo in /Users/danilo/Documents/repos/mono-llm)
2024-05-11T21:16:38.385+10:00  INFO 39273 --- [           main] com.dungbeetle.Application               : No active profile set, falling back to 1 default profile: "default"
2024-05-11T21:16:39.669+10:00  INFO 39273 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8085 (http)
2024-05-11T21:16:39.678+10:00  INFO 39273 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2024-05-11T21:16:39.679+10:00  INFO 39273 --- [           main] o.apache.catalina.core.StandardEngine    : Starting Servlet engine: [Apache Tomcat/10.1.10]
2024-05-11T21:16:39.780+10:00  INFO 39273 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2024-05-11T21:16:39.782+10:00  INFO 39273 --- [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 1351 ms
2024-05-11T21:16:39.804+10:00  INFO 39273 --- [           main] .c.b.s.b.s.r.CamundaJerseyResourceConfig : Configuring camunda rest api.
2024-05-11T21:16:39.824+10:00  INFO 39273 --- [           main] .c.b.s.b.s.r.CamundaJerseyResourceConfig : Finished configuring camunda rest api.
2024-05-11T21:16:40.094+10:00  INFO 39273 --- [           main] org.camunda.bpm.spring.boot              : STARTER-SB040 Setting up jobExecutor with corePoolSize=3, maxPoolSize:10
2024-05-11T21:16:40.150+10:00  INFO 39273 --- [           main] org.camunda.bpm.engine.cfg               : ENGINE-12003 Plugin 'CompositeProcessEnginePlugin[genericPropertiesConfiguration, camundaProcessEngineConfiguration, camundaDatasourceConfiguration, camundaJobConfiguration, camundaHistoryConfiguration, camundaMetricsConfiguration, camundaAuthorizationConfiguration, camundaDeploymentConfiguration, failedJobConfiguration, eventPublisherPlugin, ApplicationContextClassloaderSwitchPlugin, SpringBootSpinProcessEnginePlugin]' activated on process engine 'default'
2024-05-11T21:16:40.958+10:00  INFO 39273 --- [           main] org.camunda.bpm.spring.boot              : STARTER-SB021 Auto-Deploying resources: [file [/Users/danilo/Documents/repos/mono-llm/applications/bpm-orchestration/target/classes/process.bpmn], file [/Users/danilo/Documents/repos/mono-llm/applications/bpm-orchestration/target/classes/cognitive-load-build-process.bpmn], file [/Users/danilo/Documents/repos/mono-llm/applications/bpm-orchestration/target/classes/cognitive-load-extrction.bpmn], file [/Users/danilo/Documents/repos/mono-llm/applications/bpm-orchestration/target/classes/llm-demo.bpmn]]
2024-05-11T21:16:40.961+10:00  INFO 39273 --- [           main] o.c.b.s.b.s.event.EventPublisherPlugin   : EVENTING-001: Initialized Camunda Spring Boot Eventing Engine Plugin.
2024-05-11T21:16:40.961+10:00  INFO 39273 --- [           main] o.c.b.s.b.s.event.EventPublisherPlugin   : EVENTING-003: Task events will be published as Spring Events.
2024-05-11T21:16:40.961+10:00  INFO 39273 --- [           main] o.c.b.s.b.s.event.EventPublisherPlugin   : EVENTING-005: Execution events will be published as Spring Events.
2024-05-11T21:16:40.961+10:00  INFO 39273 --- [           main] o.c.b.s.b.s.event.EventPublisherPlugin   : EVENTING-009: Listeners will not be invoked if a skipCustomListeners API parameter is set to true by user.
2024-05-11T21:16:40.966+10:00  INFO 39273 --- [           main] o.c.b.s.b.s.event.EventPublisherPlugin   : EVENTING-007: History events will be published as Spring events.
2024-05-11T21:16:40.969+10:00  INFO 39273 --- [           main] org.camunda.spin                         : SPIN-01010 Discovered Spin data format provider: org.camunda.spin.impl.json.jackson.format.JacksonJsonDataFormatProvider[name = application/json]
2024-05-11T21:16:41.127+10:00  INFO 39273 --- [           main] org.camunda.spin                         : SPIN-01010 Discovered Spin data format provider: org.camunda.spin.impl.xml.dom.format.DomXmlDataFormatProvider[name = application/xml]
2024-05-11T21:16:41.204+10:00  INFO 39273 --- [           main] org.camunda.spin                         : SPIN-01009 Discovered Spin data format: org.camunda.spin.impl.xml.dom.format.DomXmlDataFormat[name = application/xml]
2024-05-11T21:16:41.204+10:00  INFO 39273 --- [           main] org.camunda.spin                         : SPIN-01009 Discovered Spin data format: org.camunda.spin.impl.json.jackson.format.JacksonJsonDataFormat[name = application/json]
2024-05-11T21:16:41.325+10:00  INFO 39273 --- [           main] org.camunda.bpm.dmn.feel.scala           : FEEL/SCALA-01001 Spin value mapper detected
2024-05-11T21:16:41.420+10:00  INFO 39273 --- [           main] org.camunda.feel.FeelEngine              : Engine created. [value-mapper: CompositeValueMapper(List(org.camunda.feel.impl.JavaValueMapper@a047bdb, org.camunda.spin.plugin.impl.feel.integration.SpinValueMapper@14dbfdb1)), function-provider: org.camunda.bpm.dmn.feel.impl.scala.function.CustomFunctionTransformer@76134b9b, clock: SystemClock, configuration: Configuration(false)]
2024-05-11T21:16:41.505+10:00  INFO 39273 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Starting...
2024-05-11T21:16:41.700+10:00  INFO 39273 --- [           main] com.zaxxer.hikari.pool.HikariPool        : HikariPool-1 - Added connection conn0: url=jdbc:h2:mem:testdb user=SA
2024-05-11T21:16:41.701+10:00  INFO 39273 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Start completed.
Standard Commons Logging discovery in action with spring-jcl: please remove commons-logging.jar from classpath in order to avoid potential conflicts
2024-05-11T21:16:43.877+10:00  INFO 39273 --- [           main] org.camunda.bpm.connect                  : CNCT-01004 Discovered provider for connector id 'http-connector' and class 'org.camunda.connect.httpclient.impl.HttpConnectorImpl': 'org.camunda.connect.httpclient.impl.HttpConnectorProviderImpl'
2024-05-11T21:16:43.885+10:00  INFO 39273 --- [           main] org.camunda.bpm.connect                  : CNCT-01004 Discovered provider for connector id 'soap-http-connector' and class 'org.camunda.connect.httpclient.soap.impl.SoapHttpConnectorImpl': 'org.camunda.connect.httpclient.soap.impl.SoapHttpConnectorProviderImpl'
2024-05-11T21:16:44.020+10:00  INFO 39273 --- [           main] org.camunda.bpm.engine.persistence       : ENGINE-03016 Performing database operation 'create' on component 'engine' with resource 'org/camunda/bpm/engine/db/create/activiti.h2.create.engine.sql'
2024-05-11T21:16:44.051+10:00  INFO 39273 --- [           main] org.camunda.bpm.engine.persistence       : ENGINE-03016 Performing database operation 'create' on component 'history' with resource 'org/camunda/bpm/engine/db/create/activiti.h2.create.history.sql'
2024-05-11T21:16:44.058+10:00  INFO 39273 --- [           main] org.camunda.bpm.engine.persistence       : ENGINE-03016 Performing database operation 'create' on component 'identity' with resource 'org/camunda/bpm/engine/db/create/activiti.h2.create.identity.sql'
2024-05-11T21:16:44.067+10:00  INFO 39273 --- [           main] org.camunda.bpm.engine.persistence       : ENGINE-03016 Performing database operation 'create' on component 'case.engine' with resource 'org/camunda/bpm/engine/db/create/activiti.h2.create.case.engine.sql'
2024-05-11T21:16:44.070+10:00  INFO 39273 --- [           main] org.camunda.bpm.engine.persistence       : ENGINE-03016 Performing database operation 'create' on component 'case.history' with resource 'org/camunda/bpm/engine/db/create/activiti.h2.create.case.history.sql'
2024-05-11T21:16:44.073+10:00  INFO 39273 --- [           main] org.camunda.bpm.engine.persistence       : ENGINE-03016 Performing database operation 'create' on component 'decision.engine' with resource 'org/camunda/bpm/engine/db/create/activiti.h2.create.decision.engine.sql'
2024-05-11T21:16:44.077+10:00  INFO 39273 --- [           main] org.camunda.bpm.engine.persistence       : ENGINE-03016 Performing database operation 'create' on component 'decision.history' with resource 'org/camunda/bpm/engine/db/create/activiti.h2.create.decision.history.sql'
2024-05-11T21:16:44.101+10:00  INFO 39273 --- [           main] org.camunda.bpm.engine.persistence       : ENGINE-03067 No history level property found in database
2024-05-11T21:16:44.103+10:00  INFO 39273 --- [           main] org.camunda.bpm.engine.persistence       : ENGINE-03065 Creating historyLevel property in database for level: HistoryLevelFull(name=full, id=3)
2024-05-11T21:16:44.118+10:00  INFO 39273 --- [           main] org.camunda.bpm.engine                   : ENGINE-00001 Process Engine default created.
2024-05-11T21:16:44.243+10:00  WARN 39273 --- [           main] org.camunda.bpm.engine.cfg               : ENGINE-12016 definitionKey: bpm-orchestration-process; You are using the default TTL (Time To Live) of 180 days (six months); the history clean-up feature will delete your data after six months. We recommend adjusting the TTL configuration property aligned with your specific requirements.
2024-05-11T21:16:44.296+10:00  WARN 39273 --- [           main] org.camunda.bpm.engine.cfg               : ENGINE-12016 definitionKey: llm-demo-process; You are using the default TTL (Time To Live) of 180 days (six months); the history clean-up feature will delete your data after six months. We recommend adjusting the TTL configuration property aligned with your specific requirements.
2024-05-11T21:16:44.319+10:00  WARN 39273 --- [           main] org.camunda.bpm.engine.cfg               : ENGINE-12016 definitionKey: cognitive-load-build-process; You are using the default TTL (Time To Live) of 180 days (six months); the history clean-up feature will delete your data after six months. We recommend adjusting the TTL configuration property aligned with your specific requirements.
2024-05-11T21:16:44.337+10:00  WARN 39273 --- [           main] org.camunda.bpm.engine.cfg               : ENGINE-12016 definitionKey: llm-demo-process2; You are using the default TTL (Time To Live) of 180 days (six months); the history clean-up feature will delete your data after six months. We recommend adjusting the TTL configuration property aligned with your specific requirements.
2024-05-11T21:16:44.669+10:00  INFO 39273 --- [           main] o.c.b.s.b.s.w.f.LazyInitRegistration     : lazy initialized org.camunda.bpm.spring.boot.starter.webapp.filter.LazySecurityFilter@11dcd42c
2024-05-11T21:16:44.670+10:00  INFO 39273 --- [           main] o.c.b.s.b.s.w.f.LazyInitRegistration     : lazy initialized org.camunda.bpm.spring.boot.starter.webapp.filter.LazyProcessEnginesFilter@715a70e9
2024-05-11T21:16:44.735+10:00  INFO 39273 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8085 (http) with context path ''
2024-05-11T21:16:44.748+10:00  INFO 39273 --- [           main] com.dungbeetle.Application               : Started Application in 6.801 seconds (process running for 7.223)
2024-05-11T21:16:44.762+10:00  WARN 39273 --- [           main] org.camunda.bpm.engine.cfg               : ENGINE-12016 definitionKey: llm-demo-process; You are using the default TTL (Time To Live) of 180 days (six months); the history clean-up feature will delete your data after six months. We recommend adjusting the TTL configuration property aligned with your specific requirements.
Deployed process definition id: f33ae78b-0f87-11ef-a900-22d9f49eaec3
2024-05-11T21:16:44.769+10:00  INFO 39273 --- [           main] org.camunda.bpm.engine.jobexecutor       : ENGINE-14014 Starting up the JobExecutor[org.camunda.bpm.engine.spring.components.jobexecutor.SpringJobExecutor].
2024-05-11T21:16:44.770+10:00  INFO 39273 --- [ingJobExecutor]] org.camunda.bpm.engine.jobexecutor       : ENGINE-14018 JobExecutor[org.camunda.bpm.engine.spring.components.jobexecutor.SpringJobExecutor] starting to acquire jobs
2024-05-12T09:38:17.844+10:00  WARN 39273 --- [l-1 housekeeper] com.zaxxer.hikari.pool.HikariPool        : HikariPool-1 - Retrograde clock change detected (housekeeper delta=29s773ms), soft-evicting connections from pool.

but the task list doesn’t show any process deployed.

In a local installation of the camunda server, the process didn’t even need to be deployed by the class. They were deployed automatically.

Please,help me out. Thanks.