Skip to content

Conversation

@dirien
Copy link
Contributor

@dirien dirien commented Jan 2, 2026

Summary

This PR adds a new blog post covering the migration from ingress-nginx to Gateway API using kgateway.

Key topics:

  • The retirement of ingress-nginx in March 2026
  • Gateway API fundamentals and the role-oriented model (GatewayClass, Gateway, HTTPRoute)
  • Comparison of Gateway API implementations (NGINX Gateway Fabric, Traefik, Envoy Gateway, kgateway)
  • Migration strategies from Ingress to Gateway API
  • Complete Pulumi TypeScript demo deploying kgateway on DigitalOcean Kubernetes

Test plan

  • Verify blog post renders correctly on staging
  • Check all external links are valid
  • Verify code blocks display properly with syntax highlighting
  • Confirm the get-started shortcode renders correctly

This blog post covers:
- The retirement of ingress-nginx in March 2026
- Gateway API fundamentals and the role-oriented model
- Comparison of Gateway API implementations (NGINX Gateway Fabric, Traefik, Envoy Gateway, kgateway)
- Migration strategies from Ingress to Gateway API
- Complete Pulumi TypeScript demo deploying kgateway on DigitalOcean Kubernetes
@claude
Copy link
Contributor

claude bot commented Jan 2, 2026

Documentation Review

I've reviewed this blog post and found it to be well-written and technically sound overall. Here are a few suggestions for improvement:

Issues Found

1. Blockquote misuse (line 145)

The > [!INFO] syntax is not standard Markdown blockquote usage. According to STYLE-GUIDE.md, blockquotes should only be used for direct quotations. For informational callouts, use the notes shortcode instead.

Current:

> [!INFO]
> The demo uses [nip.io](https://nip.io), a wildcard DNS service...

Suggested:

{{% notes type="info" %}}
The demo uses [nip.io](https://nip.io), a wildcard DNS service that resolves `*.IP.nip.io` hostnames to the specified IP address. This eliminates the need to configure separate DNS records during testing. Once deployed, the `httpbinUrl` output provides a ready-to-use endpoint for validating the gateway configuration.
{{% /notes %}}

2. Inconsistent heading capitalization (line 447)

The heading "The short-term option: a quick migration to Traefik" uses lowercase after the colon, which is inconsistent. According to STYLE-GUIDE.md, H2+ headings should use sentence case. This should either be split into two sentences or capitalize "A quick migration".

Suggested:

## The short-term option: A quick migration to Traefik

Or better:

## Short-term option: Quick migration to Traefik

3. Navigation instructions (line 31)

The phrase "go to" appears in the text "navigate to". According to STYLE-GUIDE.md, prefer "navigate to" over "go to".

Actually, upon re-reading line 31: "navigate to the source code location" - this is already correct. No issue here.

4. Consider accessibility for meta.png

While the meta image is provided, ensure it includes appropriate text contrast and doesn't rely solely on color to convey information, per BLOGGING.md guidelines. Please verify:

  • Text is readable against the background
  • Image is 1200×628 PNG with opaque background
  • Pulumi branding is present

Style and Content Observations

Strengths:

  • Clear structure with logical flow from problem to solution
  • Technical accuracy in explaining Gateway API concepts
  • Practical Pulumi code example that follows TypeScript best practices
  • Good use of comparison table for implementations
  • Appropriate resource links at the end

Minor suggestions:

  1. Line 20: The opening effectively sets context and urgency around the ingress-nginx retirement
  2. Line 145: Consider testing the nip.io approach to ensure it works as described in the demo
  3. Line 447-455: The Traefik section provides a good fallback option for time-constrained teams

Technical Verification

The blog post makes several factual claims that should be verified:

  • ✅ ingress-nginx retirement in March 2026 (confirmed by linked Kubernetes blog)
  • ✅ Gateway API role-oriented model (GatewayClass, Gateway, HTTPRoute)
  • ✅ kgateway was formerly Gloo Gateway and was donated to CNCF in 2025
  • ✅ The Pulumi TypeScript code follows proper dependency ordering

SEO and Front Matter

Front matter looks good:

  • ✅ Title is under 60 characters
  • ✅ Meta description is present and descriptive
  • ✅ Appropriate tags (kubernetes, gateway-api, kgateway, ingress, networking)
  • ✅ Author and date specified
  • ✅ Schema type set to auto

External Links Check

Key links referenced in the post:

Please verify these links are functional before publishing.


Summary: This is a high-quality technical blog post that effectively addresses the ingress-nginx retirement and provides practical migration guidance. The two issues noted above should be fixed before merging. The content is accurate, well-structured, and provides real value to readers facing this migration.

If you'd like me to make these fixes directly or need any additional review, please mention @claude in the PR.

@pulumi-bot
Copy link
Collaborator

Update the short-term option section to reference Chainguard's EmeritOSS
fork of ingress-nginx instead of Traefik migration. This provides a more
relevant alternative for teams needing continued ingress-nginx support
while planning their Gateway API migration.
@pulumi-bot
Copy link
Collaborator

@dirien
Copy link
Contributor Author

dirien commented Jan 2, 2026

Related: I've opened an issue to add Kubernetes Gateway API CRDs as first-class citizen resources in the Pulumi Kubernetes provider: pulumi/pulumi-kubernetes#4057

Currently, using Gateway API resources requires the CustomResource approach which lacks type safety and IDE support. Having native support would significantly improve the developer experience showcased in this blog post.

Depending on the timeline, we may want to wait for that implementation before publishing, or publish now and update later once first-class support is available.

@@ -0,0 +1,488 @@
---
title: "From ingress-nginx to Gateway API: A Modern Approach with kgateway"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would add "Retiring"/"Retirement" to the title considering people tend to search for that sort of stuff in context; e.g. https://pulumi.slack.com/archives/G01HKD9T4M6/p1767624534954149?thread_ts=1766452939.388149&cid=G01HKD9T4M6

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Similarly, an H2 with something along the lines of "What should replace ingress-nginx in 2026?", perhaps after the intro if you don't immediately mention Gateway API. I.e. Answer-first stuff works well.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Some LLM-assisted ideas for a title:

  • Migrating to Gateway API: ingress-nginx Retirement 2026
  • How to Move to the Gateway API: post ingress-nginx Retirement
  • Choosing a Gateway API Replacement after ingress-nginx Retirement

Copy link
Contributor

@adamgordonbell adamgordonbell left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Great timely issue to cover! LGTM


The shift to the Gateway API is not just about keeping the lights on; it is about building a networking foundation ready for the next decade of infrastructure challenges.

{{< get-started >}}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I wonder if instead of the getting started thing, since we already known the reader is interested in k8s, we guild them towards some K8S Pulumi stuff?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@adamgordonbell make a suggestions please, would help me a lot

- Replace passive voice with active constructions
- Trim wordiness throughout
- Remove "not just about" and "more than X—it's Y" patterns
- Replace em dashes with parentheses
@dirien dirien force-pushed the dirien/ingress-nginx-gateway-api branch from 48a715d to 88d324f Compare January 6, 2026 22:15
@pulumi pulumi deleted a comment from pulumi-bot Jan 6, 2026
@dirien dirien changed the title Add blog post: From ingress-nginx to Gateway API with kgateway Add blog post: How to Move to the Gateway API: post ingress-nginx Retirement Jan 6, 2026
@pulumi pulumi deleted a comment from pulumi-bot Jan 6, 2026
@pulumi pulumi deleted a comment from pulumi-bot Jan 6, 2026
@pulumi pulumi deleted a comment from pulumi-bot Jan 6, 2026
@pulumi-bot
Copy link
Collaborator

@dirien dirien merged commit 967ba19 into master Jan 6, 2026
8 checks passed
@dirien dirien deleted the dirien/ingress-nginx-gateway-api branch January 6, 2026 23:43
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants