{"id":16139419,"url":"https://github.com/networkop/ingress-puzzle","last_synced_at":"2025-04-06T17:43:14.659Z","repository":{"id":83590180,"uuid":"270335085","full_name":"networkop/ingress-puzzle","owner":"networkop","description":null,"archived":false,"fork":false,"pushed_at":"2020-06-14T11:20:33.000Z","size":4,"stargazers_count":2,"open_issues_count":0,"forks_count":1,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-02-12T23:45:07.309Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Makefile","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/networkop.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-06-07T14:42:59.000Z","updated_at":"2020-06-15T17:30:31.000Z","dependencies_parsed_at":"2023-07-07T21:45:12.639Z","dependency_job_id":null,"html_url":"https://github.com/networkop/ingress-puzzle","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/networkop%2Fingress-puzzle","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/networkop%2Fingress-puzzle/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/networkop%2Fingress-puzzle/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/networkop%2Fingress-puzzle/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/networkop","download_url":"https://codeload.github.com/networkop/ingress-puzzle/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247526675,"owners_count":20953141,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-09T23:49:01.439Z","updated_at":"2025-04-06T17:43:14.638Z","avatar_url":"https://github.com/networkop.png","language":"Makefile","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Ingress Puzzle\n\nImagine you have a Kubernetes cluster with three namespaces, each with its own namespace-scoped ingress controller. You've created an ingress in each namespace that exposes a simple web application. You've checked one of them, made sure it works and moved on to other things. However some time later, you get reports that the web app is unavailable. You go to check it again and indeed, the page is not responding, although nothing has changed in the cluster. In fact, you realise the the problem is intermittent - one minute you can access the page, and on the next refresh it's gone. To make things worse, you realise that similar issues affect the other two ingresses. What can it be?\n\n## Rules\n\n* Follow the steps in the walkthrought to setup a local lab environment.\n* Do not look into files in the `./config` directory unless you're out of options.\n* Try to solve the puzzle just by using `kubectl` command, do not use `helm`.\n\n## Walkthrough\n\n1. Build a local test k8s cluster.\n\n```\nmake cluster\n```\n\n2. Create three namespaces.\n\n```\nmake namespaces\n```\n\n3. Create an in-cluster load-balancer (MetalLB) that will allocate IPs from a 100.64.0.0/16 range.\n\n```\nmake load-balancer\n```\n\n4. In each namespace, install a namespace-scoped ingress controller.\n\n\n```\nmake controllers\n```\n\n5. Create a test deployment and expose it via an ingress.\n\n```\nmake ingresses\n```\n\n6. Solve the mystery of misbehaving ingresses.\n\n## Cleanup\n\nTo cleanup all puzzle-related state installed in the cluster do:\n\n```\nmake cleanup\n```\n\nThe state can be recreated with the following commands:\n\n```\nmake controllers \u0026\u0026 make ingresses\n```\n\nTo destroy all state, including the test k8s cluster do:\n\n```\nmake destroy\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnetworkop%2Fingress-puzzle","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnetworkop%2Fingress-puzzle","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnetworkop%2Fingress-puzzle/lists"}