Pod无法通过服务与其他Pod通信

时间:2019-08-18 04:24:55

标签: kubernetes

我有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

2 个答案:

答案 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。