{"id":15775737,"url":"https://github.com/felipelaptrin/private-public-kubernetes-apps","last_synced_at":"2025-07-13T15:33:29.207Z","repository":{"id":253114370,"uuid":"842490763","full_name":"felipelaptrin/private-public-kubernetes-apps","owner":"felipelaptrin","description":"A demo for my blog post about how to deploy public and private applications with Let's Encrypt certificates in a Kubernetes cluster using NGINX Ingress, External DNS and Cert Manager","archived":false,"fork":false,"pushed_at":"2024-08-14T13:58:19.000Z","size":12,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-10-11T17:06:07.325Z","etag":null,"topics":["blog","cert-manager","devbox","external-dns","kubernetes","letsencrypt","load-balancer","nginx-ingress","reflector","vultr"],"latest_commit_sha":null,"homepage":"https://felipetrindade.com/public-private-apps/","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/felipelaptrin.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":"2024-08-14T13:09:56.000Z","updated_at":"2024-09-17T12:13:41.000Z","dependencies_parsed_at":"2024-08-14T15:36:19.021Z","dependency_job_id":null,"html_url":"https://github.com/felipelaptrin/private-public-kubernetes-apps","commit_stats":null,"previous_names":["felipelaptrin/private-public-kubernetes-apps"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/felipelaptrin%2Fprivate-public-kubernetes-apps","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/felipelaptrin%2Fprivate-public-kubernetes-apps/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/felipelaptrin%2Fprivate-public-kubernetes-apps/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/felipelaptrin%2Fprivate-public-kubernetes-apps/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/felipelaptrin","download_url":"https://codeload.github.com/felipelaptrin/private-public-kubernetes-apps/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246484323,"owners_count":20785057,"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":["blog","cert-manager","devbox","external-dns","kubernetes","letsencrypt","load-balancer","nginx-ingress","reflector","vultr"],"created_at":"2024-10-04T17:01:45.230Z","updated_at":"2025-03-31T14:42:47.632Z","avatar_url":"https://github.com/felipelaptrin.png","language":"HCL","funding_links":[],"categories":[],"sub_categories":[],"readme":"# private-public-kubernetes-apps\n\nThis is a demo repository for the [Deploying public and private applications in Kubernetes](https://felipetrindade.com/public-private-apps/) blog post. All detailed information and explanations about this repository can be found in the blog post.\n\n## Running the project\nMake sure you have [Devbox](https://www.jetify.com/devbox) installed. This will manage all the dependencies of the project.\n\n1) Install dependencies of the project\n\n```sh\ndevbox shell\n```\n\n2) Export your Vultr credentials\n\n```sh\nexport VULTR_API_KEY=BRYAAFNWHYEFY2ZHGTQSDZCHEA\n```\n\n3) Create the Kubernetes cluster\n\n```sh\ncd infrastructure\ntofu init\ntofu apply\n```\n\nThis will create the Kubernetes cluster for you using Opentofu.\n\n4) Create kube-config file\n\n```sh\nvultr-cli kubernetes config $(tofu output -raw cluster_id) | base64 -d \u003e\u003e ~/.kube/config\ncd ..\n```\n\n5) Install Kubernetes Reflector\n\n```sh\ndevbox run reflector\n```\n\n6) Create Vultr secrets and namespaces that will be used later\n\n```sh\nkubectl create namespace cert-manager\nkubectl create namespace ingress-nginx\nkubectl create secret generic vultr-credentials -n ingress-nginx --from-literal=apiKey=$VULTR_API_KEY\nkubectl label secret vultr-credentials -n ingress-nginx created-manually=true\nkubectl annotate secret vultr-credentials -n ingress-nginx reflector.v1.k8s.emberstack.com/reflection-auto-namespaces=kube-system,cert-manager\nkubectl annotate secret vultr-credentials -n ingress-nginx reflector.v1.k8s.emberstack.com/reflection-allowed=\"true\"\nkubectl annotate secret vultr-credentials -n ingress-nginx reflector.v1.k8s.emberstack.com/reflection-auto-enabled=\"true\"\n```\n\n7) Install NGINX Ingress\n\n```sh\ndevbox run nginx-ingress\n```\n\n8) Install Cert Manager\n\n```sh\ndevbox run cert-manager\n```\n\nIt might take a while for the certificate to get healthy.\n\n9) Install External-DNS\n\n```sh\ndevbox run external-dns\n```\n\nIt might take a while for records to be created and propagated by the DNS provider.\n\n10) Deploy public application\n\n```sh\ndevbox run public-app\n```\n\nMake sure you can access the public application using your browser.\n\n11) Deploy private application\n\n```sh\ndevbox run private-app\n```\n\nThe private app will be accessible only within the Kubernetes network. You can test this by running:\n\n```sh\nkubectl run curl --image=nginx:alpine\nkubectl exec -it curl -- curl https://private-app.demosfelipetrindade.top\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffelipelaptrin%2Fprivate-public-kubernetes-apps","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffelipelaptrin%2Fprivate-public-kubernetes-apps","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffelipelaptrin%2Fprivate-public-kubernetes-apps/lists"}