Skip to content

Health check ignored in blueprint + health check status not appearing in resource list. #2240

@eskori

Description

@eskori

Describe the Bug

Blueprints via Docker labels fail to enable health checks even if they are recognized as true.

Potentially related: after the resource is created, health check can be enabled manually, but it always shows as "Unknown" in the main Resources list (need to enter the resource details to see the actual status). I'm not sure if this should be a separate issue, if so please let me know.

Environment

  • OS Type & Version: AlmaLinux 10
  • Pangolin Version: 1.14.1
  • Gerbil Version: 1.3.0
  • Traefik Version: 3.6
  • Newt Version: 1.8.1

To Reproduce

First time writing an issue so please bear with me and sorry if I missed something! Anyways, the steps:

  1. Edit the compose file of the target container and add the desired labels (in this example I will create a public resource with some rules)
  2. (Re)Deploy the project, redeploy Newt and confirm that the resource is created.
  3. Review its details health check is missing.
  4. (Not sure if it is related) Manually enable health check, go back to the resource list and see that status is "Unknown".
  5. Enter the resource details to see the actual status of the health check.
    I tried this with several containers, all of them behave the same way. The resource is created and everything is properly configured except the health checks. Not only that, but seeing the blueprint in the UI it shows the health check configuration (including enabled: true) yet it does not exist.

My example for Gotify (I redacted my domain for privacy reasons, but I can confirm it is properly configured)

compose.yml

services:
  gotify:
    container_name: gotify
    restart: unless-stopped
    image: gotify/server
    ports:
      - 8088:80
    volumes:
      - /home/mola/data/gotify:/app/data
    environment:
      - GOTIFY_DEFAULTUSER_PASS=${DEFAULT_PASS}
    labels:
      # PANGOLIN BLUEPRINT
      ## Public resource
      - pangolin.public-resources.gotify.name=Gotify
      - pangolin.public-resources.gotify.full-domain=gotify.example.com
      - pangolin.public-resources.gotify.protocol=http
      - pangolin.public-resources.gotify.ssl=true
      ## Target
      - pangolin.public-resources.gotify.targets[0].site=pezluna
      - pangolin.public-resources.gotify.targets[0].hostname=192.168.1.11
      - pangolin.public-resources.gotify.targets[0].port=8088
      - pangolin.public-resources.gotify.targets[0].method=http
      ## Healthcheck
      - pangolin.public-resources.gotify.healthcheck.hostname=192.168.1.11
      - pangolin.public-resources.gotify.healthcheck.port=8088
      - pangolin.public-resources.gotify.healthcheck.enabled=true
      - pangolin.public-resources.gotify.healthcheck.path=/health
      - pangolin.public-resources.gotify.healthcheck.scheme=http
      - pangolin.public-resources.gotify.healthcheck.method=GET
      ## Rules
      - pangolin.public-resources.gotify.rules[0].action=allow
      - pangolin.public-resources.gotify.rules[0].value=/version
      - pangolin.public-resources.gotify.rules[0].match=path
      - pangolin.public-resources.gotify.rules[1].action=allow
      - pangolin.public-resources.gotify.rules[1].value=/message
      - pangolin.public-resources.gotify.rules[1].match=path
      - pangolin.public-resources.gotify.rules[2].action=allow
      - pangolin.public-resources.gotify.rules[2].value=/application
      - pangolin.public-resources.gotify.rules[2].match=path
      - pangolin.public-resources.gotify.rules[3].action=allow
      - pangolin.public-resources.gotify.rules[3].value=/client
      - pangolin.public-resources.gotify.rules[3].match=path
      - pangolin.public-resources.gotify.rules[4].action=allow
      - pangolin.public-resources.gotify.rules[4].value=/stream
      - pangolin.public-resources.gotify.rules[4].match=path
      - pangolin.public-resources.gotify.rules[5].action=allow
      - pangolin.public-resources.gotify.rules[5].value=/plugin
      - pangolin.public-resources.gotify.rules[5].match=path
      - pangolin.public-resources.gotify.rules[6].action=allow
      - pangolin.public-resources.gotify.rules[6].value=/health
      - pangolin.public-resources.gotify.rules[6].match=path

Blueprint result

proxy-resources: {}
client-resources: {}
public-resources:
  gotify:
    full-domain: gotify.example.com
    healthcheck:
      enabled: true
      hostname: 192.168.1.11
      method: GET
      path: /health
      port: 8088
      scheme: http
    name: Gotify
    protocol: http
    rules:
      - action: allow
        match: path
        value: /version
      - action: allow
        match: path
        value: /message
      - action: allow
        match: path
        value: /application
      - action: allow
        match: path
        value: /client
      - action: allow
        match: path
        value: /stream
      - action: allow
        match: path
        value: /plugin
      - action: allow
        match: path
        value: /health
    ssl: true
    targets:
      - hostname: 192.168.1.11
        method: http
        port: 8088
        site: pezluna

Regarding the potentially related issue, this is how the resource is seen in the list:
Image

vs how it looks when seeing the details:

Image

Expected Behavior

  • Public resource is created with the same configuration it has right now + health check enabled and configured.
  • Health check status appears in the Resource list too, not only in the details.

Metadata

Metadata

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions