{"id":24233849,"url":"https://github.com/memes/nginx-ingress-controller-gke-autopilot","last_synced_at":"2026-02-07T05:31:09.484Z","repository":{"id":162338142,"uuid":"636820965","full_name":"memes/nginx-ingress-controller-gke-autopilot","owner":"memes","description":"Quick demo for NGINX Ingress Controller deployment on private GKE Autopilot clusters","archived":false,"fork":false,"pushed_at":"2025-03-03T06:45:11.000Z","size":62,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-03-04T13:29:24.140Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"HCL","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/memes.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","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":"2023-05-05T18:14:44.000Z","updated_at":"2024-06-17T19:16:16.000Z","dependencies_parsed_at":"2024-02-15T23:28:29.143Z","dependency_job_id":"cd1e16b1-7247-4e5c-8112-93730ec2bce4","html_url":"https://github.com/memes/nginx-ingress-controller-gke-autopilot","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":"memes/repo-template","purl":"pkg:github/memes/nginx-ingress-controller-gke-autopilot","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/memes%2Fnginx-ingress-controller-gke-autopilot","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/memes%2Fnginx-ingress-controller-gke-autopilot/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/memes%2Fnginx-ingress-controller-gke-autopilot/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/memes%2Fnginx-ingress-controller-gke-autopilot/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/memes","download_url":"https://codeload.github.com/memes/nginx-ingress-controller-gke-autopilot/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/memes%2Fnginx-ingress-controller-gke-autopilot/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":267224497,"owners_count":24055914,"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","status":"online","status_checked_at":"2025-07-26T02:00:08.937Z","response_time":62,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":"2025-01-14T16:02:06.580Z","updated_at":"2026-02-07T05:31:09.478Z","avatar_url":"https://github.com/memes.png","language":"HCL","funding_links":[],"categories":[],"sub_categories":[],"readme":"# NGINX Ingress Controller with GKE Autopilot\n\n![GitHub release](https://img.shields.io/github/v/release/memes/nginx-ingress-controller-gke-autopilot?sort=semver)\n![Maintenance](https://img.shields.io/maintenance/yes/2023)\n[![Contributor Covenant](https://img.shields.io/badge/Contributor%20Covenant-2.1-4baaaa.svg)](CODE_OF_CONDUCT.md)\n\n## Usage\n\n### Create the foundations and launch a private GKE Autopilot cluster\n\nWe recommend [Terragrunt] to make sure that resources are created in the right\norder. Straight Terraform can be used but you will be responsible for connecting\nthe output of dependent modules.\n\n1. Copy `terragrunt.hcl.example` to `terragrunt.hcl`\n2. Edit `terragrunt.hcl` to use your GCP project, preferred region, etc.\n3. Execute `terragrunt` in the repo root\n\n   ```shell\n   terragrunt run-all apply\n   ```\n\n4. Launch an IAP tunnel to bastion\n\n   This will provide a local HTTP proxy that can reach the GKE Autopilot masters.\n\n   ```shell\n   eval $(terragrunt run-all --terragrunt-include-dir foundations output -raw tunnel_command)\n   ```\n\n   ```text\n   ...\n   Testing if tunnel connection works.\n   Listening on port [8888].\n   ```\n\n5. Verify the GKE Autopilot cluster can be administered with kubectl\n\n   ```shell\n   kubectl --kubeconfig ./generated/kubeconfig get nodes\n   ```\n\n   ```text\n   NAME                                         STATUS   ROLES    AGE   VERSION\n   gk3-emes-nic-ap-default-pool-0040fa67-vl1p   Ready    \u003cnone\u003e   60m   v1.24.10-gke.2300\n   gk3-emes-nic-ap-default-pool-104cbf31-f8vx   Ready    \u003cnone\u003e   60m   v1.24.10-gke.2300\n   ```\n\n### Populate the private repo\n\n#### Copy the OSS NGINX Ingress Controller to the private repo\n\n```shell\nexport PRIVATE_REPO=\"$(terragrunt run-all --terragrunt-working-dir foundations output -raw repo)\"\ngcrane cp --platform linux/amd64 nginx/nginx-ingress:3.1.1 ${PRIVATE_REPO}/nginx-ingress:3.1.1\n```\n\n```text\n2023/05/05 14:38:16 Copying from nginx/nginx-ingress:3.1.1 to us-west1-docker.pkg.dev/my-project/my-repo/nginx-ingress:3.1.1\n2023/05/05 14:38:20 pushed blob: sha256:3b9dbaacc5a6e08bcc650c8b9e8f38090972ecefdf8064c0413f4c48e9a97a72\n...\n2023/05/05 14:40:31 us-west1-docker.pkg.dev/my-project/my-repo/nginx-ingress:3.1.1: digest: sha256:e9e7222c4592c31ea56457e883f50bbdf2116fee11ecfd6f42353b311f6c8a16 size: 3893\n```\n\n#### Copy the NGINX+ Ingress Controller to the private repo\n\nIf you have purchased a license for NGINX Ingress Controller with NGINX+, copy\nthe files to your private repo. In this example I'm using my NGINX+ JWT key to\ngrant access to NGINX's customer registry.\n\n\u003e NOTE: See [Pulling the Ingress Controller Image](https://docs.nginx.com/nginx-ingress-controller/installation/pulling-ingress-controller-image/) for alternative methods.\n\n1. Login to the NGINX private registry\n\n   ```shell\n   echo none | gcrane auth login --username $(cat ~/path/to/nginx/jwt) --password-stdin private-registry.nginx.com\n   ```\n\n   ```text\n   2023/05/05 15:20:42 logged in via /Users/memes/.docker/config.json\n   ```\n\n2. Copy the NGINX+ Ingress Controller\n\n   ```shell\n   gcrane cp --platform linux/amd64 private-registry.nginx.com/nginx-ic/nginx-plus-ingress:3.1.1 ${PRIVATE_REPO}/nginx-plus-ingress:3.1.1\n   ```\n\n   ```text\n   2023/05/05 15:22:36 Copying from private-registry.nginx.com/nginx-ic/nginx-plus-ingress:3.1.1 to us-west1-docker.pkg.dev/my-project/my-repo/nginx-plus-ingress:3.1.1\n   2023/05/05 15:22:39 existing blob: sha256:b5d25b35c1dbfa256bea3dd164b2048d6c7f8074a555213c493c36f07bf4c559\n   ...\n   2023/05/05 15:23:06 pushed blob: sha256:1776e6398676d9009a4dd9a42db15c158688ca8c8c7a711393b1e140cc69d92f\n   2023/05/05 15:23:06 us-west1-docker.pkg.dev/my-project/my-repo/nginx-plus-ingress@sha256:265a9a23afe415f755f1a5d6bf76e52413fed96cb257548358662c68747a1bcc: digest: sha256:265a9a23afe415f755f1a5d6bf76e52413fed96cb257548358662c68747a1bcc size: 562\n   2023/05/05 15:23:06 us-west1-docker.pkg.dev/my-project/my-repo/nginx-plus-ingress:3.1.1: digest: sha256:5ae45a792ba43406c95a554d76d010ee9a85ef119ee268c02352564eb36695c6 size: 1609\n   ```\n\n### Deploy NGINX OSS Ingress Controller\n\n\u003e NOTE: Make sure the IAP tunnel to bastion is running before executing these\n\u003e commands!\n\n```shell\nkustomize build generated/oss | kubectl --kubeconfig generated/kubeconfig apply -f -\n```\n\n\u003c!-- spell-checker: disable --\u003e\n```text\nnamespace/nginx-ingress configured\ncustomresourcedefinition.apiextensions.k8s.io/globalconfigurations.k8s.nginx.org configured\ncustomresourcedefinition.apiextensions.k8s.io/policies.k8s.nginx.org configured\ncustomresourcedefinition.apiextensions.k8s.io/transportservers.k8s.nginx.org configured\ncustomresourcedefinition.apiextensions.k8s.io/virtualserverroutes.k8s.nginx.org configured\ncustomresourcedefinition.apiextensions.k8s.io/virtualservers.k8s.nginx.org configured\nserviceaccount/nginx-ingress configured\nclusterrole.rbac.authorization.k8s.io/nginx-ingress configured\nclusterrolebinding.rbac.authorization.k8s.io/nginx-ingress configured\nconfigmap/nginx-config configured\nsecret/default-server-secret configured\nservice/nginx-ingress configured\nWarning: Autopilot increased resource requests for Deployment nginx-ingress/nginx-ingress to meet requirements. See http://g.co/gke/autopilot-resources\ndeployment.apps/nginx-ingress configured\ningressclass.networking.k8s.io/nginx configured\n```\n\u003c!-- spell-checker: enable --\u003e\n\n### Deploy NGINX+ Ingress Controller\n\n\u003e NOTE: Make sure the IAP tunnel to bastion is running before executing these\n\u003e commands!\n\n```shell\nkustomize build generated/plus | kubectl --kubeconfig generated/kubeconfig apply -f -\n```\n\n\u003c!-- spell-checker: disable --\u003e\n```text\nnamespace/nginx-ingress configured\ncustomresourcedefinition.apiextensions.k8s.io/globalconfigurations.k8s.nginx.org configured\ncustomresourcedefinition.apiextensions.k8s.io/policies.k8s.nginx.org configured\ncustomresourcedefinition.apiextensions.k8s.io/transportservers.k8s.nginx.org configured\ncustomresourcedefinition.apiextensions.k8s.io/virtualserverroutes.k8s.nginx.org configured\ncustomresourcedefinition.apiextensions.k8s.io/virtualservers.k8s.nginx.org configured\nserviceaccount/nginx-ingress configured\nclusterrole.rbac.authorization.k8s.io/nginx-ingress configured\nclusterrolebinding.rbac.authorization.k8s.io/nginx-ingress configured\nconfigmap/nginx-config configured\nsecret/default-server-secret configured\nservice/nginx-ingress configured\nWarning: Autopilot increased resource requests for Deployment nginx-ingress/nginx-ingress to meet requirements. See http://g.co/gke/autopilot-resources\ndeployment.apps/nginx-ingress configured\ningressclass.networking.k8s.io/nginx configured\n```\n\u003c!-- spell-checker: enable --\u003e\n\n## Cleanup\n\n### Delete the NGINX Ingress Controller from cluster\n\n```shell\nkubectl --kubeconfig generated/kubeconfig delete namespace nginx-ingress\n```\n\n```text\nnamespace \"nginx-ingress\" deleted\n```\n\n### Destroy the infrastructure\n\n```shell\nterragrunt run-all destroy\n```\n\n[terragrunt]: https://terragrunt.gruntwork.io\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmemes%2Fnginx-ingress-controller-gke-autopilot","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmemes%2Fnginx-ingress-controller-gke-autopilot","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmemes%2Fnginx-ingress-controller-gke-autopilot/lists"}