easyhaproxy 6.1.1__tar.gz → 6.2.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 (245) hide show
  1. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/.github/workflows/build.yml +13 -0
  2. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/PKG-INFO +4 -3
  3. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/README.md +2 -1
  4. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/RELEASE.md +2 -1
  5. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/deploy/docker/docker-compose.yml +1 -1
  6. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/deploy/kubernetes/easyhaproxy-clusterip.yml +13 -13
  7. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/deploy/kubernetes/easyhaproxy-daemonset.yml +11 -11
  8. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/deploy/kubernetes/easyhaproxy-nodeport.yml +13 -13
  9. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/docs/getting-started/kubernetes.md +3 -3
  10. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/docs/getting-started/swarm.md +1 -1
  11. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/docs/guides/acme.md +1 -1
  12. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/docs/guides/helm.md +22 -0
  13. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/docs/guides/plugins.md +2 -0
  14. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/docs/guides/ssl.md +1 -1
  15. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/docs/reference/cli.md +2 -1
  16. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/docs/reference/environment-variables.md +1 -0
  17. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/docs/reference/helm.md +21 -3
  18. easyhaproxy-6.2.0/docs/reference/plugins/cloudflare.md +195 -0
  19. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/helm/easyhaproxy/Chart.yaml +2 -2
  20. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/helm/easyhaproxy/README.md +11 -2
  21. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/helm/easyhaproxy/templates/deployment.yaml +41 -9
  22. easyhaproxy-6.2.0/helm/easyhaproxy/templates/pvc.yaml +21 -0
  23. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/helm/easyhaproxy/templates/service.yaml +0 -1
  24. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/helm/easyhaproxy/values.schema.json +1 -1
  25. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/helm/easyhaproxy/values.yaml +14 -1
  26. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/pyproject.toml +7 -1
  27. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/src/easyhaproxy/main.py +5 -2
  28. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/src/easymapping/__init__.py +1 -1
  29. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/src/easymapping/config_generator.py +2 -2
  30. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/src/easymapping/label_handler.py +1 -1
  31. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/src/functions/__init__.py +1 -1
  32. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/src/functions/certbot.py +1 -1
  33. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/src/functions/consts.py +1 -1
  34. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/src/functions/container_env.py +2 -1
  35. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/src/functions/filter.py +1 -1
  36. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/src/functions/functions.py +1 -1
  37. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/src/functions/haproxy.py +2 -2
  38. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/src/functions/loggers.py +1 -1
  39. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/src/plugins/__init__.py +1 -1
  40. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/src/plugins/builtin/cloudflare.py +3 -2
  41. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/src/plugins/builtin/jwt_validator.py +1 -1
  42. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/src/plugins/interface.py +1 -1
  43. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/src/plugins/manager.py +1 -1
  44. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/src/plugins/types.py +1 -1
  45. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/src/processor/__init__.py +1 -1
  46. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/src/processor/docker.py +1 -1
  47. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/src/processor/interface.py +3 -3
  48. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/src/processor/kubernetes.py +23 -22
  49. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/src/processor/static.py +1 -1
  50. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/src/processor/swarm.py +1 -1
  51. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/tests/conftest.py +2 -2
  52. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/tests/test_certbot.py +7 -9
  53. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/tests/test_certbot_haproxy_config.py +2 -2
  54. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/tests/test_containerenv.py +10 -1
  55. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/tests/test_daemonize.py +1 -2
  56. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/tests/test_kubernetes_processor.py +114 -49
  57. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/tests/test_plugins.py +28 -6
  58. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/tests_e2e/docker/docker-compose-acme.yml +1 -1
  59. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/tests_e2e/docker/docker-compose-portainer.yml +1 -1
  60. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/tests_e2e/kubernetes/cloudflare.yml +1 -1
  61. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/tests_e2e/kubernetes/ip-whitelist.yml +1 -1
  62. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/tests_e2e/kubernetes/jwt-validator.yml +1 -1
  63. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/tests_e2e/kubernetes/plugins-combined.yml +1 -1
  64. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/tests_e2e/kubernetes/service.yml +1 -1
  65. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/tests_e2e/kubernetes/service_tls.yml +1 -1
  66. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/uv.lock +478 -361
  67. easyhaproxy-6.1.1/CONTRIBUTING.md +0 -36
  68. easyhaproxy-6.1.1/docs/reference/plugins/cloudflare.md +0 -120
  69. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/.dockerignore +0 -0
  70. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/.github/FUNDING.yml +0 -0
  71. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/.github/dependabot.yml +0 -0
  72. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/.gitignore +0 -0
  73. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/.python-version +0 -0
  74. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/.run/pytest in tests.run.xml +0 -0
  75. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/.vscode/launch.json +0 -0
  76. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/.vscode/settings.json +0 -0
  77. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/LICENSE +0 -0
  78. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/Makefile +0 -0
  79. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/build-multiarch.sh +0 -0
  80. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/deploy/docker/Dockerfile +0 -0
  81. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/deploy/docker/assets/entrypoint.sh +0 -0
  82. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/deploy/docker/assets/etc/easyhaproxy/haproxy/conf.d/README.md +0 -0
  83. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/deploy/docker/assets/etc/easyhaproxy/haproxy/errors-custom/400.http +0 -0
  84. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/deploy/docker/assets/etc/easyhaproxy/haproxy/errors-custom/403.http +0 -0
  85. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/deploy/docker/assets/etc/easyhaproxy/haproxy/errors-custom/408.http +0 -0
  86. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/deploy/docker/assets/etc/easyhaproxy/haproxy/errors-custom/500.http +0 -0
  87. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/deploy/docker/assets/etc/easyhaproxy/haproxy/errors-custom/502.http +0 -0
  88. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/deploy/docker/assets/etc/easyhaproxy/haproxy/errors-custom/503.http +0 -0
  89. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/deploy/docker/assets/etc/easyhaproxy/haproxy/errors-custom/504.http +0 -0
  90. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/deploy/docker/assets/etc/easyhaproxy/www/dashboard.html +0 -0
  91. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/deploy/kubernetes/README.md +0 -0
  92. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/docs/concepts/_category_.json +0 -0
  93. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/docs/concepts/index.md +0 -0
  94. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/docs/concepts/limitations.md +0 -0
  95. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/docs/dashboard.png +0 -0
  96. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/docs/dashboard_login.png +0 -0
  97. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/docs/dashboard_thumbnail.png +0 -0
  98. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/docs/easyhaproxy_digitalocean.png +0 -0
  99. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/docs/easyhaproxy_docker.png +0 -0
  100. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/docs/easyhaproxy_dokku.png +0 -0
  101. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/docs/easyhaproxy_helm.png +0 -0
  102. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/docs/easyhaproxy_kubernetes.png +0 -0
  103. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/docs/easyhaproxy_logo.png +0 -0
  104. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/docs/easyhaproxy_microk8s.png +0 -0
  105. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/docs/easyhaproxy_static.png +0 -0
  106. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/docs/easyhaproxy_swarm.png +0 -0
  107. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/docs/getting-started/_category_.json +0 -0
  108. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/docs/getting-started/docker.md +0 -0
  109. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/docs/getting-started/index.md +0 -0
  110. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/docs/getting-started/native.md +0 -0
  111. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/docs/getting-started/static.md +0 -0
  112. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/docs/guides/_category_.json +0 -0
  113. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/docs/guides/dashboard.md +0 -0
  114. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/docs/guides/digitalocean.md +0 -0
  115. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/docs/guides/dokku.md +0 -0
  116. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/docs/guides/microk8s.md +0 -0
  117. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/docs/guides/plugin-development.md +0 -0
  118. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/docs/icons.xcf +0 -0
  119. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/docs/logo.png +0 -0
  120. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/docs/logo.xcf +0 -0
  121. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/docs/reference/_category_.json +0 -0
  122. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/docs/reference/container-labels.md +0 -0
  123. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/docs/reference/other.md +0 -0
  124. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/docs/reference/plugins/_category_.json +0 -0
  125. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/docs/reference/plugins/cleanup.md +0 -0
  126. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/docs/reference/plugins/deny-pages.md +0 -0
  127. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/docs/reference/plugins/fastcgi.md +0 -0
  128. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/docs/reference/plugins/ip-whitelist.md +0 -0
  129. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/docs/reference/plugins/jwt-validator.md +0 -0
  130. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/docs/reference/volumes.md +0 -0
  131. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/docs/video-docker-ssl.png +0 -0
  132. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/docs/video-docker.png +0 -0
  133. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/docs/video-kubernetes-letsencrypt.png +0 -0
  134. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/docs/video-kubernetes.png +0 -0
  135. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/docs/video-static.png +0 -0
  136. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/docs/video-tcp-mysql.png +0 -0
  137. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/helm/easyhaproxy/.helmignore +0 -0
  138. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/helm/easyhaproxy/LICENSE +0 -0
  139. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/helm/easyhaproxy/templates/_helpers.tpl +0 -0
  140. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/helm/easyhaproxy/templates/clusterrole.yaml +0 -0
  141. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/helm/easyhaproxy/templates/clusterrolebinding.yaml +0 -0
  142. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/helm/easyhaproxy/templates/ingressclass.yaml +0 -0
  143. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/helm/easyhaproxy/templates/serviceaccount.yaml +0 -0
  144. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/scripts/bump-version.sh +0 -0
  145. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/src/easyhaproxy/__init__.py +0 -0
  146. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/src/plugins/builtin/__init__.py +0 -0
  147. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/src/plugins/builtin/cleanup.py +0 -0
  148. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/src/plugins/builtin/deny_pages.py +0 -0
  149. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/src/plugins/builtin/fastcgi.py +0 -0
  150. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/src/plugins/builtin/ip_whitelist.py +0 -0
  151. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/src/templates/bind.j2 +0 -0
  152. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/src/templates/frontend-mode-http.j2 +0 -0
  153. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/src/templates/frontend-mode-tcp.j2 +0 -0
  154. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/src/templates/haproxy.cfg.j2 +0 -0
  155. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/src/templates/ssl_default.j2 +0 -0
  156. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/src/templates/ssl_loose.j2 +0 -0
  157. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/src/templates/ssl_strict.j2 +0 -0
  158. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/tests/__init__.py +0 -0
  159. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/tests/expected/docker.txt +0 -0
  160. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/tests/expected/no-services.txt +0 -0
  161. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/tests/expected/services-fcgi.txt +0 -0
  162. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/tests/expected/services-letsencrypt.txt +0 -0
  163. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/tests/expected/services-multi-containers.txt +0 -0
  164. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/tests/expected/services-multiple-hosts.txt +0 -0
  165. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/tests/expected/services-redirect-ssl.txt +0 -0
  166. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/tests/expected/services-tcp.txt +0 -0
  167. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/tests/expected/services.txt +0 -0
  168. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/tests/expected/ssl-loose.txt +0 -0
  169. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/tests/expected/ssl-strict.txt +0 -0
  170. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/tests/expected/static-cors.txt +0 -0
  171. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/tests/expected/static.txt +0 -0
  172. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/tests/fixtures/00_haproxy.cfg +0 -0
  173. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/tests/fixtures/10_haproxy.cfg +0 -0
  174. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/tests/fixtures/no-services +0 -0
  175. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/tests/fixtures/run_bash.sh +0 -0
  176. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/tests/fixtures/services +0 -0
  177. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/tests/fixtures/services-changed-label +0 -0
  178. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/tests/fixtures/services-clone-to-ssl +0 -0
  179. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/tests/fixtures/services-fcgi +0 -0
  180. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/tests/fixtures/services-letsencrypt +0 -0
  181. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/tests/fixtures/services-multi-containers +0 -0
  182. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/tests/fixtures/services-multiple-hosts +0 -0
  183. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/tests/fixtures/services-redirect-ssl +0 -0
  184. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/tests/fixtures/services-tcp +0 -0
  185. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/tests/fixtures/services-with-cloudflare +0 -0
  186. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/tests/fixtures/services-with-deny-pages +0 -0
  187. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/tests/fixtures/services-with-ip-whitelist +0 -0
  188. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/tests/fixtures/services-with-jwt-validator +0 -0
  189. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/tests/fixtures/services-with-multiple-plugins +0 -0
  190. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/tests/fixtures/static.yml +0 -0
  191. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/tests/fixtures/static_cors.yml +0 -0
  192. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/tests/fixtures/static_multi_domain.yml +0 -0
  193. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/tests/test_docker.py +0 -0
  194. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/tests/test_functions.py +0 -0
  195. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/tests/test_labels.py +0 -0
  196. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/tests/test_parser.py +0 -0
  197. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/tests/test_static.py +0 -0
  198. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/tests_e2e/conftest.py +0 -0
  199. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/tests_e2e/docker/AGENTS.md +0 -0
  200. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/tests_e2e/docker/README.md +0 -0
  201. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/tests_e2e/docker/docker-compose-acme-e2e.yml +0 -0
  202. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/tests_e2e/docker/docker-compose-changed-label.yml +0 -0
  203. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/tests_e2e/docker/docker-compose-cloudflare.yml +0 -0
  204. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/tests_e2e/docker/docker-compose-ip-whitelist.yml +0 -0
  205. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/tests_e2e/docker/docker-compose-jwt-validator.yml +0 -0
  206. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/tests_e2e/docker/docker-compose-multi-containers.yml +0 -0
  207. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/tests_e2e/docker/docker-compose-php-fpm.yml +0 -0
  208. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/tests_e2e/docker/docker-compose-plugins-combined.yml +0 -0
  209. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/tests_e2e/docker/docker-compose-portainer-app-example.yml +0 -0
  210. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/tests_e2e/docker/docker-compose-proxy-headers.yml +0 -0
  211. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/tests_e2e/docker/docker-compose.yml +0 -0
  212. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/tests_e2e/docker/pebble-config.json +0 -0
  213. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/tests_e2e/docker/php-app/README.md +0 -0
  214. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/tests_e2e/docker/php-app/index.php +0 -0
  215. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/tests_e2e/docker/php-app/info.php +0 -0
  216. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/tests_e2e/docker/php-app/test-path-info.php +0 -0
  217. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/tests_e2e/fixtures/header-echo/Dockerfile +0 -0
  218. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/tests_e2e/fixtures/header-echo/README.md +0 -0
  219. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/tests_e2e/fixtures/header-echo/server.py +0 -0
  220. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/tests_e2e/generate-keys.sh +0 -0
  221. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/tests_e2e/kubernetes/.gitignore +0 -0
  222. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/tests_e2e/kubernetes/README.md +0 -0
  223. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/tests_e2e/kubernetes/jwt-validator-secret-example.yml +0 -0
  224. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/tests_e2e/kubernetes/setup-cluster.sh +0 -0
  225. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/tests_e2e/kubernetes/teardown-cluster.sh +0 -0
  226. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/tests_e2e/static/README.md +0 -0
  227. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/tests_e2e/static/conf/config-basic.yml +0 -0
  228. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/tests_e2e/static/conf/config-certbot.yml +0 -0
  229. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/tests_e2e/static/conf/config-deny-pages.yml +0 -0
  230. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/tests_e2e/static/conf/config-jwt-validator.yml +0 -0
  231. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/tests_e2e/static/docker-compose.yml +0 -0
  232. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/tests_e2e/swarm/README.md +0 -0
  233. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/tests_e2e/swarm/cloudflare.yml +0 -0
  234. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/tests_e2e/swarm/easyhaproxy.yml +0 -0
  235. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/tests_e2e/swarm/ip-whitelist.yml +0 -0
  236. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/tests_e2e/swarm/jwt-validator.yml +0 -0
  237. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/tests_e2e/swarm/plugins-combined.yml +0 -0
  238. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/tests_e2e/swarm/portainer.yml +0 -0
  239. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/tests_e2e/swarm/services.yml +0 -0
  240. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/tests_e2e/test_docker_compose.py +0 -0
  241. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/tests_e2e/test_kubernetes.py +0 -0
  242. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/tests_e2e/test_proxy_headers.py +0 -0
  243. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/tests_e2e/test_static.py +0 -0
  244. {easyhaproxy-6.1.1 → easyhaproxy-6.2.0}/tests_e2e/test_swarm.py +0 -0
  245. {easyhaproxy-6.1.1 → easyhaproxy-6.2.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.2.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)
@@ -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)
@@ -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.2.0` (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.2.0 | 2026-10-21 | Minor | Ingress status follows a cloud LoadBalancer address, EASYHAPROXY_SERVICE_NAME, Helm chart LoadBalancer Service and certbot persistence |
332
333
  | 6.1.1 | 2026-06-25 | Patch | Add pass_headers support to FastCGI plugin, fix flaky ACME e2e test timeout |
333
334
  | 6.1.0 | 2026-06-24 | Minor | FastCGI protocol support, certbot sidecar plugin, dependency updates |
334
335
  | 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.2.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.5
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.2.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.5
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.2.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.5
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.2.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.5
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.2.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.5
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.2.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.2.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.5
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.2.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.5
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.2.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.5
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.2.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.5
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.2.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.5
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.2.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.2.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.5
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.2.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.5
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.2.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.5
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.2.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.5
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.2.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.5
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.2.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.5
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.2.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.2.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.5
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.2.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.2.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.2.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.2.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).
@@ -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.2.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.2.0
161
161
  volumes:
162
162
  - /var/run/docker.sock:/var/run/docker.sock
163
163
  # REQUIRED: Persist Certbot certificates (ACME)
@@ -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.2.0
87
87
  volumes:
88
88
  - /var/run/docker.sock:/var/run/docker.sock
89
89
  - certs_haproxy:/etc/easyhaproxy/certs/haproxy
@@ -76,6 +76,7 @@ See the [plugins guide](../guides/plugins.md) for available plugins.
76
76
  | Flag | Environment Variable | Default | Description |
77
77
  |--------------------------------------------|--------------------------------------|----------|----------------------------------------------|
78
78
  | `--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` |
79
+ | `--deployment-mode MODE` | `EASYHAPROXY_DEPLOYMENT_MODE` | `auto` | Deployment mode: `auto`, `daemonset`, `nodeport`, `clusterip` |
80
80
  | `--external-hostname HOSTNAME` | `EASYHAPROXY_EXTERNAL_HOSTNAME` | *(none)* | External hostname reported in Ingress status |
81
+ | `--service-name NAME` | `EASYHAPROXY_SERVICE_NAME` | *(none)* | Name of the EasyHAProxy Service (set by the Helm chart) |
81
82
  | `--ingress-status-update-interval SECONDS` | `EASYHAPROXY_STATUS_UPDATE_INTERVAL` | `30` | Interval to update Ingress status |
@@ -42,6 +42,7 @@ These variables apply only when `EASYHAPROXY_DISCOVER=kubernetes`. They control
42
42
  | EASYHAPROXY_UPDATE_INGRESS_STATUS | Update Ingress resources with the load-balancer IP. Set to `false` to disable. | `true` |
43
43
  | 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
44
  | EASYHAPROXY_EXTERNAL_HOSTNAME | Hostname to report in Ingress status when using ClusterIP mode without a cloud LoadBalancer. | *(none)* |
45
+ | 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
46
  | EASYHAPROXY_STATUS_UPDATE_INTERVAL | Seconds between Ingress status update cycles. | `30` |
46
47
 
47
48
  :::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
@@ -58,6 +58,24 @@ Set `service.create: true` and `service.type: NodePort` for most setups. DaemonS
58
58
  | `easyhaproxy.logLevel.haproxy` | Log level for HAProxy | `DEBUG` |
59
59
  | `easyhaproxy.certbot.email` | Email address for Let's Encrypt / ACME registration | `""` |
60
60
 
61
+ ## Certificate Persistence
62
+
63
+ 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.
64
+
65
+ | Value | Description | Default |
66
+ |----------------------------------------|------------------------------------------------------|-----------------|
67
+ | `persistence.certbot.enabled` | Mount a PVC at `/etc/easyhaproxy/certs/certbot` | `false` |
68
+ | `persistence.certbot.existingClaim` | Use this existing PVC instead of creating one | `""` |
69
+ | `persistence.certbot.storageClass` | Storage class of the created PVC. Empty = default. | `""` |
70
+ | `persistence.certbot.accessMode` | Access mode of the created PVC | `ReadWriteOnce` |
71
+ | `persistence.certbot.size` | Size of the created PVC | `1Gi` |
72
+
73
+ :::note
74
+ 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.
75
+
76
+ 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.
77
+ :::
78
+
61
79
  ## Ingress Status
62
80
 
63
81
  Controls how EasyHAProxy updates Kubernetes Ingress resources with load-balancer IPs.
@@ -94,7 +112,7 @@ kubectl label nodes node-01 "easyhaproxy/node=master"
94
112
  | `resources` | CPU/memory requests and limits for the pod | `{}` |
95
113
  | `nodeSelector` | Node selector for pod scheduling | `{}` |
96
114
  | `tolerations` | Tolerations for pod scheduling | `[]` |
97
- | `affinity` | Affinity rules for pod scheduling | `{}` |
115
+ | `affinity` | Affinity rules for pod scheduling. In DaemonSet mode `nodeAffinity` comes from `masterNode`; other keys (e.g. `podAntiAffinity`) are kept. | `{}` |
98
116
  | `podSecurityContext` | Pod-level security context | `{}` |
99
117
  | `securityContext` | Container-level security context | `{}` |
100
118