簡體   English   中英

Pod無法通過服務與其他Pod通信

[英]Pod does not communicate with other pod through service

我有2個Pod:一個服務器Pod和一個客戶端Pod(基本上,客戶端通過端口8090與服務器進行交互)。 我已經創建了一個服務(依次創建了一個端點),但是客戶端吊艙無法到達該端點,因此崩潰了:

錯誤:客戶端錯誤:rpc錯誤:代碼=不可用desc =所有SubConns都在TransientFailure中,最新的連接錯誤:連接錯誤:desc =“傳輸:在撥打撥號TCP時出錯:8090:連接:連接被拒絕”)

客戶端容器嘗試訪問其主機網絡中的端口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

我感覺出錯的一件事是服務尚未准備好接受連接,而您的客戶端正在嘗試訪問,因此導致連接被拒絕。幾天前,我也遇到了類似的問題。 我所做的是在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

因此,它將在重定向流量之前檢查您的應用程序是否准備好接受連接。

您的服務同時選擇了客戶端和服務器。 您應該更改標簽,以便服務器應具有類似app:grpc-server的內容,而客戶端應具有app:grpc-client。 服務選擇器應為app:grpc-server來公開服務器容器。 然后在您的客戶端應用中,連接到服務器:8090。 您應該刪除hostNetwork:true。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM