部署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/