easyhaproxy 6.1.1__tar.gz → 6.3.0__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.
Files changed (246) hide show
  1. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/.github/workflows/build.yml +13 -0
  2. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/PKG-INFO +5 -4
  3. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/README.md +3 -2
  4. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/RELEASE.md +3 -1
  5. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/deploy/docker/docker-compose.yml +1 -1
  6. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/deploy/kubernetes/easyhaproxy-clusterip.yml +13 -13
  7. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/deploy/kubernetes/easyhaproxy-daemonset.yml +11 -11
  8. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/deploy/kubernetes/easyhaproxy-nodeport.yml +13 -13
  9. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/docs/getting-started/kubernetes.md +3 -3
  10. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/docs/getting-started/static.md +1 -0
  11. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/docs/getting-started/swarm.md +1 -1
  12. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/docs/guides/acme.md +1 -1
  13. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/docs/guides/dashboard.md +4 -3
  14. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/docs/guides/helm.md +22 -0
  15. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/docs/guides/plugins.md +2 -0
  16. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/docs/guides/ssl.md +1 -1
  17. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/docs/reference/cli.md +5 -3
  18. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/docs/reference/environment-variables.md +8 -5
  19. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/docs/reference/helm.md +23 -4
  20. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/docs/reference/other.md +1 -1
  21. easyhaproxy-6.3.0/docs/reference/plugins/cloudflare.md +195 -0
  22. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/helm/easyhaproxy/Chart.yaml +2 -2
  23. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/helm/easyhaproxy/README.md +12 -2
  24. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/helm/easyhaproxy/templates/_helpers.tpl +7 -0
  25. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/helm/easyhaproxy/templates/deployment.yaml +46 -10
  26. easyhaproxy-6.3.0/helm/easyhaproxy/templates/pvc.yaml +21 -0
  27. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/helm/easyhaproxy/templates/service.yaml +2 -1
  28. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/helm/easyhaproxy/values.schema.json +1 -1
  29. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/helm/easyhaproxy/values.yaml +15 -1
  30. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/pyproject.toml +7 -1
  31. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/src/easyhaproxy/main.py +17 -3
  32. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/src/easymapping/__init__.py +1 -1
  33. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/src/easymapping/config_generator.py +2 -2
  34. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/src/easymapping/label_handler.py +1 -1
  35. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/src/functions/__init__.py +1 -1
  36. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/src/functions/certbot.py +1 -1
  37. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/src/functions/consts.py +1 -1
  38. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/src/functions/container_env.py +12 -8
  39. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/src/functions/filter.py +1 -1
  40. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/src/functions/functions.py +1 -1
  41. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/src/functions/haproxy.py +2 -2
  42. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/src/functions/loggers.py +1 -1
  43. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/src/plugins/__init__.py +1 -1
  44. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/src/plugins/builtin/cloudflare.py +3 -2
  45. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/src/plugins/builtin/jwt_validator.py +1 -1
  46. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/src/plugins/interface.py +1 -1
  47. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/src/plugins/manager.py +1 -1
  48. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/src/plugins/types.py +1 -1
  49. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/src/processor/__init__.py +1 -1
  50. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/src/processor/docker.py +1 -1
  51. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/src/processor/interface.py +3 -3
  52. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/src/processor/kubernetes.py +23 -22
  53. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/src/processor/static.py +1 -1
  54. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/src/processor/swarm.py +1 -1
  55. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/src/templates/haproxy.cfg.j2 +1 -1
  56. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/tests/conftest.py +2 -2
  57. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/tests/test_certbot.py +7 -9
  58. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/tests/test_certbot_haproxy_config.py +2 -2
  59. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/tests/test_containerenv.py +61 -1
  60. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/tests/test_daemonize.py +1 -2
  61. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/tests/test_kubernetes_processor.py +114 -49
  62. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/tests/test_plugins.py +28 -6
  63. easyhaproxy-6.3.0/tests/test_stats.py +70 -0
  64. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/tests_e2e/docker/docker-compose-acme.yml +1 -1
  65. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/tests_e2e/docker/docker-compose-portainer.yml +1 -1
  66. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/tests_e2e/kubernetes/cloudflare.yml +1 -1
  67. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/tests_e2e/kubernetes/ip-whitelist.yml +1 -1
  68. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/tests_e2e/kubernetes/jwt-validator.yml +1 -1
  69. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/tests_e2e/kubernetes/plugins-combined.yml +1 -1
  70. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/tests_e2e/kubernetes/service.yml +1 -1
  71. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/tests_e2e/kubernetes/service_tls.yml +1 -1
  72. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/uv.lock +478 -361
  73. easyhaproxy-6.1.1/CONTRIBUTING.md +0 -36
  74. easyhaproxy-6.1.1/docs/reference/plugins/cloudflare.md +0 -120
  75. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/.dockerignore +0 -0
  76. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/.github/FUNDING.yml +0 -0
  77. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/.github/dependabot.yml +0 -0
  78. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/.gitignore +0 -0
  79. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/.python-version +0 -0
  80. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/.run/pytest in tests.run.xml +0 -0
  81. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/.vscode/launch.json +0 -0
  82. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/.vscode/settings.json +0 -0
  83. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/LICENSE +0 -0
  84. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/Makefile +0 -0
  85. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/build-multiarch.sh +0 -0
  86. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/deploy/docker/Dockerfile +0 -0
  87. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/deploy/docker/assets/entrypoint.sh +0 -0
  88. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/deploy/docker/assets/etc/easyhaproxy/haproxy/conf.d/README.md +0 -0
  89. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/deploy/docker/assets/etc/easyhaproxy/haproxy/errors-custom/400.http +0 -0
  90. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/deploy/docker/assets/etc/easyhaproxy/haproxy/errors-custom/403.http +0 -0
  91. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/deploy/docker/assets/etc/easyhaproxy/haproxy/errors-custom/408.http +0 -0
  92. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/deploy/docker/assets/etc/easyhaproxy/haproxy/errors-custom/500.http +0 -0
  93. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/deploy/docker/assets/etc/easyhaproxy/haproxy/errors-custom/502.http +0 -0
  94. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/deploy/docker/assets/etc/easyhaproxy/haproxy/errors-custom/503.http +0 -0
  95. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/deploy/docker/assets/etc/easyhaproxy/haproxy/errors-custom/504.http +0 -0
  96. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/deploy/docker/assets/etc/easyhaproxy/www/dashboard.html +0 -0
  97. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/deploy/kubernetes/README.md +0 -0
  98. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/docs/concepts/_category_.json +0 -0
  99. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/docs/concepts/index.md +0 -0
  100. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/docs/concepts/limitations.md +0 -0
  101. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/docs/dashboard.png +0 -0
  102. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/docs/dashboard_login.png +0 -0
  103. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/docs/dashboard_thumbnail.png +0 -0
  104. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/docs/easyhaproxy_digitalocean.png +0 -0
  105. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/docs/easyhaproxy_docker.png +0 -0
  106. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/docs/easyhaproxy_dokku.png +0 -0
  107. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/docs/easyhaproxy_helm.png +0 -0
  108. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/docs/easyhaproxy_kubernetes.png +0 -0
  109. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/docs/easyhaproxy_logo.png +0 -0
  110. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/docs/easyhaproxy_microk8s.png +0 -0
  111. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/docs/easyhaproxy_static.png +0 -0
  112. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/docs/easyhaproxy_swarm.png +0 -0
  113. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/docs/getting-started/_category_.json +0 -0
  114. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/docs/getting-started/docker.md +0 -0
  115. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/docs/getting-started/index.md +0 -0
  116. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/docs/getting-started/native.md +0 -0
  117. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/docs/guides/_category_.json +0 -0
  118. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/docs/guides/digitalocean.md +0 -0
  119. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/docs/guides/dokku.md +0 -0
  120. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/docs/guides/microk8s.md +0 -0
  121. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/docs/guides/plugin-development.md +0 -0
  122. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/docs/icons.xcf +0 -0
  123. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/docs/logo.png +0 -0
  124. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/docs/logo.xcf +0 -0
  125. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/docs/reference/_category_.json +0 -0
  126. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/docs/reference/container-labels.md +0 -0
  127. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/docs/reference/plugins/_category_.json +0 -0
  128. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/docs/reference/plugins/cleanup.md +0 -0
  129. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/docs/reference/plugins/deny-pages.md +0 -0
  130. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/docs/reference/plugins/fastcgi.md +0 -0
  131. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/docs/reference/plugins/ip-whitelist.md +0 -0
  132. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/docs/reference/plugins/jwt-validator.md +0 -0
  133. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/docs/reference/volumes.md +0 -0
  134. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/docs/video-docker-ssl.png +0 -0
  135. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/docs/video-docker.png +0 -0
  136. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/docs/video-kubernetes-letsencrypt.png +0 -0
  137. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/docs/video-kubernetes.png +0 -0
  138. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/docs/video-static.png +0 -0
  139. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/docs/video-tcp-mysql.png +0 -0
  140. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/helm/easyhaproxy/.helmignore +0 -0
  141. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/helm/easyhaproxy/LICENSE +0 -0
  142. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/helm/easyhaproxy/templates/clusterrole.yaml +0 -0
  143. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/helm/easyhaproxy/templates/clusterrolebinding.yaml +0 -0
  144. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/helm/easyhaproxy/templates/ingressclass.yaml +0 -0
  145. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/helm/easyhaproxy/templates/serviceaccount.yaml +0 -0
  146. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/scripts/bump-version.sh +0 -0
  147. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/src/easyhaproxy/__init__.py +0 -0
  148. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/src/plugins/builtin/__init__.py +0 -0
  149. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/src/plugins/builtin/cleanup.py +0 -0
  150. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/src/plugins/builtin/deny_pages.py +0 -0
  151. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/src/plugins/builtin/fastcgi.py +0 -0
  152. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/src/plugins/builtin/ip_whitelist.py +0 -0
  153. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/src/templates/bind.j2 +0 -0
  154. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/src/templates/frontend-mode-http.j2 +0 -0
  155. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/src/templates/frontend-mode-tcp.j2 +0 -0
  156. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/src/templates/ssl_default.j2 +0 -0
  157. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/src/templates/ssl_loose.j2 +0 -0
  158. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/src/templates/ssl_strict.j2 +0 -0
  159. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/tests/__init__.py +0 -0
  160. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/tests/expected/docker.txt +0 -0
  161. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/tests/expected/no-services.txt +0 -0
  162. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/tests/expected/services-fcgi.txt +0 -0
  163. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/tests/expected/services-letsencrypt.txt +0 -0
  164. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/tests/expected/services-multi-containers.txt +0 -0
  165. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/tests/expected/services-multiple-hosts.txt +0 -0
  166. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/tests/expected/services-redirect-ssl.txt +0 -0
  167. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/tests/expected/services-tcp.txt +0 -0
  168. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/tests/expected/services.txt +0 -0
  169. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/tests/expected/ssl-loose.txt +0 -0
  170. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/tests/expected/ssl-strict.txt +0 -0
  171. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/tests/expected/static-cors.txt +0 -0
  172. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/tests/expected/static.txt +0 -0
  173. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/tests/fixtures/00_haproxy.cfg +0 -0
  174. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/tests/fixtures/10_haproxy.cfg +0 -0
  175. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/tests/fixtures/no-services +0 -0
  176. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/tests/fixtures/run_bash.sh +0 -0
  177. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/tests/fixtures/services +0 -0
  178. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/tests/fixtures/services-changed-label +0 -0
  179. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/tests/fixtures/services-clone-to-ssl +0 -0
  180. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/tests/fixtures/services-fcgi +0 -0
  181. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/tests/fixtures/services-letsencrypt +0 -0
  182. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/tests/fixtures/services-multi-containers +0 -0
  183. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/tests/fixtures/services-multiple-hosts +0 -0
  184. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/tests/fixtures/services-redirect-ssl +0 -0
  185. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/tests/fixtures/services-tcp +0 -0
  186. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/tests/fixtures/services-with-cloudflare +0 -0
  187. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/tests/fixtures/services-with-deny-pages +0 -0
  188. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/tests/fixtures/services-with-ip-whitelist +0 -0
  189. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/tests/fixtures/services-with-jwt-validator +0 -0
  190. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/tests/fixtures/services-with-multiple-plugins +0 -0
  191. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/tests/fixtures/static.yml +0 -0
  192. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/tests/fixtures/static_cors.yml +0 -0
  193. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/tests/fixtures/static_multi_domain.yml +0 -0
  194. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/tests/test_docker.py +0 -0
  195. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/tests/test_functions.py +0 -0
  196. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/tests/test_labels.py +0 -0
  197. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/tests/test_parser.py +0 -0
  198. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/tests/test_static.py +0 -0
  199. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/tests_e2e/conftest.py +0 -0
  200. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/tests_e2e/docker/AGENTS.md +0 -0
  201. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/tests_e2e/docker/README.md +0 -0
  202. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/tests_e2e/docker/docker-compose-acme-e2e.yml +0 -0
  203. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/tests_e2e/docker/docker-compose-changed-label.yml +0 -0
  204. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/tests_e2e/docker/docker-compose-cloudflare.yml +0 -0
  205. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/tests_e2e/docker/docker-compose-ip-whitelist.yml +0 -0
  206. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/tests_e2e/docker/docker-compose-jwt-validator.yml +0 -0
  207. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/tests_e2e/docker/docker-compose-multi-containers.yml +0 -0
  208. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/tests_e2e/docker/docker-compose-php-fpm.yml +0 -0
  209. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/tests_e2e/docker/docker-compose-plugins-combined.yml +0 -0
  210. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/tests_e2e/docker/docker-compose-portainer-app-example.yml +0 -0
  211. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/tests_e2e/docker/docker-compose-proxy-headers.yml +0 -0
  212. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/tests_e2e/docker/docker-compose.yml +0 -0
  213. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/tests_e2e/docker/pebble-config.json +0 -0
  214. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/tests_e2e/docker/php-app/README.md +0 -0
  215. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/tests_e2e/docker/php-app/index.php +0 -0
  216. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/tests_e2e/docker/php-app/info.php +0 -0
  217. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/tests_e2e/docker/php-app/test-path-info.php +0 -0
  218. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/tests_e2e/fixtures/header-echo/Dockerfile +0 -0
  219. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/tests_e2e/fixtures/header-echo/README.md +0 -0
  220. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/tests_e2e/fixtures/header-echo/server.py +0 -0
  221. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/tests_e2e/generate-keys.sh +0 -0
  222. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/tests_e2e/kubernetes/.gitignore +0 -0
  223. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/tests_e2e/kubernetes/README.md +0 -0
  224. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/tests_e2e/kubernetes/jwt-validator-secret-example.yml +0 -0
  225. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/tests_e2e/kubernetes/setup-cluster.sh +0 -0
  226. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/tests_e2e/kubernetes/teardown-cluster.sh +0 -0
  227. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/tests_e2e/static/README.md +0 -0
  228. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/tests_e2e/static/conf/config-basic.yml +0 -0
  229. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/tests_e2e/static/conf/config-certbot.yml +0 -0
  230. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/tests_e2e/static/conf/config-deny-pages.yml +0 -0
  231. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/tests_e2e/static/conf/config-jwt-validator.yml +0 -0
  232. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/tests_e2e/static/docker-compose.yml +0 -0
  233. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/tests_e2e/swarm/README.md +0 -0
  234. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/tests_e2e/swarm/cloudflare.yml +0 -0
  235. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/tests_e2e/swarm/easyhaproxy.yml +0 -0
  236. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/tests_e2e/swarm/ip-whitelist.yml +0 -0
  237. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/tests_e2e/swarm/jwt-validator.yml +0 -0
  238. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/tests_e2e/swarm/plugins-combined.yml +0 -0
  239. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/tests_e2e/swarm/portainer.yml +0 -0
  240. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/tests_e2e/swarm/services.yml +0 -0
  241. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/tests_e2e/test_docker_compose.py +0 -0
  242. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/tests_e2e/test_kubernetes.py +0 -0
  243. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/tests_e2e/test_proxy_headers.py +0 -0
  244. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/tests_e2e/test_static.py +0 -0
  245. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/tests_e2e/test_swarm.py +0 -0
  246. {easyhaproxy-6.1.1 → easyhaproxy-6.3.0}/tests_e2e/utils.py +0 -0
@@ -31,6 +31,9 @@ jobs:
31
31
  permissions:
32
32
  contents: read
33
33
  packages: write
34
+ env:
35
+ # Secrets are empty on pull requests from forks and from Dependabot.
36
+ HAS_REGISTRY_LOGIN: ${{ secrets.DOCKER_REGISTRY_TOKEN != '' }}
34
37
 
35
38
  steps:
36
39
  - name: Checkout repository
@@ -44,6 +47,16 @@ jobs:
44
47
  export PATH="$HOME/.local/bin:$PATH"
45
48
  uv sync --group dev
46
49
 
50
+ # The tests pull byjg/static-httpserver. An anonymous pull counts against
51
+ # the runner's shared IP address and fails with "toomanyrequests".
52
+ - name: Log into registry
53
+ if: env.HAS_REGISTRY_LOGIN == 'true'
54
+ uses: docker/login-action@v4
55
+ with:
56
+ registry: ${{ secrets.DOCKER_REGISTRY }}
57
+ username: ${{ secrets.DOCKER_REGISTRY_USER }}
58
+ password: ${{ secrets.DOCKER_REGISTRY_TOKEN }}
59
+
47
60
  - name: Run tests
48
61
  run: |
49
62
  export PATH="$HOME/.local/bin:$PATH"
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.4
1
+ Metadata-Version: 2.5
2
2
  Name: easyhaproxy
3
- Version: 6.1.1
3
+ Version: 6.3.0
4
4
  Summary: HAProxy label based routing with service discovery for Docker, Swarm, and Kubernetes
5
5
  License: MIT License
6
6
 
@@ -54,9 +54,10 @@ tags: [docker, devops]
54
54
 
55
55
  [![Sponsor](https://img.shields.io/badge/Sponsor-%23ea4aaa?logo=githubsponsors&logoColor=white&labelColor=0d1117)](https://github.com/sponsors/byjg)
56
56
  [![Opensource ByJG](https://img.shields.io/badge/opensource-byjg-success.svg)](http://opensource.byjg.com)
57
+ [![Install MCP Server](https://img.shields.io/badge/Install-MCP_Server-8A2BE2?logo=modelcontextprotocol&logoColor=white)](https://opensource.byjg.com/docs/ai/mcpserver-byjg-docs/)
57
58
  [![Build Status](https://github.com/byjg/docker-easy-haproxy/actions/workflows/build.yml/badge.svg?branch=master)](https://github.com/byjg/docker-easy-haproxy/actions/workflows/build.yml)
58
59
  [![GitHub source](https://img.shields.io/badge/Github-source-informational?logo=github)](https://github.com/byjg/docker-easy-haproxy/)
59
- [![GitHub license](https://img.shields.io/github/license/byjg/docker-easy-haproxy.svg)](https://opensource.byjg.com/opensource/licensing.html)
60
+ [![GitHub license](https://img.shields.io/github/license/byjg/docker-easy-haproxy.svg)](https://opensource.byjg.com/license/)
60
61
  [![GitHub release](https://img.shields.io/github/release/byjg/docker-easy-haproxy.svg)](https://github.com/byjg/docker-easy-haproxy/releases/)
61
62
  [![Helm Version](https://img.shields.io/badge/dynamic/yaml?color=blue&label=Helm&query=%24.entries.easyhaproxy%5B0%5D.version&url=http%3A%2F%2Fopensource.byjg.com%2Fhelm%2Findex.yaml)](https://opensource.byjg.com/helm)
62
63
  [![Artifact Hub](https://img.shields.io/endpoint?url=https://artifacthub.io/badge/repository/byjg)](https://artifacthub.io/packages/search?repo=byjg)
@@ -112,7 +113,7 @@ EasyHAProxy is part of some projects:
112
113
 
113
114
  [![HAProxy Monitor](docs/dashboard_thumbnail.png)](docs/guides/dashboard.md)
114
115
 
115
- A real-time dashboard is available at `http://<host>:11936/` whenever `HAPROXY_PASSWORD` is set —
116
+ A real-time dashboard is available at `http://<host>:11936/` (set `HAPROXY_PASSWORD` to require a login) —
116
117
  no extra containers, no Prometheus, no Grafana. See the [dashboard guide](docs/guides/dashboard.md).
117
118
 
118
119
  ## See EasyHAProxy in action
@@ -7,9 +7,10 @@ tags: [docker, devops]
7
7
 
8
8
  [![Sponsor](https://img.shields.io/badge/Sponsor-%23ea4aaa?logo=githubsponsors&logoColor=white&labelColor=0d1117)](https://github.com/sponsors/byjg)
9
9
  [![Opensource ByJG](https://img.shields.io/badge/opensource-byjg-success.svg)](http://opensource.byjg.com)
10
+ [![Install MCP Server](https://img.shields.io/badge/Install-MCP_Server-8A2BE2?logo=modelcontextprotocol&logoColor=white)](https://opensource.byjg.com/docs/ai/mcpserver-byjg-docs/)
10
11
  [![Build Status](https://github.com/byjg/docker-easy-haproxy/actions/workflows/build.yml/badge.svg?branch=master)](https://github.com/byjg/docker-easy-haproxy/actions/workflows/build.yml)
11
12
  [![GitHub source](https://img.shields.io/badge/Github-source-informational?logo=github)](https://github.com/byjg/docker-easy-haproxy/)
12
- [![GitHub license](https://img.shields.io/github/license/byjg/docker-easy-haproxy.svg)](https://opensource.byjg.com/opensource/licensing.html)
13
+ [![GitHub license](https://img.shields.io/github/license/byjg/docker-easy-haproxy.svg)](https://opensource.byjg.com/license/)
13
14
  [![GitHub release](https://img.shields.io/github/release/byjg/docker-easy-haproxy.svg)](https://github.com/byjg/docker-easy-haproxy/releases/)
14
15
  [![Helm Version](https://img.shields.io/badge/dynamic/yaml?color=blue&label=Helm&query=%24.entries.easyhaproxy%5B0%5D.version&url=http%3A%2F%2Fopensource.byjg.com%2Fhelm%2Findex.yaml)](https://opensource.byjg.com/helm)
15
16
  [![Artifact Hub](https://img.shields.io/endpoint?url=https://artifacthub.io/badge/repository/byjg)](https://artifacthub.io/packages/search?repo=byjg)
@@ -65,7 +66,7 @@ EasyHAProxy is part of some projects:
65
66
 
66
67
  [![HAProxy Monitor](docs/dashboard_thumbnail.png)](docs/guides/dashboard.md)
67
68
 
68
- A real-time dashboard is available at `http://<host>:11936/` whenever `HAPROXY_PASSWORD` is set —
69
+ A real-time dashboard is available at `http://<host>:11936/` (set `HAPROXY_PASSWORD` to require a login) —
69
70
  no extra containers, no Prometheus, no Grafana. See the [dashboard guide](docs/guides/dashboard.md).
70
71
 
71
72
  ## See EasyHAProxy in action
@@ -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.1` (as of Chart.yaml)
57
+ **Current Version:** `6.3.0` (as of Chart.yaml)
58
58
 
59
59
  ## Automated Release (Recommended)
60
60
 
@@ -329,6 +329,8 @@ helm show chart byjg/easyhaproxy
329
329
 
330
330
  | Version | Release Date | Type | Highlights |
331
331
  |---------|--------------|-------|---------------------------------------------------------------------------------------------------------------------------------------|
332
+ | 6.3.0 | 2026-10-21 | Minor | HAPROXY_STATS_ENABLE to turn stats/dashboard off, stats without a password documented with a startup warning, HAPROXY_STATS_PORT honored without a password, chart stats.enabled |
333
+ | 6.2.0 | 2026-10-21 | Minor | Ingress status follows a cloud LoadBalancer address, EASYHAPROXY_SERVICE_NAME, Helm chart LoadBalancer Service and certbot persistence |
332
334
  | 6.1.1 | 2026-06-25 | Patch | Add pass_headers support to FastCGI plugin, fix flaky ACME e2e test timeout |
333
335
  | 6.1.0 | 2026-06-24 | Minor | FastCGI protocol support, certbot sidecar plugin, dependency updates |
334
336
  | 6.0.1 | 2026-02-23 | Patch | HAProxy dashboard, real-time monitoring dashboard with live traffic charts, ACME e2e test fixes |
@@ -1,6 +1,6 @@
1
1
  services:
2
2
  easyhaproxy:
3
- image: byjg/easy-haproxy:6.1.1
3
+ image: byjg/easy-haproxy:6.3.0
4
4
  volumes:
5
5
  - /var/run/docker.sock:/var/run/docker.sock
6
6
  - certs_certbot:/etc/easyhaproxy/certs/certbot
@@ -6,10 +6,10 @@ metadata:
6
6
  name: ingress-easyhaproxy
7
7
  namespace: easyhaproxy
8
8
  labels:
9
- helm.sh/chart: easyhaproxy-2.0.4
9
+ helm.sh/chart: easyhaproxy-2.0.6
10
10
  app.kubernetes.io/name: easyhaproxy
11
11
  app.kubernetes.io/instance: ingress
12
- app.kubernetes.io/version: "6.1.1"
12
+ app.kubernetes.io/version: "6.3.0"
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.4
22
+ helm.sh/chart: easyhaproxy-2.0.6
23
23
  app.kubernetes.io/name: easyhaproxy
24
24
  app.kubernetes.io/instance: ingress
25
- app.kubernetes.io/version: "6.1.1"
25
+ app.kubernetes.io/version: "6.3.0"
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.4
86
+ helm.sh/chart: easyhaproxy-2.0.6
87
87
  app.kubernetes.io/name: easyhaproxy
88
88
  app.kubernetes.io/instance: ingress
89
- app.kubernetes.io/version: "6.1.1"
89
+ app.kubernetes.io/version: "6.3.0"
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.4
108
+ helm.sh/chart: easyhaproxy-2.0.6
109
109
  app.kubernetes.io/name: easyhaproxy
110
110
  app.kubernetes.io/instance: ingress
111
- app.kubernetes.io/version: "6.1.1"
111
+ app.kubernetes.io/version: "6.3.0"
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.4
143
+ helm.sh/chart: easyhaproxy-2.0.6
144
144
  app.kubernetes.io/name: easyhaproxy
145
145
  app.kubernetes.io/instance: ingress
146
- app.kubernetes.io/version: "6.1.1"
146
+ app.kubernetes.io/version: "6.3.0"
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.1"
167
+ image: "byjg/easy-haproxy:6.3.0"
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.4
220
+ helm.sh/chart: easyhaproxy-2.0.6
221
221
  app.kubernetes.io/name: easyhaproxy
222
222
  app.kubernetes.io/instance: ingress
223
- app.kubernetes.io/version: "6.1.1"
223
+ app.kubernetes.io/version: "6.3.0"
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.4
9
+ helm.sh/chart: easyhaproxy-2.0.6
10
10
  app.kubernetes.io/name: easyhaproxy
11
11
  app.kubernetes.io/instance: ingress
12
- app.kubernetes.io/version: "6.1.1"
12
+ app.kubernetes.io/version: "6.3.0"
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.4
22
+ helm.sh/chart: easyhaproxy-2.0.6
23
23
  app.kubernetes.io/name: easyhaproxy
24
24
  app.kubernetes.io/instance: ingress
25
- app.kubernetes.io/version: "6.1.1"
25
+ app.kubernetes.io/version: "6.3.0"
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.4
86
+ helm.sh/chart: easyhaproxy-2.0.6
87
87
  app.kubernetes.io/name: easyhaproxy
88
88
  app.kubernetes.io/instance: ingress
89
- app.kubernetes.io/version: "6.1.1"
89
+ app.kubernetes.io/version: "6.3.0"
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.4
107
+ helm.sh/chart: easyhaproxy-2.0.6
108
108
  app.kubernetes.io/name: easyhaproxy
109
109
  app.kubernetes.io/instance: ingress
110
- app.kubernetes.io/version: "6.1.1"
110
+ app.kubernetes.io/version: "6.3.0"
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.1"
139
+ image: "byjg/easy-haproxy:6.3.0"
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.4
192
+ helm.sh/chart: easyhaproxy-2.0.6
193
193
  app.kubernetes.io/name: easyhaproxy
194
194
  app.kubernetes.io/instance: ingress
195
- app.kubernetes.io/version: "6.1.1"
195
+ app.kubernetes.io/version: "6.3.0"
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.4
9
+ helm.sh/chart: easyhaproxy-2.0.6
10
10
  app.kubernetes.io/name: easyhaproxy
11
11
  app.kubernetes.io/instance: ingress
12
- app.kubernetes.io/version: "6.1.1"
12
+ app.kubernetes.io/version: "6.3.0"
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.4
22
+ helm.sh/chart: easyhaproxy-2.0.6
23
23
  app.kubernetes.io/name: easyhaproxy
24
24
  app.kubernetes.io/instance: ingress
25
- app.kubernetes.io/version: "6.1.1"
25
+ app.kubernetes.io/version: "6.3.0"
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.4
86
+ helm.sh/chart: easyhaproxy-2.0.6
87
87
  app.kubernetes.io/name: easyhaproxy
88
88
  app.kubernetes.io/instance: ingress
89
- app.kubernetes.io/version: "6.1.1"
89
+ app.kubernetes.io/version: "6.3.0"
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.4
108
+ helm.sh/chart: easyhaproxy-2.0.6
109
109
  app.kubernetes.io/name: easyhaproxy
110
110
  app.kubernetes.io/instance: ingress
111
- app.kubernetes.io/version: "6.1.1"
111
+ app.kubernetes.io/version: "6.3.0"
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.4
143
+ helm.sh/chart: easyhaproxy-2.0.6
144
144
  app.kubernetes.io/name: easyhaproxy
145
145
  app.kubernetes.io/instance: ingress
146
- app.kubernetes.io/version: "6.1.1"
146
+ app.kubernetes.io/version: "6.3.0"
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.1"
167
+ image: "byjg/easy-haproxy:6.3.0"
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.4
220
+ helm.sh/chart: easyhaproxy-2.0.6
221
221
  app.kubernetes.io/name: easyhaproxy
222
222
  app.kubernetes.io/instance: ingress
223
- app.kubernetes.io/version: "6.1.1"
223
+ app.kubernetes.io/version: "6.3.0"
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.1/deploy/kubernetes/easyhaproxy-nodeport.yml
44
+ https://raw.githubusercontent.com/byjg/docker-easy-haproxy/6.3.0/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.1/deploy/kubernetes/easyhaproxy-clusterip.yml
53
+ https://raw.githubusercontent.com/byjg/docker-easy-haproxy/6.3.0/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.1/deploy/kubernetes/easyhaproxy-daemonset.yml
67
+ https://raw.githubusercontent.com/byjg/docker-easy-haproxy/6.3.0/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).
@@ -50,6 +50,7 @@ curl http://myapp.example.com
50
50
 
51
51
  ```yaml
52
52
  stats:
53
+ enabled: true # Optional (default true); false turns stats and the dashboard off
53
54
  username: admin # Optional (default "admin")
54
55
  password: password # If omitted, stats are public with no password
55
56
  port: 1936 # Optional (default 1936)
@@ -28,7 +28,7 @@ docker network create -d overlay --attachable easyhaproxy
28
28
  ```yaml
29
29
  services:
30
30
  haproxy:
31
- image: byjg/easy-haproxy:6.1.1
31
+ image: byjg/easy-haproxy:6.3.0
32
32
  volumes:
33
33
  - /var/run/docker.sock:/var/run/docker.sock
34
34
  deploy:
@@ -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.1
160
+ image: byjg/easy-haproxy:6.3.0
161
161
  volumes:
162
162
  - /var/run/docker.sock:/var/run/docker.sock
163
163
  # REQUIRED: Persist Certbot certificates (ACME)
@@ -13,11 +13,11 @@ single page, with no extra software required.
13
13
 
14
14
  ## Enabling the dashboard
15
15
 
16
- Two environment variables are required:
16
+ The dashboard is on by default (`HAPROXY_STATS_ENABLE=true`). Set these two variables:
17
17
 
18
18
  | Variable | Purpose |
19
19
  |-----------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------|
20
- | `HAPROXY_PASSWORD` | Enables the stats endpoint and the dashboard. |
20
+ | `HAPROXY_PASSWORD` | Requires a login for the stats endpoint and the dashboard. **Without it, both are served without a login.** |
21
21
  | `HAPROXY_STATS_CORS_ORIGIN` | Allows the dashboard page to call the stats API. **Required** — without it the browser blocks the requests and the dashboard shows no data. |
22
22
 
23
23
  The dashboard page is served from port `HAPROXY_STATS_PORT + 10000`, but it fetches data from
@@ -133,7 +133,8 @@ EasyHAProxy bundles a polished, self-contained dashboard that:
133
133
 
134
134
  | Variable | Description | Default |
135
135
  |---|---|---|
136
- | `HAPROXY_PASSWORD` | Enables stats **and** the dashboard. Required. | *empty* |
136
+ | `HAPROXY_STATS_ENABLE` | Serve stats **and** the dashboard. `false` turns both off. | `true` |
137
+ | `HAPROXY_PASSWORD` | Login password for stats and the dashboard. Without it they are served without a login. | *empty* |
137
138
  | `HAPROXY_USERNAME` | Username for the stats endpoint. | `admin` |
138
139
  | `HAPROXY_STATS_PORT` | Stats API port. Dashboard is served on this port **+ 10000**. | `1936` |
139
140
  | `HAPROXY_STATS_CORS_ORIGIN` | **Required for the dashboard.** Set to the exact origin you use to open the dashboard (e.g. `http://localhost:11936`). Without this the browser blocks stats API calls and the dashboard shows no data. | *empty* |
@@ -42,6 +42,28 @@ helm upgrade --install ingress byjg/easyhaproxy \
42
42
  --set service.type=ClusterIP
43
43
  ```
44
44
 
45
+ ```bash title="LoadBalancer (cloud providers)"
46
+ helm upgrade --install ingress byjg/easyhaproxy \
47
+ --namespace easyhaproxy \
48
+ --set service.create=true \
49
+ --set service.type=LoadBalancer
50
+ ```
51
+
52
+ On a cloud provider (DigitalOcean, AWS, GCP, Azure…), `LoadBalancer` asks the provider for an external load balancer in front of EasyHAProxy, and its address is written to your Ingress status. Use `service.annotations` for provider-specific load balancer settings.
53
+
54
+ ### 3) Persist ACME certificates
55
+
56
+ If you use automatic certificates (`easyhaproxy.certbot` annotation), set the ACME e-mail and keep the issued certificates on a volume:
57
+
58
+ ```bash title="ACME with persisted certificates"
59
+ helm upgrade --install ingress byjg/easyhaproxy \
60
+ --namespace easyhaproxy \
61
+ --set service.create=true \
62
+ --set service.type=LoadBalancer \
63
+ --set easyhaproxy.certbot.email=you@example.com \
64
+ --set persistence.certbot.enabled=true
65
+ ```
66
+
45
67
  See [Deployment Modes](../getting-started/kubernetes.md#deployment-modes) for a comparison of all three modes.
46
68
 
47
69
  For the complete list of configurable values, see the [Helm Values reference](../reference/helm.md).
@@ -230,6 +230,8 @@ labels:
230
230
  easyhaproxy.http.plugins: cloudflare
231
231
  ```
232
232
 
233
+ Using a Cloudflare Tunnel? See [Cloudflare Tunnel](../reference/plugins/cloudflare.md#cloudflare-tunnel).
234
+
233
235
  ### Multiple Plugins Together
234
236
 
235
237
  ```yaml
@@ -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.1
86
+ image: byjg/easy-haproxy:6.3.0
87
87
  volumes:
88
88
  - /var/run/docker.sock:/var/run/docker.sock
89
89
  - certs_haproxy:/etc/easyhaproxy/certs/haproxy
@@ -38,13 +38,14 @@ Valid levels: `TRACE`, `DEBUG`, `INFO`, `WARN`, `ERROR`, `FATAL`
38
38
 
39
39
  | Flag | Environment Variable | Default | Description |
40
40
  |--------------------------------------|-----------------------------|--------------|---------------------------------------------|
41
- | `--haproxy-password PASSWORD` | `HAPROXY_PASSWORD` | *(disabled)* | Enable stats dashboard with this password |
41
+ | `--haproxy-stats-enable BOOL` | `HAPROXY_STATS_ENABLE` | `true` | Serve the stats and dashboard |
42
+ | `--haproxy-password PASSWORD` | `HAPROXY_PASSWORD` | *(none)* | Require this password for stats and dashboard |
42
43
  | `--haproxy-username USERNAME` | `HAPROXY_USERNAME` | `admin` | Stats dashboard username |
43
44
  | `--haproxy-stats-port PORT` | `HAPROXY_STATS_PORT` | `1936` | Stats dashboard port |
44
45
  | `--haproxy-stats-cors-origin ORIGIN` | `HAPROXY_STATS_CORS_ORIGIN` | *(none)* | Allowed CORS origin for the stats dashboard |
45
46
 
46
47
  :::tip
47
- The stats dashboard is only enabled when `--haproxy-password` (or `HAPROXY_PASSWORD`) is set.
48
+ Stats and the dashboard are on by default. Without `--haproxy-password` (or `HAPROXY_PASSWORD`) they are served without a login; turn them off with `--haproxy-stats-enable false`.
48
49
  :::
49
50
 
50
51
  ## ACME / Certbot (SSL certificates)
@@ -76,6 +77,7 @@ See the [plugins guide](../guides/plugins.md) for available plugins.
76
77
  | Flag | Environment Variable | Default | Description |
77
78
  |--------------------------------------------|--------------------------------------|----------|----------------------------------------------|
78
79
  | `--update-ingress-status BOOL` | `EASYHAPROXY_UPDATE_INGRESS_STATUS` | `true` | Update Ingress status with load-balancer IP |
79
- | `--deployment-mode MODE` | `EASYHAPROXY_DEPLOYMENT_MODE` | `auto` | Deployment mode: `auto`, `single`, `cluster` |
80
+ | `--deployment-mode MODE` | `EASYHAPROXY_DEPLOYMENT_MODE` | `auto` | Deployment mode: `auto`, `daemonset`, `nodeport`, `clusterip` |
80
81
  | `--external-hostname HOSTNAME` | `EASYHAPROXY_EXTERNAL_HOSTNAME` | *(none)* | External hostname reported in Ingress status |
82
+ | `--service-name NAME` | `EASYHAPROXY_SERVICE_NAME` | *(none)* | Name of the EasyHAProxy Service (set by the Helm chart) |
81
83
  | `--ingress-status-update-interval SECONDS` | `EASYHAPROXY_STATUS_UPDATE_INTERVAL` | `30` | Interval to update Ingress status |
@@ -16,15 +16,17 @@ sidebar_label: "Environment Variables"
16
16
  | EASYHAPROXY_LOG_LEVEL | (Optional) The log level for EasyHAproxy messages. Available: TRACE,DEBUG,INFO,WARN,ERROR,FATAL | DEBUG |
17
17
  | CERTBOT_LOG_LEVEL | (Optional) The log level for Certbot messages. Available: TRACE,DEBUG,INFO,WARN,ERROR,FATAL | DEBUG |
18
18
  | HAPROXY_LOG_LEVEL | (Optional) The log level for HAProxy messages. Available: TRACE,DEBUG,INFO,WARN,ERROR,FATAL | INFO |
19
+ | HAPROXY_STATS_ENABLE | (Optional) Serve the statistics endpoint and the monitoring dashboard. Set to `false` to turn them off. | `true` |
19
20
  | HAPROXY_USERNAME | (Optional) The HAProxy username for the statistics endpoint (used only when `HAPROXY_PASSWORD` is set). | `admin` |
20
- | HAPROXY_PASSWORD | (Optional) The HAProxy password to the statistics endpoint. Stats are **disabled** unless this is defined. | *empty* |
21
- | HAPROXY_STATS_PORT | (Optional) The HAProxy port to the statistics. If set to `false`, disable statistics. Only applies when `HAPROXY_PASSWORD` is defined. | `1936` |
22
- | HAPROXY_STATS_CORS_ORIGIN | Required for the monitoring dashboard to function. Set to the origin you use to open the dashboard (e.g. `http://localhost:11936`). The dashboard page calls the stats API from a different port, so the browser enforces CORS — without this header the dashboard shows no data. Only applies when `HAPROXY_PASSWORD` is defined. | *empty* |
21
+ | HAPROXY_PASSWORD | (Optional) The password for the statistics endpoint and dashboard. **Without it they are served without a login.** | *empty* |
22
+ | HAPROXY_STATS_PORT | (Optional) The HAProxy port to the statistics. The dashboard uses this port + 10000. `false` also turns statistics off. | `1936` |
23
+ | HAPROXY_STATS_CORS_ORIGIN | Required for the monitoring dashboard to function. Set to the origin you use to open the dashboard (e.g. `http://localhost:11936`). The dashboard page calls the stats API from a different port, so the browser enforces CORS — without this header the dashboard shows no data. | *empty* |
23
24
  | HAPROXY_CUSTOMERRORS | (Optional) If HAProxy will use custom HTML errors. true/false. | `false` |
24
25
 
25
26
  :::tip HAProxy Stats & Dashboard
26
- Statistics are only configured when `HAPROXY_PASSWORD` is set. Without a password, neither the
27
- stats endpoint nor the monitoring dashboard is generated.
27
+ Statistics and the monitoring dashboard are on by default. Without `HAPROXY_PASSWORD` they are served
28
+ **without a login**, and EasyHAProxy logs a warning at startup. Set a password, or `HAPROXY_STATS_ENABLE=false`
29
+ when the ports can be reached from outside.
28
30
  When enabled, the real-time dashboard is available at `http://<host>:<HAPROXY_STATS_PORT + 10000>/`
29
31
  (default `http://<host>:11936/`). See the [Monitoring Dashboard guide](../guides/dashboard.md) for details.
30
32
  :::
@@ -42,6 +44,7 @@ These variables apply only when `EASYHAPROXY_DISCOVER=kubernetes`. They control
42
44
  | EASYHAPROXY_UPDATE_INGRESS_STATUS | Update Ingress resources with the load-balancer IP. Set to `false` to disable. | `true` |
43
45
  | EASYHAPROXY_DEPLOYMENT_MODE | How to detect and report Ingress IPs: `auto`, `daemonset`, `nodeport`, or `clusterip`. `auto` inspects pod owner references and service type automatically. | `auto` |
44
46
  | EASYHAPROXY_EXTERNAL_HOSTNAME | Hostname to report in Ingress status when using ClusterIP mode without a cloud LoadBalancer. | *(none)* |
47
+ | EASYHAPROXY_SERVICE_NAME | Name of the EasyHAProxy Service, in the pod's namespace. The Helm chart sets it. When empty, `easyhaproxy` and `ingress-easyhaproxy` are tried. | *(none)* |
45
48
  | EASYHAPROXY_STATUS_UPDATE_INTERVAL | Seconds between Ingress status update cycles. | `30` |
46
49
 
47
50
  :::tip Deployment mode auto-detection
@@ -25,8 +25,8 @@ Controls whether EasyHAProxy runs as a **Deployment** (with a Service) or a **Da
25
25
  | Value | Description | Default |
26
26
  |-----------------------|---------------------------------------------------------------------------------------------|-------------|
27
27
  | `replicaCount` | Number of replicas (only used when `service.create: true`) | `1` |
28
- | `service.create` | `true` → Deployment + Service (NodePort or ClusterIP). `false` → DaemonSet with host ports. | `false` |
29
- | `service.type` | Service type when `service.create: true`: `NodePort` or `ClusterIP` | `ClusterIP` |
28
+ | `service.create` | `true` → Deployment + Service (NodePort, ClusterIP or LoadBalancer). `false` → DaemonSet with host ports. | `false` |
29
+ | `service.type` | Service type when `service.create: true`: `NodePort`, `ClusterIP` or `LoadBalancer` | `ClusterIP` |
30
30
  | `service.annotations` | Annotations to add to the Service resource | `{}` |
31
31
 
32
32
  :::tip Recommended mode
@@ -48,7 +48,8 @@ Set `service.create: true` and `service.type: NodePort` for most setups. DaemonS
48
48
  | Value | Description | Default |
49
49
  |------------------------------------|-----------------------------------------------------|------------|
50
50
  | `easyhaproxy.stats.username` | HAProxy stats username | `admin` |
51
- | `easyhaproxy.stats.password` | HAProxy stats password. **Required** to enable the stats endpoint and dashboard. | `password` |
51
+ | `easyhaproxy.stats.enabled` | Serve the stats endpoint and dashboard. `false` also removes ports 1936/11936 from the pod and Service. | `true` |
52
+ | `easyhaproxy.stats.password` | Login password for the stats endpoint and dashboard. Empty serves them without a login. | `password` |
52
53
  | `easyhaproxy.stats.corsOrigin` | Allowed origin for stats API CORS (e.g. `http://node01:11936`). **Required** for the dashboard to load in a browser. | `""` |
53
54
  | `easyhaproxy.refresh` | Seconds between service discovery polls | `"10"` |
54
55
  | `easyhaproxy.customErrors` | Enable custom HTML error pages | `"true"` |
@@ -58,6 +59,24 @@ Set `service.create: true` and `service.type: NodePort` for most setups. DaemonS
58
59
  | `easyhaproxy.logLevel.haproxy` | Log level for HAProxy | `DEBUG` |
59
60
  | `easyhaproxy.certbot.email` | Email address for Let's Encrypt / ACME registration | `""` |
60
61
 
62
+ ## Certificate Persistence
63
+
64
+ Keeps the ACME/Certbot certificates (`/etc/easyhaproxy/certs/certbot`) on a PersistentVolumeClaim, so a pod restart does not request them again and run into the CA rate limits. Recommended whenever `easyhaproxy.certbot.email` is set.
65
+
66
+ | Value | Description | Default |
67
+ |----------------------------------------|------------------------------------------------------|-----------------|
68
+ | `persistence.certbot.enabled` | Mount a PVC at `/etc/easyhaproxy/certs/certbot` | `false` |
69
+ | `persistence.certbot.existingClaim` | Use this existing PVC instead of creating one | `""` |
70
+ | `persistence.certbot.storageClass` | Storage class of the created PVC. Empty = default. | `""` |
71
+ | `persistence.certbot.accessMode` | Access mode of the created PVC | `ReadWriteOnce` |
72
+ | `persistence.certbot.size` | Size of the created PVC | `1Gi` |
73
+
74
+ :::note
75
+ With `service.create: true` and persistence enabled, the Deployment uses the `Recreate` strategy: a `ReadWriteOnce` volume cannot attach to the new pod while the old one still holds it. Expect a short gap during upgrades.
76
+
77
+ The created PVC has `helm.sh/resource-policy: keep`, so `helm uninstall` leaves the certificates in place. Delete the PVC by hand to remove them.
78
+ :::
79
+
61
80
  ## Ingress Status
62
81
 
63
82
  Controls how EasyHAProxy updates Kubernetes Ingress resources with load-balancer IPs.
@@ -94,7 +113,7 @@ kubectl label nodes node-01 "easyhaproxy/node=master"
94
113
  | `resources` | CPU/memory requests and limits for the pod | `{}` |
95
114
  | `nodeSelector` | Node selector for pod scheduling | `{}` |
96
115
  | `tolerations` | Tolerations for pod scheduling | `[]` |
97
- | `affinity` | Affinity rules for pod scheduling | `{}` |
116
+ | `affinity` | Affinity rules for pod scheduling. In DaemonSet mode `nodeAffinity` comes from `masterNode`; other keys (e.g. `podAntiAffinity`) are kept. | `{}` |
98
117
  | `podSecurityContext` | Pod-level security context | `{}` |
99
118
  | `securityContext` | Container-level security context | `{}` |
100
119
 
@@ -30,7 +30,7 @@ These headers help backend applications:
30
30
  Some ports on the EasyHAProxy container and in the firewall are required to be open. However, you don't need to expose the other container ports because EasyHAProxy will handle that.
31
31
 
32
32
  - The ports `80` and `443`.
33
- - If you enable the HAProxy statistics, you must also expose the port defined in `HAPROXY_STATS_PORT` environment variable (default 1936). Statistics are only generated when you set `HAPROXY_PASSWORD`.
33
+ - If you enable the HAProxy statistics, you must also expose the port defined in `HAPROXY_STATS_PORT` environment variable (default 1936). Statistics are on by default (`HAPROXY_STATS_ENABLE=false` turns them off) and need `HAPROXY_PASSWORD` to require a login.
34
34
  - Every port defined in `easyhaproxy.[definitions].port` also should be exposed.
35
35
 
36
36
  For example: