<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Kubernetes Gateway API With NginxGateway]]></title><description><![CDATA[Kubernetes Gateway API With NginxGateway]]></description><link>https://kubernetes-gateway-api-with-nginxgateway.hashnode.dev</link><generator>RSS for Node</generator><lastBuildDate>Sat, 24 Oct 2026 13:14:43 GMT</lastBuildDate><atom:link href="https://kubernetes-gateway-api-with-nginxgateway.hashnode.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Deploying a Production-Ready Gateway API with NGINX Gateway Fabric and Cert-Manager]]></title><description><![CDATA[The Kubernetes Gateway API is the modern evolution of Ingress—offering better security, extensibility, and multi-route support. In this guide, we deploy…]]></description><link>https://kubernetes-gateway-api-with-nginxgateway.hashnode.dev/deploying-a-production-ready-gateway-api-with-nginx-gateway-fabric-and-cert-manager</link><guid isPermaLink="true">https://kubernetes-gateway-api-with-nginxgateway.hashnode.dev/deploying-a-production-ready-gateway-api-with-nginx-gateway-fabric-and-cert-manager</guid><category><![CDATA[Kubernetes]]></category><category><![CDATA[Devops]]></category><dc:creator><![CDATA[Sharath Veerapaneni]]></dc:creator><pubDate>Sun, 30 Nov 2025 14:00:12 GMT</pubDate><content:encoded><![CDATA[<p>The Kubernetes <strong>Gateway API</strong> is the modern evolution of Ingress—offering better security, extensibility, and multi-route support. In this guide, we deploy the <strong>Gateway API v1.3.0</strong>, set up the <strong>NGINX Gateway Fabric</strong>, expose an NGINX application, and secure it using <strong>cert-manager</strong> with <strong>Let’s Encrypt</strong>. This is a complete, production-grade setup.</p>
<h2 id="heading-architecture-overview"><strong>🧱 Architecture Overview</strong></h2>
<p>We will deploy:</p>
<ul>
<li><p>Gateway API CRDs (v1.3.0)</p>
</li>
<li><p>NGINX Gateway Fabric</p>
</li>
<li><p>Nginx application</p>
</li>
<li><p>Gateway + HTTPRoute</p>
</li>
<li><p>cert-manager</p>
</li>
<li><p>Let’s Encrypt ClusterIssuer</p>
</li>
<li><p>Certificate</p>
</li>
<li><p>ACME HTTP-01 challenge routing</p>
</li>
</ul>
<h2 id="heading-1-install-gateway-api-crds"><strong>1. Install Gateway API CRDs</strong></h2>
<pre><code class="lang-plaintext">kubectl apply -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.3.0/experimental-install.yaml
</code></pre>
<h2 id="heading-2-install-nginx-gateway-fabric"><strong>2. Install NGINX Gateway Fabric</strong></h2>
<pre><code class="lang-plaintext">kubectl apply -f https://github.com/nginx/nginx-gateway-fabric/blob/v2.2.1/deploy/default/deploy.yaml
</code></pre>
<h2 id="heading-3-deploy-a-sample-nginx-app"><strong>3. Deploy a Sample NGINX App</strong></h2>
<pre><code class="lang-plaintext">apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-app
  namespace: default
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx-app
  template:
    metadata:
      labels:
        app: nginx-app
    spec:
      containers:
      - name: nginx
        image: nginx:alpine
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: nginx-service
  namespace: default
spec:
  selector:
    app: nginx-app
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
</code></pre>
<h2 id="heading-4-create-a-gateway-http-https"><strong>4. Create a Gateway (HTTP + HTTPS)</strong></h2>
<pre><code class="lang-plaintext">apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
  name: dev-gateway
  namespace: nginx-gateway
spec:
  gatewayClassName: nginx
  listeners:
  - name: http
    port: 80
    protocol: HTTP
    allowedRoutes:
      namespaces:
        from: All
  - name: https
    port: 443
    protocol: HTTPS
    tls:
      mode: Terminate
      certificateRefs:
      - name: appcertificate
    allowedRoutes:
      namespaces:
        from: All
</code></pre>
<h2 id="heading-5-create-httproute"><strong>5. Create HTTPRoute</strong></h2>
<pre><code class="lang-plaintext">apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
  name: nginx-route
  namespace: default
spec:
  parentRefs:
  - name: dev-gateway
    namespace: nginx-gateway
  hostnames:
  - "nginx.com"
  rules:
  - matches:
    - path:
        type: PathPrefix
        value: /
    backendRefs:
    - name: nginx-service
      port: 80
</code></pre>
<h2 id="heading-6-install-cert-manager"><strong>6. Install cert-manager</strong></h2>
<pre><code class="lang-plaintext">kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.13.0/cert-manager.yaml
</code></pre>
<h2 id="heading-7-create-clusterissuer"><strong>7. Create ClusterIssuer</strong></h2>
<pre><code class="lang-plaintext">apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: letsencrypt-prod
spec:
  acme:
    server: https://acme-v02.api.letsencrypt.org/directory
    email: your-email@example.com
    privateKeySecretRef:
      name: letsencrypt-prod
    solvers:
    - http01:
        ingress:
          class: nginx
</code></pre>
<h2 id="heading-8-create-certificate"><strong>8. Create Certificate</strong></h2>
<pre><code class="lang-plaintext">apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
  name: appcertificate
  namespace: nginx-gateway
spec:
  secretName: appcertificate
  dnsNames:
  - "nginx.com"
  issuerRef:
    name: letsencrypt-prod
    kind: ClusterIssuer
</code></pre>
<h2 id="heading-9-acme-http-01-challenge-route"><strong>9. ACME HTTP-01 Challenge Route</strong></h2>
<pre><code class="lang-plaintext">apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
  name: acme-challenge
  namespace: nginx-gateway
spec:
  parentRefs:
  - name: dev-gateway
    namespace: nginx-gateway
  hostnames:
  - "nginx.nginx.com"
  rules:
  - matches:
    - path:
        type: PathPrefix
        value: /.well-known/acme-challenge/
    backendRefs:
    - name: cm-acme-http-solver-xxxxx
      kind: Service
      port: 8089
</code></pre>
<h2 id="heading-10-verification"><strong>10. Verification</strong></h2>
<pre><code class="lang-plaintext">kubectl get gateway -A
kubectl get httproute -A
kubectl get certificate -n nginx-gateway
kubectl get svc -n nginx-gateway my-gateway-nginx
</code></pre>
<p>Test:</p>
<pre><code class="lang-plaintext">curl -H "Host: nginx..com" http://EXTERNAL_IP
curl https://nginx.com
</code></pre>
<h2 id="heading-conclusion"><strong>🎉 Conclusion</strong></h2>
<p>You now have:</p>
<ul>
<li><p>Gateway API</p>
</li>
<li><p>NGINX Gateway Fabric</p>
</li>
<li><p>HTTPRoute + HTTPS</p>
</li>
<li><p>Cert-manager + Let’s Encrypt</p>
</li>
</ul>
]]></content:encoded></item></channel></rss>