{"id":19121874,"url":"https://github.com/rurumimic/node-on-kube","last_synced_at":"2026-04-11T19:06:38.606Z","repository":{"id":47833009,"uuid":"274060775","full_name":"rurumimic/node-on-kube","owner":"rurumimic","description":null,"archived":false,"fork":false,"pushed_at":"2022-12-10T09:40:08.000Z","size":220,"stargazers_count":2,"open_issues_count":6,"forks_count":1,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-01-03T08:29:26.504Z","etag":null,"topics":["db","istio","kubernetes","nginx","node"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","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/rurumimic.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}},"created_at":"2020-06-22T06:46:10.000Z","updated_at":"2022-01-25T02:00:59.000Z","dependencies_parsed_at":"2023-01-26T00:30:44.713Z","dependency_job_id":null,"html_url":"https://github.com/rurumimic/node-on-kube","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/rurumimic%2Fnode-on-kube","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rurumimic%2Fnode-on-kube/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rurumimic%2Fnode-on-kube/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rurumimic%2Fnode-on-kube/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rurumimic","download_url":"https://codeload.github.com/rurumimic/node-on-kube/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":240177051,"owners_count":19760308,"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":["db","istio","kubernetes","nginx","node"],"created_at":"2024-11-09T05:18:52.466Z","updated_at":"2025-10-07T04:33:20.850Z","avatar_url":"https://github.com/rurumimic.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Node on Kube\n\n1. Setup\n2. Service Mesh\n   - Istio\n3. Database\n   - MariaDB\n   - Persistent storage\n4. Backend\n   - app: node.js\n   - reverse proxy: nginx\n5. Ingress\n   - ingress controller\n     - istio gateway\n     - ingress-nginx\n   - secret: certificates\n   - deploy ingress\n   - (option) mutual authentication\n6. Test\n7. Horizontal Pod Autoscaler\n8. Destroy k8s applications\n9. Tip\n\n---\n\n## Setup\n\n### Docker Desktop\n\n[Docker Desktop for Mac Edge release notes](https://docs.docker.com/docker-for-mac/edge-release-notes/)\n\n- Docker 19+\n- Docker Compose 1.26+\n- Kubernetes 1.18+ (for Kubernetes Metrics Server)\n\nSettings:\n\n1. Resources (for Istio)\n   - CPUs: 4\n   - Memory: 8GB\n1. Enable Kubernetes\n\n### /etc/hosts\n\n```bash\n127.0.0.1 example.localhost\n```\n\n---\n\n## Istio\n\n### (First time only) Add label\n\n```bash\nkubectl label namespace default istio-injection=enabled\n```\n\n### (First time only) Install\n\n```bash\ncurl -L https://istio.io/downloadIstio | sh -\ncd istio-1.6.3\n```\n\n### Export PATH\n\n```bash\nexport PATH=$PWD/bin:$PATH\n```\n\n### Install a profile\n\n```bash\nistioctl install --set profile=demo\n```\n\n---\n\n## Database\n\n### MariaDB\n\n```bash\nkubectl apply -f db/mariadb/configmap.yml;\nkubectl apply -f db/mariadb/volume.yml;\nkubectl apply -f db/mariadb/deploy.yml;\n```\n\n### Insert data from dump files\n\n```bash\nkubectl exec -i $(kubectl get pod --selector=app=mariadb --template '{{range .items}}{{.metadata.name}}{{end}}') -c db \\\n-- sh -c 'exec mysql -umaster -pmypw' \u003c db/mariadb/data/dump.sql\n```\n\nRead [Setup MariaDB](db/mariadb/README.md)\n\n---\n\n## Backend\n\n### Build Node.js Docker Image\n\n```bash\ndocker build -t node-app backend/app\n```\n\n### Deploy Backend Service\n\n```bash\nkubectl apply -f backend/proxy/configmap.yml;\nkubectl apply -f backend/deploy.yml;\n```\n\n---\n\n## Ingress\n\n### Istio Ingress Secure Gateway\n\n1. [Set IP and Port](ingress/istio/README.md#set-ip-and-port)\n2. [Create certificates](ingress/istio/README.md#create-certificates)\n3. Create a gateway and a virtual service:\n\n```bash\nkubectl apply -f ingress/istio/gateway.yml;\n```\n\nCheck ingress settings:\n\n```bash\nistioctl analyze;\n\n✔ No validation issues found when analyzing namespace: default.\n```\n\n### NGINX Ingress Controller for Kubernetes\n\n- [kubernetes/ingress-nginx](https://github.com/kubernetes/ingress-nginx)\n- [Installation Guide](https://kubernetes.github.io/ingress-nginx/deploy/#contents)\n\n#### (First time only) Install a ingress controller\n\n##### Docker for Mac\n\n```bash\nkubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/provider/cloud/deploy.yaml\n```\n\nUsing [other platforms](#install-a-ingress-controller-with-other-platforms): \n- minikube\n- Helm 2\n\n#### Verify Installation\n\n```bash\nkubectl get pods -n ingress-nginx -l app.kubernetes.io/name=ingress-nginx --watch\n```\n\nOnce the ingress controller pods are running, you can cancel the command typing `Ctrl+C`.\n\n### Basic Ingress: TLS \n\n#### SSL Certificate\n\nRead [Ingress Secret](ingress/ingress-nginx/basic/README.md#ingress-secret)\n\nCreate the Secret:\n\n```bash\nkubectl apply -f ingress/ingress-nginx/basic/secret.yml\n```\n\n#### Deploy Ingress\n\n```bash\nkubectl apply -f ingress/ingress-nginx/basic/ingress.yml\n```\n\n### (Option) Auth Ingress: Client Certificate Authentication\n\nRead [Client Certificate Authentication: Mutual Authentication](ingress/ingress-nginx/mutual/README.md)\n\n---\n\n## Test\n\n### CURL\n\n```bash\ncurl -v -HHost:example.localhost --resolve \"example.localhost:443:127.0.0.1\" \\\n--cacert ingress/istio/certs/example.localhost.crt \"https://example.localhost:443\"\n\nHTTP/2 200\n```\n\n### Open a browser\n\nOpen [http://example.localhost](http://example.localhost)\n\nIt is automatically redirected to HTTPS.\n\n### Init containers\n\nRead [Init Containers](docs/init.containers.md)\n\n1. Open [http://example.localhost/wiki/bauhaus.html](http://example.localhost/wiki/bauhaus.html).\n1. Compare with [Wikipedia: Bauhaus](https://en.wikipedia.org/wiki/Bauhaus).\n\n### Kiali\n\n- Username: admin\n- Password: admin\n\n```bash\nistioctl dashboard kiali\n```\n\n1. Left menu: Graph\n1. Namespace: default\n\n---\n\n## Horizontal Pod Autoscaler\n\nRead [Horizontal Pod Autoscaler](docs/horizontal.pod.autoscaler.md)\n\n---\n\n## Destroy Kube application\n\n### Ingress\n\n#### Istio Gateway\n\n```bash\nkubectl delete -n istio-system secret gateway-secret;\nkubectl delete -f ingress/istio/gateway.yml;\n```\n\n```bash\nistioctl manifest generate --set profile=demo | kubectl delete -f -\n```\n\n#### ingress-nginx\n\n```bash\nkubectl delete -f ingress/basic/ingress.yml;\nkubectl delete -f ingress/basic/secret.yml;\n```\n\n**Docker for Mac**\n\n```bash\nkubectl delete -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/provider/cloud/deploy.yaml\n```\n\n### Backend\n\n```bash\nkubectl delete -f backend/deploy.yml;\nkubectl delete -f backend/proxy/configmap.yml;\n```\n\n### MariaDB\n\n```bash\nkubectl delete -f db/mariadb/deploy.yml;\nkubectl delete -f db/mariadb/volume.yml;\nkubectl delete -f db/mariadb/configmap.yml;\n```\n\n---\n\n## Tip\n\n### Object List\n\n```bash\nkubectl get deploy # deployments, deployment\nkubectl get svc    # services, service\nkubectl get ep     # endpoints, \nkubectl get rs     # replicasets, replicaset\nkubectl get po     # pods\nkubectl get ing    # ingress\n```\n\n### Network\n\n```bash\ncurl -X GET backend-service:80;\ncurl -X GET backend-service.default:80;\ncurl -X GET backend-service.default.svc:80;\ncurl -X GET backend-service.default.svc.cluster.local:80;\n```\n\n---\n\n## Appendix\n\n### Ingress\n\n#### Install a ingress controller with other platforms\n\n##### minikube\n\nFor standard usage:\n\n```bash\nminikube addons enable ingress\n```\n\nFor development:\n\n```bash\n# Disable the ingress addon:\nminikube addons disable ingress\nmake dev-env\nkubectl get pods -n ingress-nginx\n```\n\n##### Helm 2\n\n```bash\nhelm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx/\nhelm install --name ingress-nginx ingress-nginx/ingress-nginx\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frurumimic%2Fnode-on-kube","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frurumimic%2Fnode-on-kube","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frurumimic%2Fnode-on-kube/lists"}