[英]Pod-to-pod communication doens't work with Python socket in k8s
在我們的項目中,我們希望兩個 pod 作為服務器-客戶端,通過 Python socket
庫進行通信。 兩個容器都是使用docker build
本地構建的,通過imagePullPolicy: IfNotPresent
在 yaml 文件上本地拉取,並在 k8s 集群的同一節點上運行(我正在運行 ZB76E98,AF9AAA680979BFA5 重要的)
當我們溝通良好時
docker build
和docker run
將兩個腳本作為容器運行 當服務器和客戶端都部署在 K8s 中時,通信失敗。 kubectl logs client -f
返回:
Traceback (most recent call last):
File "client.py", line 7, in <module>
client_socket.connect((IP_Server,PORT_Server))
TimeoutError: [Errno 110] Connection timed out
我懷疑客戶端腳本在集群上部署時發出的請求存在問題,但我找不到問題所在。
服務器.py
import socket
IP = "0.0.0.0"
PORT = 1234
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
server_socket.bind((IP, PORT))
server_socket.listen()
...
服務器.yaml
apiVersion: v1
kind: Service
metadata:
name: server
labels:
app: server
spec:
ports:
- port: 1234
targetPort: 1234
protocol: TCP
selector:
app: server
---
apiVersion: v1
kind: Pod
metadata:
name: server
labels:
app: server
spec:
containers:
- name: server
image: server:latest
imagePullPolicy: IfNotPresent
ports:
- containerPort: 1234
客戶端.py
import socket
IP_Server = # the IP of the server service, obtained from "kubectl get svc"
PORT_Server = 1234
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect((IP_Server,PORT_Server)) # fails here
...
客戶端.yaml
apiVersion: v1
kind: Pod
metadata:
name: client
labels:
app: client
spec:
containers:
- name: client
image: client:latest
imagePullPolicy: IfNotPresent
在默認設置中 - 不應該有任何東西阻止您在 2 個 pod 之間進行連接。 但是,您不應依賴 IP 地址在集群內部進行通信。 嘗試使用服務名稱:
$ kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 10m
server ClusterIP 10.98.48.92 <none> 80/TCP 9m39s
server
通常應該對在同一命名空間內運行的所有 pod 可用。
您解析服務器的 IP 地址的方式可能有問題,但是服務器創建的“服務”應該可以通過 DNS 隱式訪問(例如服務器:1234),如此處所述,所以也許您可以使用它反而?
萬一將來有人來到這里,我在這里找到了對我有用的答案: https://github.com/kubernetes/kubernetes/issues/86762#issuecomment-836338017
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.