{"id":16139428,"url":"https://github.com/networkop/flux-capi","last_synced_at":"2026-01-20T12:33:27.209Z","repository":{"id":83590169,"uuid":"282676466","full_name":"networkop/flux-capi","owner":"networkop","description":"Using flux to bootstrap Cluster API workload clusters","archived":false,"fork":false,"pushed_at":"2020-07-26T16:15:24.000Z","size":141,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-06T17:51:57.494Z","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-07-26T15:20:00.000Z","updated_at":"2020-07-26T16:15:26.000Z","dependencies_parsed_at":"2023-07-07T22:00:34.187Z","dependency_job_id":null,"html_url":"https://github.com/networkop/flux-capi","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/networkop/flux-capi","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/networkop%2Fflux-capi","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/networkop%2Fflux-capi/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/networkop%2Fflux-capi/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/networkop%2Fflux-capi/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/networkop","download_url":"https://codeload.github.com/networkop/flux-capi/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/networkop%2Fflux-capi/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28603392,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-20T12:01:53.233Z","status":"ssl_error","status_checked_at":"2026-01-20T12:01:46.545Z","response_time":117,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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:02.704Z","updated_at":"2026-01-20T12:33:27.183Z","avatar_url":"https://github.com/networkop.png","language":"Makefile","funding_links":[],"categories":[],"sub_categories":[],"readme":"# How to use flux to bootstrap Cluster API workload clusters\n\nCluster API workload clusters are deployed with very minimal configuration (only DNS addon is included). However, every cluster requires a number of extra addons to be installed before it can become useful, e.g.:\n\n* CNI plugin\n* Load-balancer controller\n* Ingress controller\n* Monitoring and observability tools\n* Security hardening \n\nThis repository contains a demo of how to use [flux](https://fluxcd.io/) too boostrap a test workload cluster with Calico CNI, MetalLB, NGINX Ingress Controller and a Kubernetes Dashboard.\n\n![](./flux-capi.png)\n\n## Environment setup\n\nTo test things locally, we first need to create a test workload cluster. The following steps will setup a test [CAPD](https://github.com/kubernetes-sigs/cluster-api-provider-docker/) cluster.\n\n1. Create a test \"Management\" kind cluster\n\n```\nmake kind-start\n```\n\n2. Install CAPI+CAPD controllers\n\n```\nmake capi\n```\n\n3. Create a test \"Workload\" CAPD cluster\n\n```\nmake capd\n```\n\nAt this stage the nodes of the CAPD cluster should be in `NOTREADY` state:\n\n```\nkubectl get secret/capd-kubeconfig -o jsonpath={.data.value} \\\n | base64 --decode  \u003e ./capd.kubeconfig\nKUBECONFIG=./capd.kubeconfig kubectl get nodes\n```\n\n## Install flux to manage the remote cluster \n\n```\nhelm repo add fluxcd https://charts.fluxcd.io\nkubectl apply -f ./flux-role.yaml\nhelm install --namespace default -f flux-values.yml flux-capd fluxcd/flux\n```\n\n## Test connectivity to the Kubernetes Dashboard\n\nFind out what IP has been assigned to the ingress:\n\n```\nip=$(KUBECONFIG=./capd.kubeconfig kubectl get ingress -n monitoring dashboard-kubernetes-dashboard -ojson  | jq -r '.status.loadBalancer.ingress[0].ip')\necho $ip\n172.17.0.200\n```\n\nExtract token for the admin user:\n\n```\nuser=$(KUBECONFIG=./capd.kubeconfig kubectl get secret -n monitoring | grep admin-user | awk '{print $1}')\nsecret=$(KUBECONFIG=./capd.kubeconfig kubectl -n monitoring get secret $user -ojson | jq -r '.data.token')\necho $secret | base64 -d\neyJhbGciOiJS...\n```\n\nUse the above secret to authenticate with the k8s dashboard:\n\n![](./dashboard.png)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnetworkop%2Fflux-capi","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnetworkop%2Fflux-capi","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnetworkop%2Fflux-capi/lists"}