{"id":16162526,"url":"https://github.com/sunsided/cluster-playground","last_synced_at":"2026-05-11T07:06:25.378Z","repository":{"id":193189472,"uuid":"688299213","full_name":"sunsided/cluster-playground","owner":"sunsided","description":"A Kubernetes cluster playground with Linkerd and Emissary in kind, terraformed.","archived":false,"fork":false,"pushed_at":"2023-09-07T17:40:39.000Z","size":22,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-02-13T08:28:40.750Z","etag":null,"topics":["ambassador","aspnetcore","dotnet","emissary","kind","kubernetes","linkerd","terraform"],"latest_commit_sha":null,"homepage":"","language":"HCL","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/sunsided.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":"2023-09-07T04:15:17.000Z","updated_at":"2023-09-07T04:16:05.000Z","dependencies_parsed_at":null,"dependency_job_id":"75612393-fd65-470d-8210-59a61081ec53","html_url":"https://github.com/sunsided/cluster-playground","commit_stats":null,"previous_names":["sunsided/cluster-playground"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sunsided%2Fcluster-playground","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sunsided%2Fcluster-playground/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sunsided%2Fcluster-playground/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sunsided%2Fcluster-playground/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sunsided","download_url":"https://codeload.github.com/sunsided/cluster-playground/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247589835,"owners_count":20963022,"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":["ambassador","aspnetcore","dotnet","emissary","kind","kubernetes","linkerd","terraform"],"created_at":"2024-10-10T02:30:38.501Z","updated_at":"2026-05-11T07:06:25.278Z","avatar_url":"https://github.com/sunsided.png","language":"HCL","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ASP.NET Core on Kubernetes (kindly terraformed)\n\n**This is a work in progress.** This project is meant to provide a starting point to experiment with\nASP.NET Core HTTP/2 and HTTP/3 hosting on [linkerd]-meshed [Kubernetes]. [Terraform] files are provided\nto bootstrap a [Kubernetes-in-Docker] cluster, using [Emissary-Ingress] (formerly _Ambassador_) ingress.\n\nCertificates are issued from a self-signed CA managed by [cert-manager] and bundled by [trust-manager]. Specifically,\nLet's Encrypt is not used as an ACME provider since no public internet access is given.\n\n[Kubernetes]: https://kubernetes.io/\n[linkerd]: https://linkerd.io/\n[Terraform]: https://www.terraform.io/\n[cert-manager]: https://cert-manager.io/\n[trust-manager]: https://cert-manager.io/docs/projects/trust-manager\n[Emissary-Ingress]: https://www.getambassador.io/products/api-gateway\n[Kubernetes-in-Docker]: https://kind.sigs.k8s.io/\n\n---\n\nThe kind setup (bootstrapped with Terraform, see below) assumes that services are reachable under the\ndomain `cluster-playground` at port `38080` (HTTP) and `38443` (HTTPS). Specifically, the Linkerd dashboard\nis available at `http://linkerd.cluster-playground:38080` or `https://linkerd.cluster-playground:38443`.\nYou will need to make sure that your DNS contains proper redirects to the IP of the\n`cluster-playground-control-plane` Docker container, which should listen at `0.0.0.0:38080` and `0.0.0.0:38443`\nrespectively. You may want to fiddle with your `/etc/hosts` table.\n\nSee [infrastructure/04_mappings/main.tf](infrastructure/04_mappings/main.tf) for more details.\n\n## Prerequisites\n\n- Terraform\n- Docker\n- KIND, e.g. from [kubernetes-sigs/kind](https://github.com/kubernetes-sigs/kind/releases)\n- Helm\n\n### Installing Terraform\n\nInstall Terraform e.g. via:\n\n```shell\nsnap install terraform\n```\n\nWe'll be making use of the `tehcyx/kind` provider available at [tehcyx/terraform-provider-kind](https://github.com/tehcyx/terraform-provider-kind). \n\n### Installing Helm\n\nInstall helm e.g. via:\n\n```shell\nsnap install helm\n```\n\n## Provisioning the cluster\n\nThe cluster provisioning is split into multiple steps. This is suboptimal but is currently required to decouple\ndependencies between CRDs dynamically created in one step but statically verified in another.\n\nFirst, create the kind cluster. This first needs to pull the [kindest/node](https://hub.docker.com/r/kindest/node/)\nDocker image, which may take some time.\n\n```shell\ncd infastructure/01_kind\nterraform init\nterraform plan -out kind.tfplan\nTF_LOG=info terraform apply kind.tfplan\n```\n\nNext, provision namespaces and CRDs, cert-manager, trust-manager, etc.:\n\n```shell\ncd infastructure/02_crds\nterraform init\nterraform plan -out crds.tfplan\nTF_LOG=info terraform apply crds.tfplan\n```\n\nNext, provision linkerd, Emissary, etc.:\n\n```shell\ncd infastructure/03_linkerd\nterraform init\nterraform plan -out linkerd.tfplan\nTF_LOG=info terraform apply linkerd.tfplan\n```\n\nFinally, provision service mappings for Emissary, additional certificates, etc.:\n\n```shell\ncd infastructure/04_mappings\nterraform init\nterraform plan -out mappings.tfplan\nTF_LOG=info terraform apply mappings.tfplan\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsunsided%2Fcluster-playground","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsunsided%2Fcluster-playground","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsunsided%2Fcluster-playground/lists"}