That tool uses client-go to communicate with multi Kubernetes clusters and gets the port of NodePort type service which contains specific annotation. Then modifies the Nginx configuration and reloads the Nginx process.
nginx-conf-generator uses the kubeconfig file for authentication and authorization with Kubernetes cluster. You should ensure that given kubeconfig file has read only access on the target cluster.
Also nginx-conf-generator needs to reload nginx process when necessary, you must run it with root user.
nginx-conf-generator can be customized with several command line arguments:
Usage:
nginx-conf-generator [flags]
Flags:
--custom-annotation string annotation to specify selectable services (default "nginx-conf-generator/enabled")
-h, --help help for nginx-conf-generator
--kubeconfig-paths string comma separated list of kubeconfig file paths to access with the cluster (default "/home/joshsagredo/.kube/config")
--metrics-endpoint string endpoint to provide prometheus metrics (default "/metrics")
--metrics-port int port of the metrics server (default 5000)
--template-input-file string path of the template input file to be able to render and print to --template-output-file (default "resources/ncg.conf.tmpl")
--template-output-file string rendered output file path which is a valid Nginx conf file (default "/etc/nginx/conf.d/ncg.conf")
-v, --verbose verbose output of the logging library (default false)
--version version for nginx-conf-generator
--worker-node-label string label to specify worker nodes (default "worker")
That tool should be run on a Linux host and the user who runs the binary file nginx-conf-generator should have permissions to edit --template-output-file file and reload nginx process using below command:
$ nginx -s reload
If you want to cover multiple kubernetes clusters, add comma seperated list of kubeconfig paths with --kubeconfig-paths argument.
Binary can be downloaded from Releases page.
After then, you can simply run binary by providing required command line arguments:
$ ./nginx-conf-generator --kubeconfig-paths=~/.kube/config1,~/.kube/config2 --custom-annotation nginx-conf-generator/enabled
This project can be installed with Homebrew:
brew tap bilalcaliskan/tap
brew install bilalcaliskan/tap/nginx-conf-generator
This project requires below tools while developing:
- Golang 1.20
- pre-commit
- golangci-lint - required by pre-commit
- gocyclo - required by pre-commit
After you installed pre-commit, simply run below command to prepare your development environment:
$ pre-commit install -c build/ci/.pre-commit-config.yaml
Apache License 2.0