{"id":214,"date":"2026-02-25T00:00:19","date_gmt":"2026-02-25T00:00:19","guid":{"rendered":"https:\/\/blog.simulakrum.vpndns.org\/?p=214"},"modified":"2026-02-25T00:01:23","modified_gmt":"2026-02-25T00:01:23","slug":"garage-webui-accessing-garagehq-in-k8s","status":"publish","type":"post","link":"https:\/\/blog.simulakrum.vpndns.org\/?p=214","title":{"rendered":"garage-webui accessing garagehq in k8s"},"content":{"rendered":"\n<p>I&#8217;ve set up the GarageHQ instead of the MinIO that recently went south with the licencing, but it took me a while to set up a garage-webui, a Web-GUI for GarageHQ.<br><br>It seems to be primarily described as a tool to be used in docker-composer, so when it came to making it play nicely with GarageHQ in k8s with Istio on top, several problems occurred. To enforce it within k8s, you need to reach GarageHQ&#8217;s admin port, but the service exposes only s3-api (3900) and s3-web (3902) ports by default. Fortunately, the logs of a running GarageHQ pod disclose that the admin port is exposed automatically in the very pod:<br><br><code>2026-02-24T23:29:45.811741Z INFO garage_model::garage: Initialize K2V RPC handler\u2026<br>2026-02-24T23:29:45.811779Z INFO garage::server: Initializing background runner\u2026<br>2026-02-24T23:29:45.811880Z INFO garage::server: Spawning Garage workers\u2026<br>2026-02-24T23:29:45.811962Z INFO garage::server: Initialize Admin API server and metrics collector\u2026<br>2026-02-24T23:29:45.811974Z INFO garage::server: Launching internal Garage cluster communications\u2026<br>2026-02-24T23:29:45.811994Z INFO garage::server: Initializing S3 API server\u2026<br>2026-02-24T23:29:45.812003Z INFO garage::server: Initializing web server\u2026<br>2026-02-24T23:29:45.812018Z INFO garage::server: Launching Admin API server\u2026<br>2026-02-24T23:29:45.812070Z INFO garage_net::netapp: Listening on [::]:3901<br>2026-02-24T23:29:45.812107Z INFO garage_api_common::generic_server: S3 API server listening on http:\/\/[::]:3900<br>2026-02-24T23:29:45.812155Z INFO garage_web::web_server: Web server listening on http:\/\/[::]:3902<br>2026-02-24T23:29:45.812185Z INFO garage_api_common::generic_server: Admin API server listening on http:\/\/[::]:3903<\/code><\/p>\n\n\n\n<p><br>so it was enough to add the service in the service template and prepare the values for it in the values-file:<br><img loading=\"lazy\" decoding=\"async\" width=\"1500\" height=\"1344\" class=\"wp-image-215\" style=\"width: 1500px;\" src=\"https:\/\/blog.simulakrum.vpndns.org\/wp-content\/uploads\/2026\/02\/Screenshot-2026-02-25-at-00.40.32.png\" alt=\"\" srcset=\"https:\/\/blog.simulakrum.vpndns.org\/wp-content\/uploads\/2026\/02\/Screenshot-2026-02-25-at-00.40.32.png 1065w, https:\/\/blog.simulakrum.vpndns.org\/wp-content\/uploads\/2026\/02\/Screenshot-2026-02-25-at-00.40.32-300x269.png 300w, https:\/\/blog.simulakrum.vpndns.org\/wp-content\/uploads\/2026\/02\/Screenshot-2026-02-25-at-00.40.32-1024x917.png 1024w, https:\/\/blog.simulakrum.vpndns.org\/wp-content\/uploads\/2026\/02\/Screenshot-2026-02-25-at-00.40.32-768x688.png 768w\" sizes=\"auto, (max-width: 1500px) 100vw, 1500px\" \/><\/p>\n\n\n\n<p>to have the garage and the webui start playing nicely together:<br><img loading=\"lazy\" decoding=\"async\" width=\"1500\" height=\"769\" class=\"wp-image-216\" style=\"width: 1500px;\" src=\"https:\/\/blog.simulakrum.vpndns.org\/wp-content\/uploads\/2026\/02\/Screenshot-2026-02-25-at-00.38.08.png\" alt=\"\" srcset=\"https:\/\/blog.simulakrum.vpndns.org\/wp-content\/uploads\/2026\/02\/Screenshot-2026-02-25-at-00.38.08.png 1854w, https:\/\/blog.simulakrum.vpndns.org\/wp-content\/uploads\/2026\/02\/Screenshot-2026-02-25-at-00.38.08-300x154.png 300w, https:\/\/blog.simulakrum.vpndns.org\/wp-content\/uploads\/2026\/02\/Screenshot-2026-02-25-at-00.38.08-1024x525.png 1024w, https:\/\/blog.simulakrum.vpndns.org\/wp-content\/uploads\/2026\/02\/Screenshot-2026-02-25-at-00.38.08-768x394.png 768w, https:\/\/blog.simulakrum.vpndns.org\/wp-content\/uploads\/2026\/02\/Screenshot-2026-02-25-at-00.38.08-1536x787.png 1536w\" sizes=\"auto, (max-width: 1500px) 100vw, 1500px\" \/><br><\/p>\n\n\n\n<p>The Web-GUI then starts working properly, because now it can reach the GarageHQ via the newly exposed service, that was not there by default:<br><img loading=\"lazy\" decoding=\"async\" width=\"1500\" height=\"549\" class=\"wp-image-217\" style=\"width: 1500px;\" src=\"https:\/\/blog.simulakrum.vpndns.org\/wp-content\/uploads\/2026\/02\/Screenshot-2026-02-25-at-00.57.20.png\" alt=\"\" srcset=\"https:\/\/blog.simulakrum.vpndns.org\/wp-content\/uploads\/2026\/02\/Screenshot-2026-02-25-at-00.57.20.png 1832w, https:\/\/blog.simulakrum.vpndns.org\/wp-content\/uploads\/2026\/02\/Screenshot-2026-02-25-at-00.57.20-300x110.png 300w, https:\/\/blog.simulakrum.vpndns.org\/wp-content\/uploads\/2026\/02\/Screenshot-2026-02-25-at-00.57.20-1024x374.png 1024w, https:\/\/blog.simulakrum.vpndns.org\/wp-content\/uploads\/2026\/02\/Screenshot-2026-02-25-at-00.57.20-768x281.png 768w, https:\/\/blog.simulakrum.vpndns.org\/wp-content\/uploads\/2026\/02\/Screenshot-2026-02-25-at-00.57.20-1536x562.png 1536w\" sizes=\"auto, (max-width: 1500px) 100vw, 1500px\" \/><\/p>\n\n\n\n<p>Happy hacking!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>I&#8217;ve set up the GarageHQ instead of the MinIO that recently went south with the licencing, but it took me a while to set up a garage-webui, a Web-GUI for GarageHQ. It seems to be primarily described as a tool to be used in docker-composer, so when it came to making it play nicely with GarageHQ in k8s with Istio &hellip;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-214","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/blog.simulakrum.vpndns.org\/index.php?rest_route=\/wp\/v2\/posts\/214","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.simulakrum.vpndns.org\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.simulakrum.vpndns.org\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.simulakrum.vpndns.org\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.simulakrum.vpndns.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=214"}],"version-history":[{"count":2,"href":"https:\/\/blog.simulakrum.vpndns.org\/index.php?rest_route=\/wp\/v2\/posts\/214\/revisions"}],"predecessor-version":[{"id":219,"href":"https:\/\/blog.simulakrum.vpndns.org\/index.php?rest_route=\/wp\/v2\/posts\/214\/revisions\/219"}],"wp:attachment":[{"href":"https:\/\/blog.simulakrum.vpndns.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=214"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.simulakrum.vpndns.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=214"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.simulakrum.vpndns.org\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=214"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}