Skip to content

ACP-53164 Add Ingress to Gateway migration how-to#787

Merged
jing2uo merged 1 commit into
alauda:mainfrom
woodgear:feat/ACP-53164-ing2gw-kb
Jun 11, 2026
Merged

ACP-53164 Add Ingress to Gateway migration how-to#787
jing2uo merged 1 commit into
alauda:mainfrom
woodgear:feat/ACP-53164-ing2gw-kb

Conversation

@woodgear

@woodgear woodgear commented Jun 11, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Add a knowledge How To for migrating Kubernetes Ingress traffic to Gateway API with Envoy Gateway on ACP.
  • Document the migration mapping model: ingress controller entry to Gateway, Ingress to HTTPRoute.
  • Cover rewrite limitations, HTTPS backend migration with Envoy Gateway Backend, MetalLB VIP reuse, front load balancer smooth cutover, and hostNetwork options.

Verification

  • git diff --no-index --check /dev/null docs/en/solutions/How_to_Migrate_Ingress_to_Gateway_API_with_Envoy_Gateway_on_ACP.md || test $? -eq 1
  • rg -n "frontend-plugins|marketplace|cpaas-system|cluster-proxy|apollo|erebus|192\.168|business-1|console-plugins|TODO|TBD|FIXME|REPLACEME|changeme" docs/en/solutions/How_to_Migrate_Ingress_to_Gateway_API_with_Envoy_Gateway_on_ACP.md; test $? -eq 1
  • yarn build

Note: yarn build exits 0. The build still prints existing Rspress/search-index relative URL warnings, which do not fail the build.

Summary by CodeRabbit

  • Documentation
    • Added a comprehensive migration guide for transitioning from Kubernetes Ingress to Gateway API with Envoy Gateway, including resource mapping, prerequisites, step-by-step conversion instructions, annotation reference tables, cutover strategies, validation procedures, and troubleshooting guidance.

@coderabbitai

coderabbitai Bot commented Jun 11, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Walkthrough

This pull request adds a comprehensive migration guide (736 lines) detailing how to transition Kubernetes Ingress resources to Gateway API resources backed by Envoy Gateway on Alauda Container Platform. The guide covers resource mapping, prerequisites, prerequisites and target architecture, step-by-step migration chapters, cutover planning with multiple exposure options, validation procedures, rollback strategies, troubleshooting, and reference materials.

Changes

Ingress to Gateway API Migration Guide for ACP

Layer / File(s) Summary
Introduction, prerequisites, and target architecture
docs/en/solutions/How_to_Migrate_Ingress_to_Gateway_API_with_Envoy_Gateway_on_ACP.md
Document metadata, overview of resource mapping (Ingress controller → Gateway, Ingress → HTTPRoute, HTTPS backends → Backend), prerequisites for ACP/Envoy Gateway setup, and recommended target layout with example shared Gateway configuration and EnvoyProxy LoadBalancer exposure.
Migration foundation: inventory and automated tool setup
docs/en/solutions/How_to_Migrate_Ingress_to_Gateway_API_with_Envoy_Gateway_on_ACP.md
Chapter 1 instructs exporting existing Ingress/Services/Secrets and recording behavioral details. Chapter 2 describes installing ingress2gateway to generate initial manifests and reviewing tool limitations.
Field and annotation conversion with worked examples
docs/en/solutions/How_to_Migrate_Ingress_to_Gateway_API_with_Envoy_Gateway_on_ACP.md
Chapter 3 maps core Ingress fields to Gateway API equivalents with HTTPRoute example and status checking. Chapter 4 provides annotation mapping tables and detailed YAML examples for HTTP→HTTPS redirects, prefix/regex rewrites via HTTPRouteFilter/ExtensionRef, and HTTPS backend configuration with CA certificate setup.
Path precedence, cutover strategies, validation, and operational handoff
docs/en/solutions/How_to_Migrate_Ingress_to_Gateway_API_with_Envoy_Gateway_on_ACP.md
Chapter 5 specifies Gateway API path matching precedence rules and RE2 requirements. Chapter 6 details three cutover options behind a front load balancer (hostNetwork with port offset, hostNetwork standard ports, NodePort) with configuration and constraint guidance. Chapter 7 covers validation procedures and operational cutover sequence. Chapter 8 provides rollback guidance via traffic steering.
Troubleshooting and reference materials
docs/en/solutions/How_to_Migrate_Ingress_to_Gateway_API_with_Envoy_Gateway_on_ACP.md
Troubleshooting section maps common symptoms (route acceptance, TLS, backend protocol, redirects, regex, affinity, reachability) to diagnostic checks. References link to Gateway API migration docs, ingress2gateway tools, Kubernetes blog posts, and ACP documentation.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Suggested reviewers

  • oilbeater
  • fanzy618
  • black89757

Poem

🐰 A guide so clear, step by step we go,
From Ingress paths to Gateway's glow,
With cutover plans and rollback care,
Your clusters migrate through the air! ✨

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately summarizes the main change—adding a how-to guide for migrating Ingress to Gateway API with Envoy Gateway on ACP—which is directly reflected in the file addition.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🧹 Nitpick comments (2)
docs/en/solutions/How_to_Migrate_Ingress_to_Gateway_API_with_Envoy_Gateway_on_ACP.md (2)

62-64: 💤 Low value

Consider varying sentence structure for better flow.

Three consecutive sentences start with "Use". While technically correct, varying the sentence structure would improve readability.

✍️ Optional style improvement
-  Use `allowedRoutes.namespaces.from: Same` for private Gateways.
-  Use `allowedRoutes.namespaces.from: Selector` for shared Gateways so only intended project namespaces can attach routes.
-  Use `NodePort` only when there is no LoadBalancer provider and make sure users access the NodePort value, not the listener port.
+  For private Gateways, set `allowedRoutes.namespaces.from: Same`.
+  For shared Gateways, use `allowedRoutes.namespaces.from: Selector` so only intended project namespaces can attach routes.
+  Choose `NodePort` only when there is no LoadBalancer provider, and make sure users access the NodePort value, not the listener port.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@docs/en/solutions/How_to_Migrate_Ingress_to_Gateway_API_with_Envoy_Gateway_on_ACP.md`
around lines 62 - 64, The three consecutive bullet points all start with "Use",
which reduces readability; rephrase them to vary sentence openings and improve
flow by converting one or two into imperative or explanatory forms and combining
related ideas where appropriate—for example, change "Use NodePort only..." to
"Reserve NodePort for environments without a LoadBalancer provider and ensure
users connect to the NodePort value rather than the listener port," change "Use
hostNetwork only..." to "Enable hostNetwork only for special compatibility or
performance scenarios and pin Envoy pods to selected nodes to avoid port
conflicts," and reword the third sentence to lead with the scenario (e.g., "When
a front load balancer already exposes a stable external IP, retain that IP on
the front load balancer and migrate by changing only its backend targets; the
Gateway data plane can then run behind the front load balancer using hostNetwork
or NodePort") so the bullets no longer all begin with "Use."

Source: Linters/SAST tools


289-289: 💤 Low value

Table row contains pipe character in regex pattern that may confuse parsers.

The regex pattern /shop(/|$) contains a pipe | character. While it's inside backticks, some Markdown parsers may misinterpret it as a table column separator.

🔧 Optional fix to escape the pipe character
-| Regex capture rewrite such as `/shop(/|$)(.*)` to `/$2` | Review manually. Standard `HTTPRoute` `URLRewrite` only supports `ReplaceFullPath` and `ReplacePrefixMatch`; it cannot express arbitrary capture substitution. Use an Envoy Gateway extension or policy resource, such as `HTTPRouteFilter` with `ReplaceRegexMatch`, when the behavior is required. |
+| Regex capture rewrite such as `/shop(/\|$)(.*)` to `/$2` | Review manually. Standard `HTTPRoute` `URLRewrite` only supports `ReplaceFullPath` and `ReplacePrefixMatch`; it cannot express arbitrary capture substitution. Use an Envoy Gateway extension or policy resource, such as `HTTPRouteFilter` with `ReplaceRegexMatch`, when the behavior is required. |

Or use HTML entity:

-| Regex capture rewrite such as `/shop(/|$)(.*)` to `/$2` | Review manually. Standard `HTTPRoute` `URLRewrite` only supports `ReplaceFullPath` and `ReplacePrefixMatch`; it cannot express arbitrary capture substitution. Use an Envoy Gateway extension or policy resource, such as `HTTPRouteFilter` with `ReplaceRegexMatch`, when the behavior is required. |
+| Regex capture rewrite such as `/shop(/&`#124`;$)(.*)` to `/$2` | Review manually. Standard `HTTPRoute` `URLRewrite` only supports `ReplaceFullPath` and `ReplacePrefixMatch`; it cannot express arbitrary capture substitution. Use an Envoy Gateway extension or policy resource, such as `HTTPRouteFilter` with `ReplaceRegexMatch`, when the behavior is required. |
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@docs/en/solutions/How_to_Migrate_Ingress_to_Gateway_API_with_Envoy_Gateway_on_ACP.md`
at line 289, The table row containing the regex `/shop(/|$)(.*)` can confuse
Markdown table parsers because of the unescaped pipe character; update the table
cell that currently reads "Regex capture rewrite such as `/shop(/|$)(.*)` to
`/$2`" to escape the pipe or use an HTML entity or code tag—for example replace
`/shop(/|$)(.*)` with `/shop(/&`#124`;$)(.*)` or `/shop(/\|$)(.*)` (or wrap the
pattern in an HTML <code>…</code> element) so the table columns render
correctly; leave the surrounding explanation mentioning HTTPRoute, URLRewrite,
ReplaceFullPath, ReplacePrefixMatch and the guidance to use
HTTPRouteFilter/ReplaceRegexMatch unchanged.

Source: Linters/SAST tools

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Nitpick comments:
In
`@docs/en/solutions/How_to_Migrate_Ingress_to_Gateway_API_with_Envoy_Gateway_on_ACP.md`:
- Around line 62-64: The three consecutive bullet points all start with "Use",
which reduces readability; rephrase them to vary sentence openings and improve
flow by converting one or two into imperative or explanatory forms and combining
related ideas where appropriate—for example, change "Use NodePort only..." to
"Reserve NodePort for environments without a LoadBalancer provider and ensure
users connect to the NodePort value rather than the listener port," change "Use
hostNetwork only..." to "Enable hostNetwork only for special compatibility or
performance scenarios and pin Envoy pods to selected nodes to avoid port
conflicts," and reword the third sentence to lead with the scenario (e.g., "When
a front load balancer already exposes a stable external IP, retain that IP on
the front load balancer and migrate by changing only its backend targets; the
Gateway data plane can then run behind the front load balancer using hostNetwork
or NodePort") so the bullets no longer all begin with "Use."
- Line 289: The table row containing the regex `/shop(/|$)(.*)` can confuse
Markdown table parsers because of the unescaped pipe character; update the table
cell that currently reads "Regex capture rewrite such as `/shop(/|$)(.*)` to
`/$2`" to escape the pipe or use an HTML entity or code tag—for example replace
`/shop(/|$)(.*)` with `/shop(/&`#124`;$)(.*)` or `/shop(/\|$)(.*)` (or wrap the
pattern in an HTML <code>…</code> element) so the table columns render
correctly; leave the surrounding explanation mentioning HTTPRoute, URLRewrite,
ReplaceFullPath, ReplacePrefixMatch and the guidance to use
HTTPRouteFilter/ReplaceRegexMatch unchanged.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 8a52db00-d1cd-4f78-a8df-ae247b858c74

📥 Commits

Reviewing files that changed from the base of the PR and between 6206281 and 0d15630.

📒 Files selected for processing (1)
  • docs/en/solutions/How_to_Migrate_Ingress_to_Gateway_API_with_Envoy_Gateway_on_ACP.md

@jing2uo jing2uo merged commit f081931 into alauda:main Jun 11, 2026
2 checks passed
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.

2 participants