【发布时间】:2019-05-03 00:28:40
【问题描述】:
部署golang服务器容器和gke负载均衡器后,我可以成功连接到负载均衡器的外部ip,但是没有数据到达服务器容器。
当我在本地运行服务器容器并将客户端指向本地主机时,它按预期工作。我将其更改为服务 http 请求,并且它在相同的 kubernetes 清单上运行良好。但是,如果我尝试同时提供 tcp 和 http(在不同的端口上),那么在 gke 上 都不工作 但在本地又可以正常工作。所以我怀疑这可能与我如何配置负载平衡器或我如何在服务器中侦听 tcp 连接在 gke 但不是本地运行时中断某些东西有关。
K8s 服务清单
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 部署清单
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)
}
【问题讨论】:
-
如果直接向容器发送流量,是否有效?尝试 ssh 到一个节点,运行“sudo toolbox bash”,然后测试与您的 pod 的连接(绕过服务)。收到回复了吗?
-
另外,您是否使用 Ingres 进行 http?如果是这样,是不同的 nodePort 服务吗?您的容器不应仅仅因为您为 tcp 添加了另一个设备而停止在 http 上提供流量
标签: go tcp kubernetes google-kubernetes-engine