无法连接到Kubernetes集群中的gRPC服务器,但当我端口转发时可以连接[Connection refused].



过去几天一直被这个错误卡住!

我有一个HTTP服务器,旨在通过客户端与gRPC服务器连接。当我启动gRPC服务器并启动HTTP服务器时,它在我的本地机器上运行良好。但是,当我尝试在集群中部署它时,HTTP服务器无法连接错误消息error receiving stream from timer rpc error: code = Unavailable desc = connection error: desc = "transport: Error while dialing dial tcp 10.109.237.114:5996: connect: connection refused"

我发现特别奇怪的是,如果我从集群转发gRPC服务器,我的本地HTTP服务器连接到它很好。检查集群内的连接,我可以看到端口是打开的,但它仍然拒绝连接。netstat巡检图像

指出

  • 在minikube和DOKS上体验这个问题
  • 在M1 mac上构建这些图像。
  • 没有gRPC认证=>rpc.DialContext(ctx, serverAddress, grpc.WithTransportCredentials(insecure.NewCredentials()))

GRPC SERVER FILE

apiVersion: apps/v1
kind: Deployment
metadata:
name: x-service
labels:
type: xx
service: x-svc
spec:
replicas: 1
selector:
matchLabels:
type: xx
service: x-svc
template:
metadata:
labels:
type:xx
service: x-svc
spec:
containers:
- name: x-api
image: x/image
---
apiVersion: v1
kind: Service
metadata:
name: x-service
spec:
ports:
- protocol: TCP
port: 5996
targetPort: 5996
selector:
type: xx
service: x-svc

HTTP SERVER FILE

apiVersion: apps/v1
kind: Deployment
metadata:
name: b-service
labels:
type: be
service: be-svc
spec:
replicas: 1
selector:
matchLabels:
type: be
service: be-svc
template:
metadata:
labels:
type: be
service: be-svc
spec:
containers:
- name: bapi
image: x/grpc
imagePullPolicy: Always
env:
- name: X_ADDRESS
value: x-service:5996
---
apiVersion: v1
kind: Service
metadata:
name: b-api-svc
spec:
type: NodePort
ports:
- port: 8080
selector:
type: be
service: be-svc

几天前,我遇到了和你类似的情况:在本地,您可以通过端口转发与gRPC服务通信,但它无法在集群内(pod之间)通信">

如果两个pod都在同一个集群中,您应该使用服务名称和端口号,而不是主机名。在您的情况下,这应该是x-service:5996。如果有名称空间,应该是x-service.<enter-namespace-here>:5996

在Java上下文中,您的代码应该类似于:

ManagedChannel channel = ManagedChannelBuilder
.forTarget("x-service:5996")
.usePlaintext()
.build();

如果我是正确的,在k8s集群中,您的pod可以使用它们的服务名称(和端口)相互交互。但是,如果您想通过Ingress建立通信,请查看此文档https://doc.traefik.io/traefik/routing/providers/kubernetes-ingress/

希望对你有帮助。

相关内容

  • 没有找到相关文章

最新更新