You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在GKE中使用ingress-nginx暴露UDP服务失败的排查求助

在GKE中使用ingress-nginx控制器暴露UDP服务的问题

我需要关于在Google Kubernetes Engine(GKE)中使用ingress-nginx控制器暴露UDP服务的指导。按照官方文档通过ConfigMap方法在本地minikube上部署时可正常访问,但部署到GKE后,通过ingress控制器服务的IP无法访问该UDP服务。

已确认的配置信息

控制器端口映射

我确认控制器的端口(1053和15353)已正确映射:

NAMESPACE       NAME                                 TYPE           CLUSTER-IP      EXTERNAL-IP     PORT(S)                                                     AGE
ingress-nginx   ingress-nginx-controller             LoadBalancer   10.51.252.115   <redacted>      80:32307/TCP,443:30514/TCP,1053:32764/UDP,15353:31385/UDP   54d

集群与防火墙配置

集群是通过google_container_cluster Terraform模块默认配置创建的,控制器处理HTTPS流量正常。我注意到自动生成的防火墙规则仅允许指定端口的TCP流量,而非UDP,手动添加UDP防火墙规则后问题仍未解决:

NAME                                          NETWORK                        DIRECTION  PRIORITY  ALLOW                              DENY  DISABLED
k8s-fw-a62a982b26a034e0e97258af6717b8b0       cluster-network-labs-us-west1  INGRESS    1000      tcp:80,tcp:443,tcp:1053,tcp:15353        False

测试用服务端与客户端代码

我部署了一个简单的UDP ping-pong服务器,在本地裸机和minikube上通过ingress-nginx控制器均可正常工作,但在GKE的相同配置下客户端请求超时。

服务端代码

package server

import (
    "fmt"
    "net"
    "os"
    "time"

    "github.com/spf13/cobra"
)

func response(udpServer net.PacketConn, addr net.Addr, buf []byte) {

    fmt.Println("msg", string(buf))

    time := time.Now().Format(time.ANSIC)
    responseStr := fmt.Sprintf("%v. msg: %v", time, string(buf))

    udpServer.WriteTo([]byte(responseStr), addr)
}

var Command = &cobra.Command{
    Use:   "server",
    Short: "Debug UDP server.",
    Long:  `Provides a UDP server endpoint which responds to pings.`,
    RunE: func(cmd *cobra.Command, args []string) error {

        udpServer, err := net.ListenPacket("udp", fmt.Sprintf(":%d", serverPort))
        if err != nil {
            return err
        }
        defer udpServer.Close()

        fmt.Fprintf(os.Stdout, "listening :%d\n", serverPort)

        for {
            buf := make([]byte, 1024)
            _, addr, err := udpServer.ReadFrom(buf)
            if err != nil {
                continue
            }
            go response(udpServer, addr, buf)
        }

    },
}

var serverPort int

func init() {
    Command.PersistentFlags().IntVar(&serverPort, "port", 1053, "Port to open an listen for UDP packets")
}

客户端代码

package client

import (
    "fmt"
    "net"
    "os"

    "github.com/spf13/cobra"
)

var Command = &cobra.Command{
    Use:   "client",
    Short: "Debug UDP client.",
    Long:  `Provides a UDP client endpoint which responds to pings.`,
    RunE: func(cmd *cobra.Command, args []string) error {

        udpServer, err := net.ResolveUDPAddr("udp", fmt.Sprintf("%s:%d", queryHost, queryPort))

        if err != nil {
            return err
        }

        conn, err := net.DialUDP("udp", nil, udpServer)
        if err != nil {
            return err
        }
        defer conn.Close()

        _, err = conn.Write([]byte(msg))
        if err != nil {
            return err
        }

        received := make([]byte, 1024)
        _, err = conn.Read(received)
        if err != nil {
            println("Read data failed:", err.Error())
            os.Exit(1)
        }

        println(string(received))

        return nil
    },
}

var msg string
var queryHost string
var queryPort int

func init() {

    Command.PersistentFlags().StringVar(&msg, "msg", "echo", "Message used to send ping/pong requests over UDP")
    Command.PersistentFlags().StringVar(&queryHost, "host", "127.0.0.1", "Host used to send ping/pong requests over UDP")
    Command.PersistentFlags().IntVar(&queryPort, "port", 1053, "Port used to send ping/pong requests over UDP")
}

版本信息

  • ingress-nginx helm chart - 4.4.0
  • ingress-nginx - 1.5.1
  • Kubernetes - v1.24.5-gke.600
  • registry.terraform.io/hashicorp/google - v4.43.0

是否有人遇到过类似问题,或能提供进一步排查的方向?谢谢!


内容的提问来源于stack exchange,提问作者Marcin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 03:25:17