在部署golang服务器容器和gke负载平衡器之后,我可以成功连接到负载平衡器的外部ip,但是没有数据到达服务器容器。
当我在本地运行服务器容器并将客户端指向localhost时,它可以按预期工作。我将其更改为服务于HTTP请求,并且在相同的kubernetes清单中也可以正常工作。但是,如果我尝试同时在不同的端口上同时提供tcp和http服务,则在gke上都不起作用,但在本地也可以正常工作。因此,我怀疑这可能与我配置负载均衡器的方式或在gke上运行但不在本地运行的服务器中侦听tcp连接的方式有关。
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
Relevent Go TCP服务器代码
server, err := net.Listen("tcp", ":12345")
if err != nil {
log.Fatalln("Couldn't start up tcp server: ", err)
}
答案 0 :(得分:0)
您能否先尝试使用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,而目标端口与容器端口相同。