{"id":44103199,"url":"https://github.com/conradwt/k8s-gateway-api-using-kong","last_synced_at":"2026-02-08T14:37:45.003Z","repository":{"id":245992368,"uuid":"819772507","full_name":"conradwt/k8s-gateway-api-using-kong","owner":"conradwt","description":null,"archived":false,"fork":false,"pushed_at":"2025-09-24T03:21:03.000Z","size":134,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-09-24T05:27:21.156Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":null,"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/conradwt.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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-06-25T07:11:45.000Z","updated_at":"2025-09-24T03:21:03.000Z","dependencies_parsed_at":"2025-03-23T03:19:56.381Z","dependency_job_id":"7fd5973c-7fc4-4c1c-8931-31e5cae79cd6","html_url":"https://github.com/conradwt/k8s-gateway-api-using-kong","commit_stats":null,"previous_names":["conradwt/k8s-gateway-api-using-kong"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/conradwt/k8s-gateway-api-using-kong","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/conradwt%2Fk8s-gateway-api-using-kong","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/conradwt%2Fk8s-gateway-api-using-kong/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/conradwt%2Fk8s-gateway-api-using-kong/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/conradwt%2Fk8s-gateway-api-using-kong/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/conradwt","download_url":"https://codeload.github.com/conradwt/k8s-gateway-api-using-kong/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/conradwt%2Fk8s-gateway-api-using-kong/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29233477,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-08T14:18:14.570Z","status":"ssl_error","status_checked_at":"2026-02-08T14:18:14.071Z","response_time":57,"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":"2026-02-08T14:37:44.927Z","updated_at":"2026-02-08T14:37:44.990Z","avatar_url":"https://github.com/conradwt.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# K8s Gateway API Using Kong\n\nThe purpose of this example is to provide instructions for running the K8s Gatewey API using Kong.\n\n## Software Requirements\n\n- Helm v3.19.0 or newer\n\n- Kubernetes v1.33.4 or newer\n\n- Minikube v1.36.0 or newer\n\n- OrbStack 2.0.1 or newer\n\nNote: This tutorial was updated on macOS 26 (Tahoe). The below steps don't work with Docker Desktop v4.43.2 because it doesn't expose Linux VM IP addresses to the host OS (i.e. macOS).\n\n## Tutorial Installation\n\n1.  clone GitHub repository\n\n    ```zsh\n    git clone https://github.com/conradwt/k8s-gateway-api-using-kong.git\n    ```\n\n2.  change directory\n\n    ```zsh\n    cd k8s-gateway-api-using-kong\n    ```\n\n3.  create Minikube cluster\n\n    ```zsh\n    minikube start -p gateway-api-kong --nodes=3 --kubernetes-version=v1.33.4\n    minikube profile gateway-api-kong\n    ```\n\n4.  enable strict ARP mode\n\n    ```zsh\n    # see what changes would be made, returns nonzero returncode if different\n    kubectl get configmap kube-proxy -n kube-system -o yaml | \\\n    sed -e \"s/strictARP: false/strictARP: true/\" | \\\n    kubectl diff -f - -n kube-system\n    ```\n\n    ```zsh\n    # actually apply the changes, returns nonzero returncode on errors only\n    kubectl get configmap kube-proxy -n kube-system -o yaml | \\\n    sed -e \"s/strictARP: false/strictARP: true/\" | \\\n    kubectl apply -f - -n kube-system\n    ```\n\n5.  install MetalLB\n\n    ```zsh\n    kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.15.2/config/manifests/metallb-native.yaml\n    ```\n\n6.  locate the K8s cluster's subnet\n\n    ```zsh\n    docker network inspect gateway-api-kong | jq '.[0].IPAM.Config[0][\"Subnet\"]'\n    ```\n\n    The results should look something like the following:\n\n    ```json\n    \"194.1.2.0/24\"\n    ```\n\n    Then one can use an IP address range like the following:\n\n    ```\n    194.1.2.100-194.1.2.110\n    ```\n\n7.  create the `01-metallb-address-pool.yaml` file\n\n    ```zsh\n    cp 01-metallb-address-pool.yaml.example 01-metallb-address-pool.yaml\n    ```\n\n8.  update the `01-metallb-address-pool.yaml`\n\n    ```yaml\n    apiVersion: metallb.io/v1beta1\n    kind: IPAddressPool\n    metadata:\n      name: demo-pool\n      namespace: metallb-system\n    spec:\n      addresses:\n        - 194.1.2.100-194.1.2.110\n    ```\n\n    Note: The IP range needs to be in the same range as the K8s cluster, `gateway-api-kong`.\n\n9.  apply the address pool manifest\n\n    ```zsh\n    kubectl apply -f 01-metallb-address-pool.yaml\n    ```\n\n10. apply Layer 2 advertisement manifest\n\n    ```zsh\n    kubectl apply -f 02-metallb-advertise.yaml\n    ```\n\n11. apply service manifest\n\n    ```zsh\n    kubectl apply -f 03-nginx-service-loadbalancer.yaml\n    ```\n\n12. apply deployment manifest\n\n    ```zsh\n    kubectl apply -f 04-nginx-deployment.yaml\n    ```\n\n13. check that your service has an IP address\n\n    ```zsh\n    kubectl get svc nginx-service\n    ```\n\n    The results should look something like the following:\n\n    ```text\n    NAME            TYPE           CLUSTER-IP       EXTERNAL-IP      PORT(S)        AGE\n    nginx-service   LoadBalancer   10.106.207.172   194.1.2.100   80:32000/TCP   17h\n    ```\n\n14. test connectivity to `nginx-service` endpoint via external IP address\n\n    ```zsh\n    curl 194.1.2.100\n    ```\n\n    The results should look something like the following:\n\n    ```text\n    \u003c!DOCTYPE html\u003e\n    \u003chtml\u003e\n    \u003chead\u003e\n    \u003ctitle\u003eWelcome to nginx!\u003c/title\u003e\n    \u003cstyle\u003e\n    html { color-scheme: light dark; }\n    body { width: 35em; margin: 0 auto;\n    font-family: Tahoma, Verdana, Arial, sans-serif; }\n    \u003c/style\u003e\n    \u003c/head\u003e\n    \u003cbody\u003e\n    \u003ch1\u003eWelcome to nginx!\u003c/h1\u003e\n    \u003cp\u003eIf you see this page, the nginx web server is successfully installed and\n    working. Further configuration is required.\u003c/p\u003e\n\n    \u003cp\u003eFor online documentation and support please refer to\n    \u003ca href=\"http://nginx.org/\"\u003enginx.org\u003c/a\u003e.\u003cbr/\u003e\n    Commercial support is available at\n    \u003ca href=\"http://nginx.com/\"\u003enginx.com\u003c/a\u003e.\u003c/p\u003e\n\n    \u003cp\u003e\u003cem\u003eThank you for using nginx.\u003c/em\u003e\u003c/p\u003e\n    \u003c/body\u003e\n    \u003c/html\u003e\n    ```\n\n15. install the Gateway API CRDs\n\n    ```zsh\n    kubectl apply -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.3.0/standard-install.yaml\n    ```\n\n16. create the Gateway and GatewayClass resources\n\n    ```zsh\n    kubectl apply -f 05-gateway.yaml\n    ```\n\n17. install Kong\n\n    ```zsh\n    helm repo add kong https://charts.konghq.com\n    helm repo update\n    ```\n\n18. install Kong Ingress Controller and Kong Gateway\n\n    ```zsh\n    helm install kong kong/ingress -n kong --create-namespace\n    ```\n\n19. populate $GATEWAY_IP for future commands:\n\n    ```zsh\n    export GATEWAY_IP=$(kubectl get svc --namespace kong kong-gateway-proxy -o jsonpath='{.status.loadBalancer.ingress[0].ip}')\n    echo $GATEWAY_IP\n    ```\n\n20. verify the gateway IP\n\n    ```zsh\n    curl -i $GATEWAY_IP\n    ```\n\n    The results should look something like the following:\n\n    ```text\n    HTTP/1.1 404 Not Found\n    Content-Type: application/json; charset=utf-8\n    Connection: keep-alive\n    Content-Length: 48\n    X-Kong-Response-Latency: 0\n    Server: kong/3.0.0\n\n    {\"message\":\"no Route matched with those values\"}\n    ```\n\n21. deploy the X service\n\n    # TODO rewrite for our defined service.\n\n    ```zsh\n    kubectl apply -f 06-sample-service.yaml\n    ```\n\n22. create HTTPRoute for our deployed service\n\n    # TODO rewrite for our defined service.\n\n    ```zsh\n    kubectl apply -f 07-sample-httproute.yaml\n    ```\n\n23. test the routing rule\n\n    # TODO rewrite for our defined service.\n\n    ```zsh\n    curl -i $GATEWAY_IP/echo\n    ```\n\n    The results should look like this:\n\n    ```text\n    HTTP/1.1 200 OK\n    Content-Type: text/plain; charset=utf-8\n    Content-Length: 140\n    Connection: keep-alive\n    Date: Fri, 21 Apr 2023 12:24:55 GMT\n    X-Kong-Upstream-Latency: 0\n    X-Kong-Proxy-Latency: 1\n    Via: kong/3.2.2\n\n    Welcome, you are connected to node docker-desktop.\n    Running on Pod echo-7f87468b8c-tzzv6.\n    In namespace default.\n    With IP address 10.1.0.237.\n    ...\n    ```\n\n24. teardown the cluster\n\n    ```zsh\n    minikube delete --profile gateway-api-kong\n    ```\n\n## References\n\n- https://docs.konghq.com/kubernetes-ingress-controller/3.2.x/get-started\n- https://github.com/Kong/go-echo\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fconradwt%2Fk8s-gateway-api-using-kong","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fconradwt%2Fk8s-gateway-api-using-kong","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fconradwt%2Fk8s-gateway-api-using-kong/lists"}