{"id":23956971,"url":"https://github.com/imjoseangel/k8s-gitops","last_synced_at":"2025-10-24T19:38:57.835Z","repository":{"id":252549944,"uuid":"840764981","full_name":"imjoseangel/k8s-gitops","owner":"imjoseangel","description":"ArgoCD Self Managed Repository","archived":false,"fork":false,"pushed_at":"2025-01-01T11:09:04.000Z","size":258,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"devel","last_synced_at":"2025-01-10T02:37:10.314Z","etag":null,"topics":["argocd","gitops","kubernetes"],"latest_commit_sha":null,"homepage":"","language":"Makefile","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/imjoseangel.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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-10T16:04:49.000Z","updated_at":"2025-01-01T11:09:07.000Z","dependencies_parsed_at":"2025-01-01T14:33:32.928Z","dependency_job_id":null,"html_url":"https://github.com/imjoseangel/k8s-gitops","commit_stats":null,"previous_names":["imjoseangel/k8s-gitops"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/imjoseangel%2Fk8s-gitops","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/imjoseangel%2Fk8s-gitops/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/imjoseangel%2Fk8s-gitops/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/imjoseangel%2Fk8s-gitops/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/imjoseangel","download_url":"https://codeload.github.com/imjoseangel/k8s-gitops/tar.gz/refs/heads/devel","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":240466797,"owners_count":19805862,"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":["argocd","gitops","kubernetes"],"created_at":"2025-01-06T16:34:52.318Z","updated_at":"2025-10-24T19:38:57.767Z","avatar_url":"https://github.com/imjoseangel.png","language":"Makefile","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 🚀 ArgoCD Self-Managed Example\n\nThis repository demonstrates how to deploy a self-managed instance of **ArgoCD**. This approach can be used for disaster recovery (DR) in production environments by solving the Chicken and Egg Problem 🐔🥚.\n\n---\n\n## 🎯 Key Features\n\n- **Self-Managed ArgoCD**: Run your own ArgoCD instance for more control.\n- **Disaster Recovery**: Use this setup for production-level DR scenarios.\n- **Kind Cluster**: Easily deploy on a Kind Cluster.\n- **Automatic SSL/TLS Certificates**: Seamlessly manage certificates with cert-manager.\n- **Cloudflare DNS Integration**: Leverage Cloudflare for DNS management and enhanced security.\n- **Argo Workflows**: Manage complex workflows and pipeline orchestration.\n- **Okta SSO Integration**: Secure access to ArgoCD using Okta Single Sign-On (SSO).\n- **Observability**: With Prometheus and CloudProber.\n\n---\n\n## 🛠️ Prerequisites\n\nBefore you begin, ensure you have the following tools installed:\n\n- [Kind](https://kind.sigs.k8s.io/) - A tool for running local Kubernetes clusters using Docker.\n- [kubectl](https://kubernetes.io/docs/tasks/tools/) - Command line tool for interacting with your Kubernetes cluster.\n- [Make](https://www.gnu.org/software/make/) - A tool to simplify the build and deployment process.\n\n---\n\n## 🚀 Deployment Guide\n\nFollow these steps to deploy your ArgoCD instance.\n\n### 1️⃣ Create a Kubernetes Cluster\n\nFirst, you'll need to create a Kubernetes cluster using [Kind](https://kind.sigs.k8s.io/). The configuration below sets up a cluster with Ingress enabled:\n\n```bash\ncat \u003c\u003cEOF | kind create cluster --config=-\nkind: Cluster\napiVersion: kind.x-k8s.io/v1alpha4\nnodes:\n- role: control-plane\n  kubeadmConfigPatches:\n  - |\n    kind: InitConfiguration\n    nodeRegistration:\n      kubeletExtraArgs:\n        node-labels: \"ingress-ready=true\"\n  extraPortMappings:\n  - containerPort: 80\n    hostPort: 80\n    protocol: TCP\n  - containerPort: 443\n    hostPort: 443\n    protocol: TCP\nEOF\n```\n\nFor more details on Kind, check out the [Kind Documentation](https://kind.sigs.k8s.io/docs/user/ingress/)\n\n### 2️⃣ Configure Cloudflare API Token\n\nTo use Cloudflare, you may use **API Tokens**.\n\nTokens can be created at User **Profile \u003e API Tokens \u003e API Tokens**. The following settings are recommended:\n\n- Permissions:\n  - Zone - DNS - Edit\n  - Zone - Zone - Read\n\n- Zone Resources:\n  - Include - All Zones\n\nFirst automate a Kubernetes secret containing the new API token:\n\n```yaml\n---\napiVersion: v1\nkind: Secret\nmetadata:\n  name: cloudflare-api-token-secret\n  namespace: cert-manager\ntype: Opaque\nstringData:\n  api-token: \u003cAPI Token\u003e\n```\n\nMore info at [Cloudflare Documentation](https://cert-manager.io/docs/configuration/acme/dns01/cloudflare/)\n\n### 3️⃣ Configure Okta SSO for ArgoCD\n\nTo secure access to ArgoCD with Okta SSO, follow these steps:\n\n**1. Create an Okta developer account:**\n\nAccess to [Okta Developer](https://developer.okta.com/signup/) and follow the instructions.\n\n**2. Create an Application in Okta:**\n\n- Sign in to your Okta admin dashboard.\n- Navigate to **Applications \u003e Applications** and click **Create App Integration.**\n- Set up the application following the [ArgoCD Documentation](https://argo-cd.readthedocs.io/en/stable/operator-manual/user-management/okta/)\n\nImplement Okta SSO with the following secret:\n\n```yaml\n---\napiVersion: v1\ndata:\n  sso-url: \u003cbase64 url\u003e\n  sso-cer: \u003cbase64 of base64 cer\u003e\nkind: Secret\nmetadata:\n  labels:\n    app.kubernetes.io/component: server\n    app.kubernetes.io/instance: argocd\n    app.kubernetes.io/name: okta-secret\n    app.kubernetes.io/part-of: argocd\n  name: okta-secret\n  namespace: argocd\ntype: Opaque\n```\n\n### 4️⃣ Deploy ArgoCD\n\nOnce your cluster is up and running, deploy ArgoCD using the following command:\n\n```bash\nkubectl kustomize https://github.com/imjoseangel/k8s-gitops/argocd?ref=HEAD | kubectl apply -f -\n```\n\n### 5️⃣  Configure /etc/hosts\n\nTo access the ArgoCD UI locally, you’ll need to add the following entries to your `/etc/hosts` file:\n\n```bash\n127.0.0.1    localhost argocd.imjoseangel.eu.org argo-workflow.imjoseangel.eu.org prometheus.imjoseangel.eu.org\n```\n\n### 6️⃣ Access the ArgoCD UI\n\nOpen your browser and navigate to:\n\n👉 [https://argocd.imjoseangel.eu.org](https://argocd.imjoseangel.eu.org)\n\nLogin with the default credentials:\n\n- **Username:** `admin`\n- **Password:** `password`\n\n\u003e **Note:** You might want to change the password immediately after logging in.\n\nIf Okta is prepared, use the **Login via Okta** button.\n\n### 7️⃣ Verify Deployment\n\nOnce logged in, confirm that all the components are in sync.\n\n### 8️⃣ Access the Argo Workflows UI (Without SSO)\n\nIn this demo, get your token running (SSO with ArgoCD DEX [Recommended](https://argo-workflows.readthedocs.io/en/latest/argo-server-sso-argocd/)):\n\n```bash\necho \"Bearer $(kubectl get secrets -n argo-workflows argo-reader-user.service-account-token -o jsonpath='{.data.token}' | base64 --decode)\"\n```\n\nOpen your browser and navigate to:\n\n👉 [https://argo-workflows.imjoseangel.eu.org](https://argo-workflows.imjoseangel.eu.org)\n\nEnter your token\n\n---\n\n## 📚 Additional Resources\n\n- [ArgoCD Documentation](https://argo-cd.readthedocs.io/en/stable/)\n- [`cert-manager` Documentation](https://cert-manager.io/docs/)\n- [Cloudflare API Documentation](https://developers.cloudflare.com/api/)\n- [CloudProber](https://cloudprober.org/)\n- [Kind Documentation](https://kind.sigs.k8s.io/docs/)\n- [Kubernetes Documentation](https://kubernetes.io/docs/)\n- [Okta Documentation](https://developer.okta.com/docs/guides/)\n- [Prometheus Operator](http://prometheus-operator.dev)\n\n---\n\n## 📦 Makefile\n\nTo simplify your workflow, a `Makefile` is provided to automate common tasks.\n\n### Available Commands\n\n- **Deploy ArgoCD:** Deploys ArgoCD to the cluster.\n\n```bash\nmake deploy\n```\n\n- **Delete ArgoCD:** Deletes ArgoCD from the cluster.\n\n```bash\nmake delete\n```\n\n- **Create K8S Cluster:**  Creates Kind Kubernetes Cluster.\n\n```bash\nmake cluster\n```\n\n- **Destroy K8S Cluster:**  Destroys Kind Kubernetes Cluster.\n\n```bash\nmake destroy\n```\n\n---\n\n## 🛡️ License\n\nThis repository is licensed under the MIT License. See the [LICENSE](LICENSE) file for more details.\n\n---\n\n## 🤝 Contributing\n\nContributions, issues, and feature requests are welcome! Feel free to check the [issues](https://github.com/imjoseangel/k8s-gitops/issues) page.\n\n---\n\n## 🙏 Acknowledgments\n\nSpecial thanks to the contributors of this project for their continuous effort.\n\nEnjoy using ArgoCD! If you encounter any issues, feel free to open an issue on this repository. 😊\n\n---\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fimjoseangel%2Fk8s-gitops","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fimjoseangel%2Fk8s-gitops","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fimjoseangel%2Fk8s-gitops/lists"}