我有2个Pod:一个服务器Pod和一个客户端Pod(基本上,客户端通过端口8090与服务器进行交互)。我已经创建了一个服务(这反过来又创建了一个端点),但是客户端吊舱无法到达该端点,因此会崩溃:
错误:客户端中的错误:rpc错误:代码=不可用desc =所有SubConns都在TransientFailure中,最新的连接错误:连接错误:desc =“传输:在拨打拨号tcp时出错:8090:连接:连接被拒绝”)< / p>
客户端pod尝试访问其主机网络中的端口8090。我希望做的是,只要客户端通过该服务击中8090,它就会连接到服务器。
我只是不明白如何连接这两个Pod,因此需要帮助。
服务器窗格:
apiVersion: v1
kind: Pod
metadata:
name: server-pod
labels:
app: grpc-app
spec:
containers:
- name: server-pod
image: image
ports:
- containerPort: 8090
客户端窗格:
apiVersion: v1
kind: Pod
metadata:
name: client-pod
labels:
app: grpc-app
spec:
hostNetwork: true
containers:
- name: client-pod
image: image
服务:
apiVersion: v1
kind: Service
metadata:
name: server
labels:
app: grpc-app
spec:
type: ClusterIP
ports:
- port: 8090
targetPort: 8090
protocol: TCP
selector:
app: grpc-app
答案 0 :(得分:2)
我感觉出错了的一件事是服务尚未准备好接受连接,而您的客户端正在尝试访问,因此导致连接被拒绝。几天前,我也遇到了类似的问题。我所做的是在yaml配置文件中添加了一个就绪和活跃性探针。Kubernetes提供了用于检查容器的运行状况的活跃性和就绪性探针。这些探针可以检查容器中的某些文件,检查TCP套接字或发出HTTP请求。
这样的样本
spec:
containers:
- name: imagename
image: image
ports:
- containerPort: 19500
name: http
readinessProbe:
httpGet:
path: /health
port: http
initialDelaySeconds: 120
periodSeconds: 5
livenessProbe:
httpGet:
path: /health
port: http
scheme: HTTP
initialDelaySeconds: 120
timeoutSeconds: 5
因此它将在重定向流量之前检查您的应用程序是否准备好接受连接。
答案 1 :(得分:2)
您的服务正在选择客户端和服务器。您应该更改标签,以便服务器应具有类似app:grpc-server的内容,而客户端应具有app:grpc-client。服务选择器应为app:grpc-server来公开服务器容器。然后在您的客户端应用中,连接到服务器:8090。您应该删除hostNetwork:true。