go - 如何为 golang tcp 服务器配置 GKE 负载均衡器?

标签 go tcp kubernetes google-kubernetes-engine

部署golang服务器容器和gke负载均衡器后,我可以成功连接到负载均衡器的外部ip,但没有数据到达服务器容器。

当我在本地运行服务器容器并将客户端指向本地主机时,它按预期工作。我将其更改为服务于 http 请求,并且它在相同的 kubernetes list 上运行良好。但是,如果我尝试同时提供 tcp 和 http(在不同的端口上),那么在 gke 上都不起作用,但在本地又可以正常工作。所以我怀疑这可能与我配置负载均衡器的方式或我在服务器中监听 tcp 连接的方式有关,这在 gke 上而非本地运行时会中断某些事情。

K8s 服务 list

apiVersion: v1
kind: Service
metadata:
  name: steel-server-service
spec:
  type: LoadBalancer
  selector:
    app: steel-server
  ports:
  - protocol: TCP
    name: tcp
    port: 12345
    targetPort: 12345

K8s 部署 list

apiVersion: apps/v1
kind: Deployment
metadata:
  name: steel-server-deployment
  labels:
    app: steel-server
spec:
  replicas: 1
  selector:
    matchLabels:
      app: steel-server
  template:
    metadata:
      labels:
        app: steel-server
    spec:
      containers:
      - name: steel-server
        image: gcr.io/<my-project-id>/steel-server:latest
        ports:
        - containerPort: 12345
          name: tcp

相关的 Go TCP 服务器代码

server, err := net.Listen("tcp", ":12345")
if err != nil {
    log.Fatalln("Couldn't start up tcp server: ", err)
}

最佳答案

您能否先尝试使用 kubectl get svc,这样当您从 GCP 以 type:loadbalancer 获取外部 ip 时,您就可以了解负载均衡器打开了哪些端口。

apiVersion: v1
kind: Service
metadata:
  name: steel-server-service
spec:
  type: LoadBalancer
  selector:
    app: steel-server
  ports:
  - protocol: TCP
    name: tcp
    port: 80
    targetPort: 12345

尝试使用此服务配置,我将端口更改为 80,而目标端口与容器端口相同。

关于go - 如何为 golang tcp 服务器配置 GKE 负载均衡器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55961845/

相关文章:

用于负载平衡的 Kubernetes Pod 预热

linux - TCP:服务器在收到来自客户端的 [SYN] 后立即发送 [RST, ACK]

c - 您如何构建Pion mediadevices webrtc示例?

go - 将 db 变量传递给函数参数

python - 为什么在写入之前休眠会减慢后续写入的速度?

c# - 服务器和客户端之间通过TCP异步传输数据

TCP 握手 : at which point exactly the connection is considered established and data can be sent?

mongodb - 如何在 Kubernetes 中使用持久卷部署 MongoDB?

kubernetes - 如何从 yaml 文件访问 kubernetes 命名空间

go - 将 markdown 转换为 pdf - 不可读的字体