[英]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.