easyhaproxy 6.1.0__tar.gz → 6.1.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/PKG-INFO +1 -1
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/RELEASE.md +2 -1
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/deploy/docker/docker-compose.yml +1 -1
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/deploy/kubernetes/easyhaproxy-clusterip.yml +13 -13
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/deploy/kubernetes/easyhaproxy-daemonset.yml +11 -11
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/deploy/kubernetes/easyhaproxy-nodeport.yml +13 -13
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/getting-started/kubernetes.md +3 -3
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/getting-started/swarm.md +1 -1
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/guides/acme.md +1 -1
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/guides/ssl.md +1 -1
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/reference/plugins/fastcgi.md +62 -15
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/helm/easyhaproxy/Chart.yaml +2 -2
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/helm/easyhaproxy/templates/deployment.yaml +3 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/helm/easyhaproxy/values.yaml +13 -1
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/pyproject.toml +1 -1
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/src/plugins/builtin/fastcgi.py +88 -4
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests/test_plugins.py +126 -1
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/docker/docker-compose-acme.yml +1 -1
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/docker/docker-compose-portainer.yml +1 -1
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/kubernetes/cloudflare.yml +1 -1
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/kubernetes/ip-whitelist.yml +1 -1
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/kubernetes/jwt-validator.yml +1 -1
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/kubernetes/plugins-combined.yml +1 -1
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/kubernetes/service.yml +1 -1
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/kubernetes/service_tls.yml +1 -1
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/test_docker_compose.py +1 -1
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/uv.lock +1 -1
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/.dockerignore +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/.github/FUNDING.yml +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/.github/dependabot.yml +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/.github/workflows/build.yml +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/.gitignore +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/.python-version +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/.run/pytest in tests.run.xml +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/.vscode/launch.json +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/.vscode/settings.json +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/CONTRIBUTING.md +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/LICENSE +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/Makefile +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/README.md +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/build-multiarch.sh +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/deploy/docker/Dockerfile +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/deploy/docker/assets/entrypoint.sh +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/deploy/docker/assets/etc/easyhaproxy/haproxy/conf.d/README.md +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/deploy/docker/assets/etc/easyhaproxy/haproxy/errors-custom/400.http +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/deploy/docker/assets/etc/easyhaproxy/haproxy/errors-custom/403.http +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/deploy/docker/assets/etc/easyhaproxy/haproxy/errors-custom/408.http +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/deploy/docker/assets/etc/easyhaproxy/haproxy/errors-custom/500.http +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/deploy/docker/assets/etc/easyhaproxy/haproxy/errors-custom/502.http +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/deploy/docker/assets/etc/easyhaproxy/haproxy/errors-custom/503.http +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/deploy/docker/assets/etc/easyhaproxy/haproxy/errors-custom/504.http +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/deploy/docker/assets/etc/easyhaproxy/www/dashboard.html +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/deploy/kubernetes/README.md +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/concepts/_category_.json +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/concepts/index.md +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/concepts/limitations.md +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/dashboard.png +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/dashboard_login.png +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/dashboard_thumbnail.png +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/easyhaproxy_digitalocean.png +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/easyhaproxy_docker.png +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/easyhaproxy_dokku.png +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/easyhaproxy_helm.png +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/easyhaproxy_kubernetes.png +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/easyhaproxy_logo.png +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/easyhaproxy_microk8s.png +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/easyhaproxy_static.png +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/easyhaproxy_swarm.png +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/getting-started/_category_.json +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/getting-started/docker.md +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/getting-started/index.md +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/getting-started/native.md +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/getting-started/static.md +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/guides/_category_.json +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/guides/dashboard.md +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/guides/digitalocean.md +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/guides/dokku.md +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/guides/helm.md +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/guides/microk8s.md +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/guides/plugin-development.md +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/guides/plugins.md +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/icons.xcf +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/logo.png +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/logo.xcf +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/reference/_category_.json +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/reference/cli.md +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/reference/container-labels.md +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/reference/environment-variables.md +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/reference/helm.md +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/reference/other.md +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/reference/plugins/_category_.json +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/reference/plugins/cleanup.md +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/reference/plugins/cloudflare.md +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/reference/plugins/deny-pages.md +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/reference/plugins/ip-whitelist.md +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/reference/plugins/jwt-validator.md +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/reference/volumes.md +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/video-docker-ssl.png +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/video-docker.png +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/video-kubernetes-letsencrypt.png +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/video-kubernetes.png +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/video-static.png +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/video-tcp-mysql.png +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/helm/easyhaproxy/.helmignore +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/helm/easyhaproxy/LICENSE +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/helm/easyhaproxy/README.md +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/helm/easyhaproxy/templates/_helpers.tpl +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/helm/easyhaproxy/templates/clusterrole.yaml +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/helm/easyhaproxy/templates/clusterrolebinding.yaml +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/helm/easyhaproxy/templates/ingressclass.yaml +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/helm/easyhaproxy/templates/service.yaml +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/helm/easyhaproxy/templates/serviceaccount.yaml +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/helm/easyhaproxy/values.schema.json +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/scripts/bump-version.sh +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/src/easyhaproxy/__init__.py +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/src/easyhaproxy/main.py +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/src/easymapping/__init__.py +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/src/easymapping/config_generator.py +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/src/easymapping/label_handler.py +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/src/functions/__init__.py +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/src/functions/certbot.py +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/src/functions/consts.py +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/src/functions/container_env.py +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/src/functions/filter.py +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/src/functions/functions.py +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/src/functions/haproxy.py +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/src/functions/loggers.py +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/src/plugins/__init__.py +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/src/plugins/builtin/__init__.py +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/src/plugins/builtin/cleanup.py +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/src/plugins/builtin/cloudflare.py +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/src/plugins/builtin/deny_pages.py +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/src/plugins/builtin/ip_whitelist.py +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/src/plugins/builtin/jwt_validator.py +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/src/plugins/interface.py +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/src/plugins/manager.py +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/src/plugins/types.py +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/src/processor/__init__.py +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/src/processor/docker.py +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/src/processor/interface.py +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/src/processor/kubernetes.py +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/src/processor/static.py +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/src/processor/swarm.py +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/src/templates/bind.j2 +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/src/templates/frontend-mode-http.j2 +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/src/templates/frontend-mode-tcp.j2 +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/src/templates/haproxy.cfg.j2 +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/src/templates/ssl_default.j2 +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/src/templates/ssl_loose.j2 +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/src/templates/ssl_strict.j2 +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests/__init__.py +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests/conftest.py +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests/expected/docker.txt +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests/expected/no-services.txt +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests/expected/services-fcgi.txt +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests/expected/services-letsencrypt.txt +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests/expected/services-multi-containers.txt +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests/expected/services-multiple-hosts.txt +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests/expected/services-redirect-ssl.txt +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests/expected/services-tcp.txt +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests/expected/services.txt +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests/expected/ssl-loose.txt +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests/expected/ssl-strict.txt +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests/expected/static-cors.txt +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests/expected/static.txt +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests/fixtures/00_haproxy.cfg +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests/fixtures/10_haproxy.cfg +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests/fixtures/no-services +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests/fixtures/run_bash.sh +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests/fixtures/services +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests/fixtures/services-changed-label +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests/fixtures/services-clone-to-ssl +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests/fixtures/services-fcgi +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests/fixtures/services-letsencrypt +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests/fixtures/services-multi-containers +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests/fixtures/services-multiple-hosts +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests/fixtures/services-redirect-ssl +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests/fixtures/services-tcp +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests/fixtures/services-with-cloudflare +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests/fixtures/services-with-deny-pages +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests/fixtures/services-with-ip-whitelist +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests/fixtures/services-with-jwt-validator +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests/fixtures/services-with-multiple-plugins +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests/fixtures/static.yml +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests/fixtures/static_cors.yml +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests/fixtures/static_multi_domain.yml +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests/test_certbot.py +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests/test_certbot_haproxy_config.py +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests/test_containerenv.py +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests/test_daemonize.py +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests/test_docker.py +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests/test_functions.py +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests/test_kubernetes_processor.py +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests/test_labels.py +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests/test_parser.py +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests/test_static.py +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/conftest.py +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/docker/AGENTS.md +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/docker/README.md +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/docker/docker-compose-acme-e2e.yml +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/docker/docker-compose-changed-label.yml +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/docker/docker-compose-cloudflare.yml +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/docker/docker-compose-ip-whitelist.yml +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/docker/docker-compose-jwt-validator.yml +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/docker/docker-compose-multi-containers.yml +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/docker/docker-compose-php-fpm.yml +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/docker/docker-compose-plugins-combined.yml +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/docker/docker-compose-portainer-app-example.yml +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/docker/docker-compose-proxy-headers.yml +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/docker/docker-compose.yml +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/docker/pebble-config.json +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/docker/php-app/README.md +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/docker/php-app/index.php +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/docker/php-app/info.php +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/docker/php-app/test-path-info.php +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/fixtures/header-echo/Dockerfile +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/fixtures/header-echo/README.md +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/fixtures/header-echo/server.py +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/generate-keys.sh +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/kubernetes/.gitignore +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/kubernetes/README.md +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/kubernetes/jwt-validator-secret-example.yml +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/kubernetes/setup-cluster.sh +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/kubernetes/teardown-cluster.sh +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/static/README.md +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/static/conf/config-basic.yml +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/static/conf/config-certbot.yml +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/static/conf/config-deny-pages.yml +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/static/conf/config-jwt-validator.yml +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/static/docker-compose.yml +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/swarm/README.md +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/swarm/cloudflare.yml +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/swarm/easyhaproxy.yml +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/swarm/ip-whitelist.yml +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/swarm/jwt-validator.yml +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/swarm/plugins-combined.yml +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/swarm/portainer.yml +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/swarm/services.yml +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/test_kubernetes.py +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/test_proxy_headers.py +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/test_static.py +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/test_swarm.py +0 -0
- {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/utils.py +0 -0
|
@@ -54,7 +54,7 @@ EasyHAProxy follows [Semantic Versioning](https://semver.org/):
|
|
|
54
54
|
- **MINOR**: New features, plugin additions, backward-compatible changes
|
|
55
55
|
- **PATCH**: Bug fixes, documentation updates, minor improvements
|
|
56
56
|
|
|
57
|
-
**Current Version:** `6.1.
|
|
57
|
+
**Current Version:** `6.1.1` (as of Chart.yaml)
|
|
58
58
|
|
|
59
59
|
## Automated Release (Recommended)
|
|
60
60
|
|
|
@@ -329,6 +329,7 @@ helm show chart byjg/easyhaproxy
|
|
|
329
329
|
|
|
330
330
|
| Version | Release Date | Type | Highlights |
|
|
331
331
|
|---------|--------------|-------|---------------------------------------------------------------------------------------------------------------------------------------|
|
|
332
|
+
| 6.1.1 | 2026-06-25 | Patch | Add pass_headers support to FastCGI plugin, fix flaky ACME e2e test timeout |
|
|
332
333
|
| 6.1.0 | 2026-06-24 | Minor | FastCGI protocol support, certbot sidecar plugin, dependency updates |
|
|
333
334
|
| 6.0.1 | 2026-02-23 | Patch | HAProxy dashboard, real-time monitoring dashboard with live traffic charts, ACME e2e test fixes |
|
|
334
335
|
| 6.0.0 | 2026-XX-XX | Major | Python module refactoring (one-class-per-file), IngressClassName support (spec.ingressClassName + deprecated annotation fallback), modernized build system (uv/pyproject.toml), improved version management and release tooling, GitHub Actions workflow_dispatch push control |
|
|
@@ -6,10 +6,10 @@ metadata:
|
|
|
6
6
|
name: ingress-easyhaproxy
|
|
7
7
|
namespace: easyhaproxy
|
|
8
8
|
labels:
|
|
9
|
-
helm.sh/chart: easyhaproxy-2.0.
|
|
9
|
+
helm.sh/chart: easyhaproxy-2.0.4
|
|
10
10
|
app.kubernetes.io/name: easyhaproxy
|
|
11
11
|
app.kubernetes.io/instance: ingress
|
|
12
|
-
app.kubernetes.io/version: "6.1.
|
|
12
|
+
app.kubernetes.io/version: "6.1.1"
|
|
13
13
|
app.kubernetes.io/managed-by: Helm
|
|
14
14
|
---
|
|
15
15
|
# Source: easyhaproxy/templates/clusterrole.yaml
|
|
@@ -19,10 +19,10 @@ metadata:
|
|
|
19
19
|
name: ingress-easyhaproxy
|
|
20
20
|
namespace: easyhaproxy
|
|
21
21
|
labels:
|
|
22
|
-
helm.sh/chart: easyhaproxy-2.0.
|
|
22
|
+
helm.sh/chart: easyhaproxy-2.0.4
|
|
23
23
|
app.kubernetes.io/name: easyhaproxy
|
|
24
24
|
app.kubernetes.io/instance: ingress
|
|
25
|
-
app.kubernetes.io/version: "6.1.
|
|
25
|
+
app.kubernetes.io/version: "6.1.1"
|
|
26
26
|
app.kubernetes.io/managed-by: Helm
|
|
27
27
|
rules:
|
|
28
28
|
- apiGroups:
|
|
@@ -83,10 +83,10 @@ metadata:
|
|
|
83
83
|
name: ingress-easyhaproxy
|
|
84
84
|
namespace: easyhaproxy
|
|
85
85
|
labels:
|
|
86
|
-
helm.sh/chart: easyhaproxy-2.0.
|
|
86
|
+
helm.sh/chart: easyhaproxy-2.0.4
|
|
87
87
|
app.kubernetes.io/name: easyhaproxy
|
|
88
88
|
app.kubernetes.io/instance: ingress
|
|
89
|
-
app.kubernetes.io/version: "6.1.
|
|
89
|
+
app.kubernetes.io/version: "6.1.1"
|
|
90
90
|
app.kubernetes.io/managed-by: Helm
|
|
91
91
|
roleRef:
|
|
92
92
|
apiGroup: rbac.authorization.k8s.io
|
|
@@ -105,10 +105,10 @@ metadata:
|
|
|
105
105
|
name: ingress-easyhaproxy
|
|
106
106
|
namespace: easyhaproxy
|
|
107
107
|
labels:
|
|
108
|
-
helm.sh/chart: easyhaproxy-2.0.
|
|
108
|
+
helm.sh/chart: easyhaproxy-2.0.4
|
|
109
109
|
app.kubernetes.io/name: easyhaproxy
|
|
110
110
|
app.kubernetes.io/instance: ingress
|
|
111
|
-
app.kubernetes.io/version: "6.1.
|
|
111
|
+
app.kubernetes.io/version: "6.1.1"
|
|
112
112
|
app.kubernetes.io/managed-by: Helm
|
|
113
113
|
annotations:
|
|
114
114
|
{}
|
|
@@ -140,10 +140,10 @@ metadata:
|
|
|
140
140
|
name: ingress-easyhaproxy
|
|
141
141
|
namespace: easyhaproxy
|
|
142
142
|
labels:
|
|
143
|
-
helm.sh/chart: easyhaproxy-2.0.
|
|
143
|
+
helm.sh/chart: easyhaproxy-2.0.4
|
|
144
144
|
app.kubernetes.io/name: easyhaproxy
|
|
145
145
|
app.kubernetes.io/instance: ingress
|
|
146
|
-
app.kubernetes.io/version: "6.1.
|
|
146
|
+
app.kubernetes.io/version: "6.1.1"
|
|
147
147
|
app.kubernetes.io/managed-by: Helm
|
|
148
148
|
spec:
|
|
149
149
|
replicas: 1
|
|
@@ -164,7 +164,7 @@ spec:
|
|
|
164
164
|
- name: easyhaproxy
|
|
165
165
|
securityContext:
|
|
166
166
|
{}
|
|
167
|
-
image: "byjg/easy-haproxy:6.1.
|
|
167
|
+
image: "byjg/easy-haproxy:6.1.1"
|
|
168
168
|
imagePullPolicy: Always
|
|
169
169
|
ports:
|
|
170
170
|
- name: http
|
|
@@ -217,10 +217,10 @@ kind: IngressClass
|
|
|
217
217
|
metadata:
|
|
218
218
|
name: easyhaproxy
|
|
219
219
|
labels:
|
|
220
|
-
helm.sh/chart: easyhaproxy-2.0.
|
|
220
|
+
helm.sh/chart: easyhaproxy-2.0.4
|
|
221
221
|
app.kubernetes.io/name: easyhaproxy
|
|
222
222
|
app.kubernetes.io/instance: ingress
|
|
223
|
-
app.kubernetes.io/version: "6.1.
|
|
223
|
+
app.kubernetes.io/version: "6.1.1"
|
|
224
224
|
app.kubernetes.io/managed-by: Helm
|
|
225
225
|
spec:
|
|
226
226
|
controller: byjg.com/easyhaproxy
|
|
@@ -6,10 +6,10 @@ metadata:
|
|
|
6
6
|
name: ingress-easyhaproxy
|
|
7
7
|
namespace: easyhaproxy
|
|
8
8
|
labels:
|
|
9
|
-
helm.sh/chart: easyhaproxy-2.0.
|
|
9
|
+
helm.sh/chart: easyhaproxy-2.0.4
|
|
10
10
|
app.kubernetes.io/name: easyhaproxy
|
|
11
11
|
app.kubernetes.io/instance: ingress
|
|
12
|
-
app.kubernetes.io/version: "6.1.
|
|
12
|
+
app.kubernetes.io/version: "6.1.1"
|
|
13
13
|
app.kubernetes.io/managed-by: Helm
|
|
14
14
|
---
|
|
15
15
|
# Source: easyhaproxy/templates/clusterrole.yaml
|
|
@@ -19,10 +19,10 @@ metadata:
|
|
|
19
19
|
name: ingress-easyhaproxy
|
|
20
20
|
namespace: easyhaproxy
|
|
21
21
|
labels:
|
|
22
|
-
helm.sh/chart: easyhaproxy-2.0.
|
|
22
|
+
helm.sh/chart: easyhaproxy-2.0.4
|
|
23
23
|
app.kubernetes.io/name: easyhaproxy
|
|
24
24
|
app.kubernetes.io/instance: ingress
|
|
25
|
-
app.kubernetes.io/version: "6.1.
|
|
25
|
+
app.kubernetes.io/version: "6.1.1"
|
|
26
26
|
app.kubernetes.io/managed-by: Helm
|
|
27
27
|
rules:
|
|
28
28
|
- apiGroups:
|
|
@@ -83,10 +83,10 @@ metadata:
|
|
|
83
83
|
name: ingress-easyhaproxy
|
|
84
84
|
namespace: easyhaproxy
|
|
85
85
|
labels:
|
|
86
|
-
helm.sh/chart: easyhaproxy-2.0.
|
|
86
|
+
helm.sh/chart: easyhaproxy-2.0.4
|
|
87
87
|
app.kubernetes.io/name: easyhaproxy
|
|
88
88
|
app.kubernetes.io/instance: ingress
|
|
89
|
-
app.kubernetes.io/version: "6.1.
|
|
89
|
+
app.kubernetes.io/version: "6.1.1"
|
|
90
90
|
app.kubernetes.io/managed-by: Helm
|
|
91
91
|
roleRef:
|
|
92
92
|
apiGroup: rbac.authorization.k8s.io
|
|
@@ -104,10 +104,10 @@ metadata:
|
|
|
104
104
|
name: ingress-easyhaproxy
|
|
105
105
|
namespace: easyhaproxy
|
|
106
106
|
labels:
|
|
107
|
-
helm.sh/chart: easyhaproxy-2.0.
|
|
107
|
+
helm.sh/chart: easyhaproxy-2.0.4
|
|
108
108
|
app.kubernetes.io/name: easyhaproxy
|
|
109
109
|
app.kubernetes.io/instance: ingress
|
|
110
|
-
app.kubernetes.io/version: "6.1.
|
|
110
|
+
app.kubernetes.io/version: "6.1.1"
|
|
111
111
|
app.kubernetes.io/managed-by: Helm
|
|
112
112
|
spec:
|
|
113
113
|
selector:
|
|
@@ -136,7 +136,7 @@ spec:
|
|
|
136
136
|
- name: easyhaproxy
|
|
137
137
|
securityContext:
|
|
138
138
|
{}
|
|
139
|
-
image: "byjg/easy-haproxy:6.1.
|
|
139
|
+
image: "byjg/easy-haproxy:6.1.1"
|
|
140
140
|
imagePullPolicy: Always
|
|
141
141
|
ports:
|
|
142
142
|
- name: http
|
|
@@ -189,10 +189,10 @@ kind: IngressClass
|
|
|
189
189
|
metadata:
|
|
190
190
|
name: easyhaproxy
|
|
191
191
|
labels:
|
|
192
|
-
helm.sh/chart: easyhaproxy-2.0.
|
|
192
|
+
helm.sh/chart: easyhaproxy-2.0.4
|
|
193
193
|
app.kubernetes.io/name: easyhaproxy
|
|
194
194
|
app.kubernetes.io/instance: ingress
|
|
195
|
-
app.kubernetes.io/version: "6.1.
|
|
195
|
+
app.kubernetes.io/version: "6.1.1"
|
|
196
196
|
app.kubernetes.io/managed-by: Helm
|
|
197
197
|
spec:
|
|
198
198
|
controller: byjg.com/easyhaproxy
|
|
@@ -6,10 +6,10 @@ metadata:
|
|
|
6
6
|
name: ingress-easyhaproxy
|
|
7
7
|
namespace: easyhaproxy
|
|
8
8
|
labels:
|
|
9
|
-
helm.sh/chart: easyhaproxy-2.0.
|
|
9
|
+
helm.sh/chart: easyhaproxy-2.0.4
|
|
10
10
|
app.kubernetes.io/name: easyhaproxy
|
|
11
11
|
app.kubernetes.io/instance: ingress
|
|
12
|
-
app.kubernetes.io/version: "6.1.
|
|
12
|
+
app.kubernetes.io/version: "6.1.1"
|
|
13
13
|
app.kubernetes.io/managed-by: Helm
|
|
14
14
|
---
|
|
15
15
|
# Source: easyhaproxy/templates/clusterrole.yaml
|
|
@@ -19,10 +19,10 @@ metadata:
|
|
|
19
19
|
name: ingress-easyhaproxy
|
|
20
20
|
namespace: easyhaproxy
|
|
21
21
|
labels:
|
|
22
|
-
helm.sh/chart: easyhaproxy-2.0.
|
|
22
|
+
helm.sh/chart: easyhaproxy-2.0.4
|
|
23
23
|
app.kubernetes.io/name: easyhaproxy
|
|
24
24
|
app.kubernetes.io/instance: ingress
|
|
25
|
-
app.kubernetes.io/version: "6.1.
|
|
25
|
+
app.kubernetes.io/version: "6.1.1"
|
|
26
26
|
app.kubernetes.io/managed-by: Helm
|
|
27
27
|
rules:
|
|
28
28
|
- apiGroups:
|
|
@@ -83,10 +83,10 @@ metadata:
|
|
|
83
83
|
name: ingress-easyhaproxy
|
|
84
84
|
namespace: easyhaproxy
|
|
85
85
|
labels:
|
|
86
|
-
helm.sh/chart: easyhaproxy-2.0.
|
|
86
|
+
helm.sh/chart: easyhaproxy-2.0.4
|
|
87
87
|
app.kubernetes.io/name: easyhaproxy
|
|
88
88
|
app.kubernetes.io/instance: ingress
|
|
89
|
-
app.kubernetes.io/version: "6.1.
|
|
89
|
+
app.kubernetes.io/version: "6.1.1"
|
|
90
90
|
app.kubernetes.io/managed-by: Helm
|
|
91
91
|
roleRef:
|
|
92
92
|
apiGroup: rbac.authorization.k8s.io
|
|
@@ -105,10 +105,10 @@ metadata:
|
|
|
105
105
|
name: ingress-easyhaproxy
|
|
106
106
|
namespace: easyhaproxy
|
|
107
107
|
labels:
|
|
108
|
-
helm.sh/chart: easyhaproxy-2.0.
|
|
108
|
+
helm.sh/chart: easyhaproxy-2.0.4
|
|
109
109
|
app.kubernetes.io/name: easyhaproxy
|
|
110
110
|
app.kubernetes.io/instance: ingress
|
|
111
|
-
app.kubernetes.io/version: "6.1.
|
|
111
|
+
app.kubernetes.io/version: "6.1.1"
|
|
112
112
|
app.kubernetes.io/managed-by: Helm
|
|
113
113
|
annotations:
|
|
114
114
|
{}
|
|
@@ -140,10 +140,10 @@ metadata:
|
|
|
140
140
|
name: ingress-easyhaproxy
|
|
141
141
|
namespace: easyhaproxy
|
|
142
142
|
labels:
|
|
143
|
-
helm.sh/chart: easyhaproxy-2.0.
|
|
143
|
+
helm.sh/chart: easyhaproxy-2.0.4
|
|
144
144
|
app.kubernetes.io/name: easyhaproxy
|
|
145
145
|
app.kubernetes.io/instance: ingress
|
|
146
|
-
app.kubernetes.io/version: "6.1.
|
|
146
|
+
app.kubernetes.io/version: "6.1.1"
|
|
147
147
|
app.kubernetes.io/managed-by: Helm
|
|
148
148
|
spec:
|
|
149
149
|
replicas: 1
|
|
@@ -164,7 +164,7 @@ spec:
|
|
|
164
164
|
- name: easyhaproxy
|
|
165
165
|
securityContext:
|
|
166
166
|
{}
|
|
167
|
-
image: "byjg/easy-haproxy:6.1.
|
|
167
|
+
image: "byjg/easy-haproxy:6.1.1"
|
|
168
168
|
imagePullPolicy: Always
|
|
169
169
|
ports:
|
|
170
170
|
- name: http
|
|
@@ -217,10 +217,10 @@ kind: IngressClass
|
|
|
217
217
|
metadata:
|
|
218
218
|
name: easyhaproxy
|
|
219
219
|
labels:
|
|
220
|
-
helm.sh/chart: easyhaproxy-2.0.
|
|
220
|
+
helm.sh/chart: easyhaproxy-2.0.4
|
|
221
221
|
app.kubernetes.io/name: easyhaproxy
|
|
222
222
|
app.kubernetes.io/instance: ingress
|
|
223
|
-
app.kubernetes.io/version: "6.1.
|
|
223
|
+
app.kubernetes.io/version: "6.1.1"
|
|
224
224
|
app.kubernetes.io/managed-by: Helm
|
|
225
225
|
spec:
|
|
226
226
|
controller: byjg.com/easyhaproxy
|
|
@@ -41,7 +41,7 @@ Exposes HAProxy on NodePort `31080` (HTTP), `31443` (HTTPS), and `31936` (stats)
|
|
|
41
41
|
|
|
42
42
|
```bash
|
|
43
43
|
kubectl apply -f \
|
|
44
|
-
https://raw.githubusercontent.com/byjg/docker-easy-haproxy/6.1.
|
|
44
|
+
https://raw.githubusercontent.com/byjg/docker-easy-haproxy/6.1.1/deploy/kubernetes/easyhaproxy-nodeport.yml
|
|
45
45
|
```
|
|
46
46
|
|
|
47
47
|
### ClusterIP (behind a LoadBalancer)
|
|
@@ -50,7 +50,7 @@ Cluster-internal only. Pair with an external cloud LoadBalancer or `kubectl port
|
|
|
50
50
|
|
|
51
51
|
```bash
|
|
52
52
|
kubectl apply -f \
|
|
53
|
-
https://raw.githubusercontent.com/byjg/docker-easy-haproxy/6.1.
|
|
53
|
+
https://raw.githubusercontent.com/byjg/docker-easy-haproxy/6.1.1/deploy/kubernetes/easyhaproxy-clusterip.yml
|
|
54
54
|
```
|
|
55
55
|
|
|
56
56
|
### DaemonSet (special cases — requires node label)
|
|
@@ -64,7 +64,7 @@ The node label must be reapplied after any node replacement. Failing to do so wi
|
|
|
64
64
|
kubectl label nodes node-01 "easyhaproxy/node=master"
|
|
65
65
|
|
|
66
66
|
kubectl apply -f \
|
|
67
|
-
https://raw.githubusercontent.com/byjg/docker-easy-haproxy/6.1.
|
|
67
|
+
https://raw.githubusercontent.com/byjg/docker-easy-haproxy/6.1.1/deploy/kubernetes/easyhaproxy-daemonset.yml
|
|
68
68
|
```
|
|
69
69
|
|
|
70
70
|
If you need to configure environment variables (log levels, stats password, etc.), see the [environment variable reference](../reference/environment-variables.md).
|
|
@@ -157,7 +157,7 @@ Here's a complete `docker-compose.yml` showing proper ACME configuration:
|
|
|
157
157
|
```yaml
|
|
158
158
|
services:
|
|
159
159
|
easyhaproxy:
|
|
160
|
-
image: byjg/easy-haproxy:6.1.
|
|
160
|
+
image: byjg/easy-haproxy:6.1.1
|
|
161
161
|
volumes:
|
|
162
162
|
- /var/run/docker.sock:/var/run/docker.sock
|
|
163
163
|
# REQUIRED: Persist Certbot certificates (ACME)
|
|
@@ -83,7 +83,7 @@ docker cp single.pem easyhaproxy:/etc/easyhaproxy/certs/haproxy/example.com.pem
|
|
|
83
83
|
```yaml
|
|
84
84
|
services:
|
|
85
85
|
easyhaproxy:
|
|
86
|
-
image: byjg/easy-haproxy:6.1.
|
|
86
|
+
image: byjg/easy-haproxy:6.1.1
|
|
87
87
|
volumes:
|
|
88
88
|
- /var/run/docker.sock:/var/run/docker.sock
|
|
89
89
|
- certs_haproxy:/etc/easyhaproxy/certs/haproxy
|
|
@@ -18,14 +18,57 @@ Automatically generates HAProxy `fcgi-app` configuration that defines required C
|
|
|
18
18
|
|
|
19
19
|
## Configuration Options
|
|
20
20
|
|
|
21
|
-
| Option | Description
|
|
22
|
-
|
|
23
|
-
| `enabled` | Enable/disable plugin
|
|
24
|
-
| `document_root` | Document root path
|
|
25
|
-
| `script_filename` | Custom pattern for SCRIPT_FILENAME
|
|
26
|
-
| `index_file` | Default index file
|
|
27
|
-
| `path_info` |
|
|
28
|
-
| `
|
|
21
|
+
| Option | Description | Default |
|
|
22
|
+
|-------------------|--------------------------------------------|--------------------------------------|
|
|
23
|
+
| `enabled` | Enable/disable plugin | `true` |
|
|
24
|
+
| `document_root` | Document root path | `/var/www/html` |
|
|
25
|
+
| `script_filename` | Custom pattern for SCRIPT_FILENAME | `%[path]` (uses HAProxy's default) |
|
|
26
|
+
| `index_file` | Default index file | `index.php` |
|
|
27
|
+
| `path_info` | PATH_INFO preset or custom regex | `php` |
|
|
28
|
+
| `log_stderr` | Forward FastCGI stderr to HAProxy logs | `false` |
|
|
29
|
+
| `keep_conn` | Reuse FastCGI connections between requests | `true` |
|
|
30
|
+
| `custom_params` | Dictionary of custom FastCGI parameters | (optional) |
|
|
31
|
+
| `pass_headers` | HTTP headers to forward to the FastCGI app | (optional) |
|
|
32
|
+
|
|
33
|
+
### `path_info` — PATH_INFO Presets
|
|
34
|
+
|
|
35
|
+
The `path_info` option accepts a preset name or a custom regex. Built-in presets:
|
|
36
|
+
|
|
37
|
+
| Preset | Language | Regex |
|
|
38
|
+
|----------|----------------|---------------------------------|
|
|
39
|
+
| `php` | PHP (default) | `^(/.+\.php)(/.*)?$` |
|
|
40
|
+
| `python` | Python FastCGI | `^(/.+\.py)(/.*)?$` |
|
|
41
|
+
| `perl` | Perl/CGI | `^(/.+\.(pl\|cgi))(/.*)?$` |
|
|
42
|
+
| `ruby` | Ruby FastCGI | `^(/.+\.rb)(/.*)?$` |
|
|
43
|
+
| `any` | Generic | `^(.+?)(/.*)?$` |
|
|
44
|
+
|
|
45
|
+
Pass `false` to disable PATH_INFO entirely, or any other string to use it as a custom regex directly.
|
|
46
|
+
|
|
47
|
+
Setting `path_info: true` maps to `php` for backward compatibility.
|
|
48
|
+
|
|
49
|
+
### `pass_headers` — Forwarding HTTP Headers
|
|
50
|
+
|
|
51
|
+
:::important
|
|
52
|
+
HAProxy strips `Authorization`, `Proxy-Authorization`, and all hop-by-hop headers before forwarding requests to the FastCGI backend. Applications that rely on these headers (e.g. APIs using Bearer tokens, Basic auth, or JWT) will fail silently without this option.
|
|
53
|
+
:::
|
|
54
|
+
|
|
55
|
+
`pass_headers` accepts a comma-separated string or a list of strings/dicts:
|
|
56
|
+
|
|
57
|
+
```yaml
|
|
58
|
+
# Simple — single header
|
|
59
|
+
pass_headers: "Authorization"
|
|
60
|
+
|
|
61
|
+
# Multiple — comma-separated
|
|
62
|
+
pass_headers: "Authorization, Proxy-Authorization"
|
|
63
|
+
|
|
64
|
+
# With ACL condition — list of dicts
|
|
65
|
+
pass_headers:
|
|
66
|
+
- Authorization
|
|
67
|
+
- name: X-Custom-Header
|
|
68
|
+
condition: "if { ssl_fc }"
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
> **Note:** `Content-Type` and `Content-Length` cannot be passed here — they are automatically converted to the CGI parameters `CONTENT_TYPE` and `CONTENT_LENGTH`.
|
|
29
72
|
|
|
30
73
|
## Configuration Examples
|
|
31
74
|
|
|
@@ -78,6 +121,7 @@ metadata:
|
|
|
78
121
|
easyhaproxy.plugin.fastcgi.document_root: "/var/www/html"
|
|
79
122
|
easyhaproxy.plugin.fastcgi.index_file: "index.php"
|
|
80
123
|
easyhaproxy.plugin.fastcgi.script_filename: "/var/www/html/index.php"
|
|
124
|
+
easyhaproxy.plugin.fastcgi.pass_headers: "Authorization, Proxy-Authorization"
|
|
81
125
|
spec:
|
|
82
126
|
ingressClassName: easyhaproxy
|
|
83
127
|
rules:
|
|
@@ -113,13 +157,13 @@ easymapping:
|
|
|
113
157
|
|
|
114
158
|
### Environment Variables
|
|
115
159
|
|
|
116
|
-
| Environment Variable | Config Key | Type | Default
|
|
117
|
-
|
|
118
|
-
| `EASYHAPROXY_PLUGIN_FASTCGI_ENABLED` | `enabled` | boolean | `true`
|
|
119
|
-
| `EASYHAPROXY_PLUGIN_FASTCGI_DOCUMENT_ROOT` | `document_root` | string | `/var/www/html`
|
|
120
|
-
| `EASYHAPROXY_PLUGIN_FASTCGI_SCRIPT_FILENAME` | `script_filename` | string | `%[path]`
|
|
121
|
-
| `EASYHAPROXY_PLUGIN_FASTCGI_INDEX_FILE` | `index_file` | string | `index.php`
|
|
122
|
-
| `EASYHAPROXY_PLUGIN_FASTCGI_PATH_INFO` | `path_info` | boolean | `true`
|
|
160
|
+
| Environment Variable | Config Key | Type | Default | Description |
|
|
161
|
+
|----------------------------------------------|-------------------|----------|-------------------------|---------------------------------------|
|
|
162
|
+
| `EASYHAPROXY_PLUGIN_FASTCGI_ENABLED` | `enabled` | boolean | `true` | Enable/disable plugin for all domains |
|
|
163
|
+
| `EASYHAPROXY_PLUGIN_FASTCGI_DOCUMENT_ROOT` | `document_root` | string | `/var/www/html` | Document root path |
|
|
164
|
+
| `EASYHAPROXY_PLUGIN_FASTCGI_SCRIPT_FILENAME` | `script_filename` | string | `%[path]` | Custom pattern for SCRIPT_FILENAME |
|
|
165
|
+
| `EASYHAPROXY_PLUGIN_FASTCGI_INDEX_FILE` | `index_file` | string | `index.php` | Default index file |
|
|
166
|
+
| `EASYHAPROXY_PLUGIN_FASTCGI_PATH_INFO` | `path_info` | boolean | `true` | Enable PATH_INFO support |
|
|
123
167
|
|
|
124
168
|
## Generated HAProxy Configuration
|
|
125
169
|
|
|
@@ -128,7 +172,10 @@ easymapping:
|
|
|
128
172
|
fcgi-app fcgi_phpapp_local
|
|
129
173
|
docroot /var/www/html
|
|
130
174
|
index index.php
|
|
175
|
+
option keep-conn
|
|
131
176
|
path-info ^(/.+\.php)(/.*)?$
|
|
177
|
+
pass-header Authorization
|
|
178
|
+
pass-header Proxy-Authorization
|
|
132
179
|
|
|
133
180
|
# Backend configuration (added to the backend section)
|
|
134
181
|
backend srv_phpapp_local_80
|
|
@@ -15,12 +15,12 @@ type: application
|
|
|
15
15
|
# This is the chart version. This version number should be incremented each time you make changes
|
|
16
16
|
# to the chart and its templates, including the app version.
|
|
17
17
|
# Versions are expected to follow Semantic Versioning (https://semver.org/)
|
|
18
|
-
version: 2.0.
|
|
18
|
+
version: 2.0.4
|
|
19
19
|
|
|
20
20
|
# This is the version number of the application being deployed. This version number should be
|
|
21
21
|
# incremented each time you make changes to the application. Versions are not expected to
|
|
22
22
|
# follow Semantic Versioning. They should reflect the version the application is using.
|
|
23
23
|
# It is recommended to use it with quotes.
|
|
24
|
-
appVersion: "6.1.
|
|
24
|
+
appVersion: "6.1.1"
|
|
25
25
|
|
|
26
26
|
icon: https://opensource.byjg.com/img/easy_haproxy_logo.png
|
|
@@ -96,5 +96,17 @@ easyhaproxy:
|
|
|
96
96
|
# When service.create is true (Deployment with ClusterIP/NodePort), this is ignored
|
|
97
97
|
masterNode:
|
|
98
98
|
label: easyhaproxy/node
|
|
99
|
-
values:
|
|
99
|
+
values:
|
|
100
100
|
- master
|
|
101
|
+
|
|
102
|
+
# Extra environment variables to inject into the container
|
|
103
|
+
# Supports all Kubernetes env var forms: value, valueFrom (secretKeyRef, configMapKeyRef, fieldRef)
|
|
104
|
+
# extraEnv:
|
|
105
|
+
# - name: MY_VAR
|
|
106
|
+
# value: "my-value"
|
|
107
|
+
# - name: SECRET_VAR
|
|
108
|
+
# valueFrom:
|
|
109
|
+
# secretKeyRef:
|
|
110
|
+
# name: my-secret
|
|
111
|
+
# key: my-key
|
|
112
|
+
extraEnv: []
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "easyhaproxy"
|
|
7
|
-
version = "6.1.
|
|
7
|
+
version = "6.1.1"
|
|
8
8
|
description = "HAProxy label based routing with service discovery for Docker, Swarm, and Kubernetes"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = {file = "LICENSE"}
|
|
@@ -15,6 +15,8 @@ Configuration:
|
|
|
15
15
|
- index_file: Default index file (default: index.php)
|
|
16
16
|
- path_info: Enable PATH_INFO support (default: true)
|
|
17
17
|
- custom_params: Dictionary of custom FastCGI parameters (optional)
|
|
18
|
+
- pass_headers: Headers to forward to the FastCGI app (optional).
|
|
19
|
+
Comma-separated string or list of strings/dicts with optional condition.
|
|
18
20
|
|
|
19
21
|
Example YAML config:
|
|
20
22
|
plugins:
|
|
@@ -34,6 +36,7 @@ Example Kubernetes Annotation:
|
|
|
34
36
|
easyhaproxy.plugins: "fastcgi"
|
|
35
37
|
easyhaproxy.plugin.fastcgi.document_root: /var/www/myapp
|
|
36
38
|
easyhaproxy.plugin.fastcgi.index_file: index.php
|
|
39
|
+
easyhaproxy.plugin.fastcgi.pass_headers: "Authorization, Proxy-Authorization"
|
|
37
40
|
"""
|
|
38
41
|
|
|
39
42
|
import os
|
|
@@ -48,13 +51,25 @@ from plugins import PluginContext, PluginInterface, PluginResult, PluginType
|
|
|
48
51
|
class FastcgiPlugin(PluginInterface):
|
|
49
52
|
"""Plugin to configure FastCGI parameters for PHP-FPM"""
|
|
50
53
|
|
|
54
|
+
# Built-in path-info regex presets
|
|
55
|
+
PATH_INFO_PRESETS = {
|
|
56
|
+
"php": r"^(/.+\.php)(/.*)?$",
|
|
57
|
+
"python": r"^(/.+\.py)(/.*)?$",
|
|
58
|
+
"perl": r"^(/.+\.(?:pl|cgi))(/.*)?$",
|
|
59
|
+
"ruby": r"^(/.+\.rb)(/.*)?$",
|
|
60
|
+
"any": r"^(.+?)(/.*)?$",
|
|
61
|
+
}
|
|
62
|
+
|
|
51
63
|
def __init__(self):
|
|
52
64
|
self.enabled = True
|
|
53
65
|
self.document_root = "/var/www/html"
|
|
54
66
|
self.script_filename = "%[path]"
|
|
55
67
|
self.index_file = "index.php"
|
|
56
|
-
self.path_info =
|
|
68
|
+
self.path_info = "php" # False | preset name | custom regex string
|
|
69
|
+
self.log_stderr = False
|
|
70
|
+
self.keep_conn = True
|
|
57
71
|
self.custom_params = {}
|
|
72
|
+
self.pass_headers = [] # list of {"name": str, "condition": str|None}
|
|
58
73
|
|
|
59
74
|
@property
|
|
60
75
|
def name(self) -> str:
|
|
@@ -76,6 +91,29 @@ class FastcgiPlugin(PluginInterface):
|
|
|
76
91
|
- index_file: Default index file
|
|
77
92
|
- path_info: Enable PATH_INFO support
|
|
78
93
|
- custom_params: Dictionary of custom FastCGI parameters
|
|
94
|
+
- path_info: Enable PATH_INFO splitting. Accepts:
|
|
95
|
+
- False / "false" / "no" / "0": disabled
|
|
96
|
+
- "php" (default): ^(/.+[.]php)(/.*)?$
|
|
97
|
+
- "python": ^(/.+[.]py)(/.*)?$
|
|
98
|
+
- "perl": ^(/.+[.](pl|cgi))(/.*)?$
|
|
99
|
+
- "ruby": ^(/.+[.]rb)(/.*)?$
|
|
100
|
+
- "any": ^(.+?)(/.*)?$
|
|
101
|
+
- any other string: used as-is as the regex
|
|
102
|
+
- log_stderr: Forward FastCGI app's stderr to HAProxy logs (default: false)
|
|
103
|
+
- keep_conn: Reuse FastCGI connections between requests (default: true)
|
|
104
|
+
- pass_headers: Headers to forward to the FastCGI application.
|
|
105
|
+
HAProxy omits Authorization, Proxy-Authorization, and hop-by-hop headers
|
|
106
|
+
by default — this directive is required to pass them through.
|
|
107
|
+
Note: Content-Type and Content-Length are never passable here; they are
|
|
108
|
+
already converted to CGI parameters (CONTENT_TYPE, CONTENT_LENGTH).
|
|
109
|
+
|
|
110
|
+
Accepts a comma-separated string or a list of strings/dicts:
|
|
111
|
+
Simple: "Authorization"
|
|
112
|
+
Multiple: "Authorization, Proxy-Authorization"
|
|
113
|
+
With ACL: [{"name": "Authorization", "condition": "if { ssl_fc }"}]
|
|
114
|
+
|
|
115
|
+
HAProxy syntax: pass-header <name> [ { if | unless } <condition> ]
|
|
116
|
+
Ref: https://docs.haproxy.org/dev/configuration.html
|
|
79
117
|
"""
|
|
80
118
|
if "enabled" in config:
|
|
81
119
|
self.enabled = str(config["enabled"]).lower() in ["true", "1", "yes"]
|
|
@@ -90,11 +128,40 @@ class FastcgiPlugin(PluginInterface):
|
|
|
90
128
|
self.index_file = config["index_file"]
|
|
91
129
|
|
|
92
130
|
if "path_info" in config:
|
|
93
|
-
|
|
131
|
+
val = str(config["path_info"]).lower()
|
|
132
|
+
if val in ["false", "0", "no"]:
|
|
133
|
+
self.path_info = False
|
|
134
|
+
elif val in ["true", "1", "yes"]:
|
|
135
|
+
self.path_info = "php" # backward-compatible: true → php preset
|
|
136
|
+
else:
|
|
137
|
+
self.path_info = str(config["path_info"]) # preset name or custom regex
|
|
138
|
+
|
|
139
|
+
if "log_stderr" in config:
|
|
140
|
+
self.log_stderr = str(config["log_stderr"]).lower() in ["true", "1", "yes"]
|
|
141
|
+
|
|
142
|
+
if "keep_conn" in config:
|
|
143
|
+
self.keep_conn = str(config["keep_conn"]).lower() in ["true", "1", "yes"]
|
|
94
144
|
|
|
95
145
|
if "custom_params" in config:
|
|
96
146
|
self.custom_params = config["custom_params"]
|
|
97
147
|
|
|
148
|
+
if "pass_headers" in config:
|
|
149
|
+
val = config["pass_headers"]
|
|
150
|
+
if isinstance(val, str):
|
|
151
|
+
self.pass_headers = [{"name": h.strip(), "condition": None}
|
|
152
|
+
for h in val.split(",") if h.strip()]
|
|
153
|
+
elif isinstance(val, list):
|
|
154
|
+
result = []
|
|
155
|
+
for item in val:
|
|
156
|
+
if isinstance(item, str):
|
|
157
|
+
result.append({"name": item.strip(), "condition": None})
|
|
158
|
+
elif isinstance(item, dict):
|
|
159
|
+
result.append({
|
|
160
|
+
"name": item["name"],
|
|
161
|
+
"condition": item.get("condition")
|
|
162
|
+
})
|
|
163
|
+
self.pass_headers = result
|
|
164
|
+
|
|
98
165
|
def process(self, context: PluginContext) -> PluginResult:
|
|
99
166
|
"""
|
|
100
167
|
Process the plugin and generate FastCGI configuration
|
|
@@ -121,9 +188,16 @@ class FastcgiPlugin(PluginInterface):
|
|
|
121
188
|
fcgi_app_lines.append(f" docroot {self.document_root}")
|
|
122
189
|
fcgi_app_lines.append(f" index {self.index_file}")
|
|
123
190
|
|
|
191
|
+
if self.log_stderr:
|
|
192
|
+
fcgi_app_lines.append(" log-stderr")
|
|
193
|
+
|
|
194
|
+
if self.keep_conn:
|
|
195
|
+
fcgi_app_lines.append(" option keep-conn")
|
|
196
|
+
|
|
124
197
|
# PATH_INFO support
|
|
125
198
|
if self.path_info:
|
|
126
|
-
|
|
199
|
+
regex = self.PATH_INFO_PRESETS.get(self.path_info, self.path_info)
|
|
200
|
+
fcgi_app_lines.append(f" path-info {regex}")
|
|
127
201
|
|
|
128
202
|
# Set SCRIPT_FILENAME if customized
|
|
129
203
|
if self.script_filename and self.script_filename != "%[path]":
|
|
@@ -134,6 +208,13 @@ class FastcgiPlugin(PluginInterface):
|
|
|
134
208
|
for param_name, param_value in self.custom_params.items():
|
|
135
209
|
fcgi_app_lines.append(f" set-param {param_name.upper()} {param_value}")
|
|
136
210
|
|
|
211
|
+
# Pass headers
|
|
212
|
+
for header in self.pass_headers:
|
|
213
|
+
line = f" pass-header {header['name']}"
|
|
214
|
+
if header.get("condition"):
|
|
215
|
+
line += f" {header['condition']}"
|
|
216
|
+
fcgi_app_lines.append(line)
|
|
217
|
+
|
|
137
218
|
fcgi_app_definition = "\n".join(fcgi_app_lines)
|
|
138
219
|
|
|
139
220
|
# Build metadata
|
|
@@ -143,7 +224,10 @@ class FastcgiPlugin(PluginInterface):
|
|
|
143
224
|
"document_root": self.document_root,
|
|
144
225
|
"index_file": self.index_file,
|
|
145
226
|
"path_info": self.path_info,
|
|
146
|
-
"
|
|
227
|
+
"log_stderr": self.log_stderr,
|
|
228
|
+
"keep_conn": self.keep_conn,
|
|
229
|
+
"custom_params_count": len(self.custom_params),
|
|
230
|
+
"pass_headers_count": len(self.pass_headers)
|
|
147
231
|
}
|
|
148
232
|
|
|
149
233
|
return PluginResult(
|