carefree666 opened a new issue, #2665:
URL: https://github.com/apache/apisix-ingress-controller/issues/2665
### Issue description
<p data-start="240" data-end="255">Hi APISIX team,</p>
<p data-start="257" data-end="441">I am trying to expose a Redis Service
(TCP 6379) through APISIX using <strong data-start="327" data-end="351">Gateway
API TCPRoute</strong>, but it does not work in <strong data-start="377"
data-end="407">Standalone API-driven mode</strong> with APISIX Ingress
Controller.</p>
<p data-start="443" data-end="528">I hope to clarify how to correctly enable
TCP/stream routing in this deployment mode.</p>
<hr data-start="530" data-end="533">
<h2 data-start="535" data-end="563"><strong data-start="538"
data-end="563">Deployment & Versions</strong></h2>
<p data-start="565" data-end="584">Installed via Helm:</p>
<pre class="overflow-visible!" data-start="586" data-end="1095"><div
class="contain-inline-size rounded-2xl relative
bg-token-sidebar-surface-primary"><div class="sticky top-9"><div
class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div
class="bg-token-bg-elevated-secondary text-token-text-secondary flex
items-center gap-4 rounded-sm px-2 font-sans text-xs"></div></div></div><div
class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre!
language-bash"><span><span>helm install apisix \
--version 2.12.3 \
--namespace ingress-apisix \
--create-namespace \
--</span><span><span class="hljs-built_in">set</span></span><span>
apisix.deployment.role=traditional \
--</span><span><span class="hljs-built_in">set</span></span><span>
apisix.deployment.role_traditional.config_provider=yaml \
--</span><span><span class="hljs-built_in">set</span></span><span>
etcd.enabled=</span><span><span class="hljs-literal">false</span></span><span> \
--</span><span><span class="hljs-built_in">set</span></span><span>
ingress-controller.enabled=</span><span><span
class="hljs-literal">true</span></span><span> \
--</span><span><span class="hljs-built_in">set</span></span><span>
ingress-controller.config.provider.type=apisix-standalone \
--</span><span><span class="hljs-built_in">set</span></span><span>
ingress-controller.apisix.adminService.namespace=ingress-apisix \
--</span><span><span class="hljs-built_in">set</span></span><span>
ingress-controller.gatewayProxy.createDefault=</span><span><span
class="hljs-literal">true</span></span><span> \
apisix/apisix
</span></span></code></div></div></pre>
<div class="_tableContainer_1rjym_1"><div tabindex="-1" class="group
_tableWrapper_1rjym_13 flex w-fit flex-col-reverse">
Component | Version | Image
-- | -- | --
APISIX | 3.14.1 | apache/apisix:3.14.1-ubuntu
APISIX Ingress Controller | 2.0.0-rc5 |
apache/apisix-ingress-controller:2.0.0-rc5
</div></div>
<p data-start="1445" data-end="1538">Deployment mode: Standalone API-driven
(rules stored in memory, config updates via Admin API)</p>
<hr data-start="1540" data-end="1543">
<h2 data-start="1545" data-end="1578"><strong data-start="1548"
data-end="1578">Gateway / TCPRoute applied</strong></h2>
<pre class="overflow-visible!" data-start="1580" data-end="2582"><div
class="contain-inline-size rounded-2xl relative
bg-token-sidebar-surface-primary"><div class="sticky top-9"><div
class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div
class="bg-token-bg-elevated-secondary text-token-text-secondary flex
items-center gap-4 rounded-sm px-2 font-sans text-xs"></div></div></div><div
class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre!
language-yaml"><span><span><span
class="hljs-attr">apiVersion:</span></span><span> </span><span><span
class="hljs-string">apisix.apache.org/v1alpha1</span></span><span>
</span><span><span class="hljs-attr">kind:</span></span><span>
</span><span><span class="hljs-string">GatewayProxy</span></span><span>
</span><span><span class="hljs-attr">metadata:</span></span><span>
</span><span><span class="hljs-attr">namespace:</span></span><span>
</span><span><span class="hljs-string">demo</span></span><span>
</span><span><span class="hljs-attr">name:</span></span><span>
</span><span><span class="hljs-string">apisix-proxy-config</span></span><span>
</span><span><span class="hljs-attr">spec:</span></span><span>
</span><span><span class="hljs-attr">provider:</span></span><span>
</span><span><span class="hljs-attr">type:</span></span><span>
</span><span><span class="hljs-string">ControlPlane</span></span><span>
</span><span><span class="hljs-attr">controlPlane:</span></span><span>
</span><span><span class="hljs-attr">endpoints:</span></span><span>
</span><span><span class="hljs-bullet">-</span></span><span>
</span><span><span
class="hljs-string">http://apisix-admin.ingress-apisix:9180</span></span><span>
</span><span><span class="hljs-attr">auth:</span></span><span>
</span><span><span class="hljs-attr">type:</span></span><span>
</span><span><span class="hljs-string">AdminKey</span></span><span>
</span><span><span class="hljs-attr">adminKey:</span></span><span>
</span><span><span class="hljs-attr">value:</span></span><span>
</span><span><span
class="hljs-string">"edd1c9f034335f136f87ad84b625c8f1"</span></span><span>
</span><span><span class="hljs-meta">---</span></span><span>
</span><span><span class="hljs-attr">apiVersion:</span></span><span>
</span><span><span
class="hljs-string">gateway.networking.k8s.io/v1</span></span><span>
</span><span><span class="hljs-attr">kind:</span></span><span>
</span><span><span class="hljs-string">Gateway</span></span><span>
</span><span><span class="hljs-attr">metadata:</span></span><span>
</span><span><span class="hljs-attr">namespace:</span></span><span>
</span><span><span class="hljs-string">demo</span></span><span>
</span><span><span class="hljs-attr">name:</span></span><span>
</span><span><span class="hljs-string">apisix</span></span><span>
</span><span><span class="hljs-attr">spec:</span></span><span>
</span><span><span class="hljs-attr">gatewayClassName:</span></span><span>
</span><span><span class="hljs-string">apisix</span></span><span>
</span><span><span class="hljs-attr">listeners:</span></span><span>
</span><span><span class="hljs-bullet">-</span></span><span>
</span><span><span class="hljs-attr">name:</span></span><span>
</span><span><span class="hljs-string">redis</span></span><span>
</span><span><span class="hljs-attr">protocol:</span></span><span>
</span><span><span class="hljs-string">TCP</span></span><span>
</span><span><span class="hljs-attr">port:</span></span><span>
</span><span><span class="hljs-number">6379</span></span><span>
</span><span><span class="hljs-attr">allowedRoutes:</span></span><span>
</span><span><span class="hljs-attr">kinds:</span></span><span>
</span><span><span class="hljs-bullet">-</span></span><span>
</span><span><span class="hljs-attr">kind:</span></span><span>
</span><span><span class="hljs-string">TCPRoute</span></span><span>
</span><span><span class="hljs-attr">infrastructure:</span></span><span>
</span><span><span class="hljs-attr">parametersRef:</span></span><span>
</span><span><span class="hljs-attr">group:</span></span><span>
</span><span><span class="hljs-string">apisix.apache.org</span></span><span>
</span><span><span class="hljs-attr">kind:</span></span><span>
</span><span><span class="hljs-string">GatewayProxy</span></span><span>
</span><span><span class="hljs-attr">name:</span></span><span>
</span><span><span class="hljs-string">apisix-proxy-config</span></span><span>
</span><span><span class="hljs-meta">---</span></span><span>
</span><span><span class="hljs-attr">apiVersion:</span></span><span>
</span><span><span
class="hljs-string">gateway.networking.k8s.io/v1alpha2</span></span><span>
</span><span><span class="hljs-attr">kind:</span></span><span>
</span><span><span class="hljs-string">TCPRoute</span></span><span>
</span><span><span class="hljs-attr">metadata:</span></span><span>
</span><span><span class="hljs-attr">namespace:</span></span><span>
</span><span><span class="hljs-string">demo</span></span><span>
</span><span><span class="hljs-attr">name:</span></span><span>
</span><span><span class="hljs-string">tcp-redis</span></span><span>
</span><span><span class="hljs-attr">spec:</span></span><span>
</span><span><span class="hljs-attr">parentRefs:</span></span><span>
</span><span><span class="hljs-bullet">-</span></span><span>
</span><span><span class="hljs-attr">name:</span></span><span>
</span><span><span class="hljs-string">apisix</span></span><span>
</span><span><span class="hljs-attr">sectionName:</span></span><span>
</span><span><span class="hljs-string">redis</span></span><span>
</span><span><span class="hljs-attr">rules:</span></span><span>
</span><span><span class="hljs-bullet">-</span></span><span>
</span><span><span class="hljs-attr">backendRefs:</span></span><span>
</span><span><span class="hljs-bullet">-</span></span><span>
</span><span><span class="hljs-attr">name:</span></span><span>
</span><span><span class="hljs-string">redis-s3xl</span></span><span>
</span><span><span class="hljs-attr">port:</span></span><span>
</span><span><span class="hljs-number">6379</span></span><span>
</span></span></code></div></div></pre>
<p data-start="2584" data-end="2644">The Gateway and TCPRoute resources are
created successfully.</p>
<hr data-start="2646" data-end="2649">
<h2 data-start="2651" data-end="2675"><strong data-start="2654"
data-end="2675">Observed behavior</strong></h2>
<p data-start="2677" data-end="2708">APISIX logs show the following:</p>
<pre class="overflow-visible!" data-start="2710" data-end="3245"><div
class="contain-inline-size rounded-2xl relative
bg-token-sidebar-surface-primary"><div class="sticky top-9"><div
class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div
class="bg-token-bg-elevated-secondary text-token-text-secondary flex
items-center gap-4 rounded-sm px-2 font-sans text-xs"></div></div></div><div
class="overflow-y-auto p-4" dir="ltr"><code
class="whitespace-pre!"><span><span><span
class="hljs-number">2025</span></span><span><span
class="hljs-operator">-</span></span><span><span
class="hljs-number">11</span></span><span><span
class="hljs-operator">-</span></span><span>28T03:</span><span><span
class="hljs-number">00</span></span><span>:</span><span><span
class="hljs-number">40</span></span><span>.074724339Z </span><span><span
class="hljs-number">192.168</span></span><span>.</span><span><span
class="hljs-number">194.92</span></span><span> </span><span><span
class="hljs-operator">-</span></s
pan><span> </span><span><span class="hljs-operator">-</span></span><span>
[</span><span><span class="hljs-number">28</span></span><span><span
class="hljs-regexp">/Nov/</span></span><span><span
class="hljs-number">2025</span></span><span>:</span><span><span
class="hljs-number">03</span></span><span>:</span><span><span
class="hljs-number">00</span></span><span>:</span><span><span
class="hljs-number">37</span></span><span> </span><span><span
class="hljs-operator">+</span></span><span><span
class="hljs-number">0000</span></span><span>] apisix</span><span><span
class="hljs-operator">-</span></span><span>admin.ingress</span><span><span
class="hljs-operator">-</span></span><span>apisix:</span><span><span
class="hljs-number">9180</span></span><span> </span><span><span
class="hljs-string">"PUT /apisix/admin/configs HTTP/1.1"</span></span><span>
</span><span><span class="hljs-number">204</span></span><span>
</span><span><span class="hljs-number">0</span></span><span> </span><span><span
class=
"hljs-number">0.000</span></span><span> </span><span><span
class="hljs-string">"-"</span></span><span> </span><span><span
class="hljs-string">"axios/1.11.0"</span></span><span>
</span><span><span class="hljs-number">2025</span></span><span><span
class="hljs-operator">-</span></span><span><span
class="hljs-number">11</span></span><span><span
class="hljs-operator">-</span></span><span>28T03:</span><span><span
class="hljs-number">00</span></span><span>:</span><span><span
class="hljs-number">40</span></span><span>.074734797Z </span><span><span
class="hljs-number">192.168</span></span><span>.</span><span><span
class="hljs-number">194.92</span></span><span> </span><span><span
class="hljs-operator">-</span></span><span> </span><span><span
class="hljs-operator">-</span></span><span> [</span><span><span
class="hljs-number">28</span></span><span><span
class="hljs-regexp">/Nov/</span></span><span><span
class="hljs-number">2025</span></span><span>:</span><span><span
class="hljs-number">03</span></span><span>:</span><span><span
class="hljs-number">00</span></span><span>:</span><span><span
class="hljs-number">37</span></span><span> </span><span><span class="hljs-opera
tor">+</span></span><span><span class="hljs-number">0000</span></span><span>]
</span><span><span
class="hljs-number">192.168</span></span><span>.</span><span><span
class="hljs-number">194.95</span></span><span>:</span><span><span
class="hljs-number">9180</span></span><span> </span><span><span
class="hljs-string">"PUT /apisix/admin/configs HTTP/1.1"</span></span><span>
</span><span><span class="hljs-number">400</span></span><span>
</span><span><span class="hljs-number">99</span></span><span>
</span><span><span class="hljs-number">0.000</span></span><span>
</span><span><span class="hljs-string">"-"</span></span><span>
</span><span><span class="hljs-string">"axios/1.11.0"</span></span><span>
</span><span><span class="hljs-number">2025</span></span><span><span
class="hljs-operator">-</span></span><span><span
class="hljs-number">11</span></span><span><span
class="hljs-operator">-</span></span><span>28T03:</span><span><span
class="hljs-number">00</span></span><span>:</span><span><span
class="hljs-number">40</span></span><span>.074739672Z </span><span><span
class="hljs-number">192.168</span></span><span>.</span><span><span
class="hljs-number">194.92</span></span><span> </span><span><span
class="hljs-operator">-</span></span><span> </span><span><span
class="hljs-operator">-</span></span><span> [</span><span><span
class="hljs-number">28</span></span><span><span
class="hljs-regexp">/Nov/</span></span><span><span
class="hljs-number">2025</span></span><span>:</span><span><span
class="hljs-number">03</span></span><span>:</span><span><span
class="hljs-number">00</span></span><span>:</span><span><span
class="hljs-number">37</span></span><span> </span><span><span class="hljs-opera
tor">+</span></span><span><span class="hljs-number">0000</span></span><span>]
apisix</span><span><span
class="hljs-operator">-</span></span><span>admin.ingress</span><span><span
class="hljs-operator">-</span></span><span>apisix:</span><span><span
class="hljs-number">9180</span></span><span> </span><span><span
class="hljs-string">"PUT /apisix/admin/configs HTTP/1.1"</span></span><span>
</span><span><span class="hljs-number">204</span></span><span>
</span><span><span class="hljs-number">0</span></span><span> </span><span><span
class="hljs-number">0.000</span></span><span> </span><span><span
class="hljs-string">"-"</span></span><span> </span><span><span
class="hljs-string">"axios/1.11.0"</span></span><span>
</span></span></code></div></div></pre>
<ul data-start="3247" data-end="3531">
<li data-start="3247" data-end="3356">
<p data-start="3249" data-end="3356">The APISIX Admin API returns <strong
data-start="3278" data-end="3297">400 Bad Request</strong> when the Ingress
Controller pushes TCPRoute configuration.</p>
</li>
<li data-start="3357" data-end="3456">
<p data-start="3359" data-end="3456">APISIX pod only exposes HTTP / HTTPS /
Admin / Control / Status ports (9080/9443/9180/9090/7085).</p>
</li>
<li data-start="3457" data-end="3531">
<p data-start="3459" data-end="3531"><strong data-start="3459"
data-end="3492">No stream listener is started</strong>, so TCP connections to
port 6379 fail.</p>
</li>
</ul>
<hr data-start="3533" data-end="3536">
<h2 data-start="3538" data-end="3563"><strong data-start="3541"
data-end="3563">Problem / Question</strong></h2>
<p data-start="3565" data-end="3579">It seems that:</p>
<ol data-start="3581" data-end="3925">
<li data-start="3581" data-end="3672">
<p data-start="3584" data-end="3672">Standalone API-driven mode <strong
data-start="3611" data-end="3657">does not accept stream / TCP
configuration</strong> via Admin API.</p>
</li>
<li data-start="3673" data-end="3840">
<p data-start="3676" data-end="3840">Gateway API TCPRoute only works if
APISIX Data Plane has <strong data-start="3733" data-end="3760">stream ports
configured</strong>, but in this deployment mode <strong data-start="3790"
data-end="3839">config.yaml is not used or cannot be modified</strong>.</p>
</li>
<li data-start="3841" data-end="3925">
<p data-start="3844" data-end="3925">Ingress Controller cannot dynamically
create stream listeners in Standalone mode.</p>
</li>
</ol>
<p data-start="3927" data-end="3941"><strong data-start="3927"
data-end="3941">Questions:</strong></p>
<ol data-start="3943" data-end="4274">
<li data-start="3943" data-end="4048">
<p data-start="3946" data-end="4048">How can we enable TCP/stream proxy in
<strong data-start="3984" data-end="4014">Standalone API-driven mode</strong>
with APISIX + Ingress Controller?</p>
</li>
<li data-start="4049" data-end="4176">
<p data-start="4052" data-end="4176">Is modifying config.yaml the only way
to open stream listeners, or should Standalone + Gateway API support it
automatically?</p>
</li>
<li data-start="4177" data-end="4274">
<p data-start="4180" data-end="4274">Is there an official recommended way to
expose TCP/Redis in Standalone API-driven deployments?</p>
</li>
</ol>
<p data-start="4276" data-end="4310">Any guidance would be appreciated.</p>
<p data-start="4312" data-end="4319">Thanks!</p>
### Environment
- your apisix-ingress-controller version (output of
apisix-ingress-controller version --long):
- your Kubernetes cluster version (output of kubectl version):
- if you run apisix-ingress-controller in Bare-metal environment, also show
your OS version (uname -a):
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]