Python 无法连接到部署在kubernetes群集上的服务器

Python 无法连接到部署在kubernetes群集上的服务器,python,docker,kubernetes,Python,Docker,Kubernetes,我已经准备好了我的docker形象。 我的Dockerfile: FROM python:3.7-alpine # Creating Application Source Code Directory RUN mkdir -p /FogAPP/src # Setting Home Directory for containers WORKDIR /FogAPP/src # Copying src code to Container COPY fogserver.py /FogAPP/src

我已经准备好了我的docker形象。 我的Dockerfile:

FROM python:3.7-alpine

# Creating Application Source Code Directory
RUN mkdir -p /FogAPP/src

# Setting Home Directory for containers
WORKDIR /FogAPP/src

# Copying src code to Container
COPY fogserver.py /FogAPP/src

# Application Environment variables
ENV APP_ENV development

# Exposing Ports
EXPOSE 31700

# Setting Persistent data
VOLUME ["/app-data"]

#Running Python Application
CMD ["python", "fogserver.py"]
我的源代码fogserver.py(套接字编程):

我的kubernetes群集已就绪:

kubectl get nodes

NAME         STATUS   ROLES    AGE     VERSION
rpimanager   Ready    master   3d23h   v1.15.0
rpiworker1   Ready    worker   3d23h   v1.15.0
rpiworker2   Ready    worker   3d23h   v1.15.0

然后,我通过kubernetes仪表板将docker映像部署在两个吊舱中:

kubectl get services

NAME             TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
cluster-fogapp   NodePort    10.101.194.192   <none>        80:31700/TCP   52m
kubernetes       ClusterIP   10.96.0.1        <none>        443/TCP      3d23h

我还有一个客户端源代码,也是socket编程。在这里,我发现了一个问题,我必须在集群中放置服务器的哪个地址

这是我的客户端代码源:


    host = "????????????"#Which Address should I set  
    port = 31700

    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect((host, port))

    PATH = GenerateDATA()

    f = open (PATH, "rb")

    l = f.read(1024)

    while (l):
        s.send(l)
        l = f.read(1024)


    print(dt+' : '+'Done sending')
我尝试了主节点的地址,但收到连接被拒绝的错误消息

我想澄清一下,我正在使用由raspberry Pi3组成的集群,客户机在我自己的pc上。pc和raspberry卡连接到同一个本地网络


谢谢你帮助我

您可以使用工作节点IP访问该服务,因为您将该服务公开为NodePort

WorkerNode:


这种方法的问题是,如果任何节点都死了,您可能会面临这个问题。理想的解决方案是将服务公开为LoadBalancer,以便您可以使用外部IP或DNS访问群集中外部的服务。

我已通过节点端口模式成功地将群集中的应用公开给外部:ManagerIP:31700。
我想知道raspberry集群在哪里存储它已经接收到的数据文件?

您好,您是从外部访问它的吗?如果比
NodeIP:nodePort
哪个是给你的
IP:31700
客户端在我自己的电脑上,它也通过WiFi连接到3张树莓卡的同一网络。连接是什么
curl-vip:31700
您是如何连接的?您的服务器是否在普通的Docker环境中工作,没有Kubernetes?(通常您需要在容器环境中绑定到0.0.0.0,否则无法从外部访问容器;无法保证容器的主机名会解析。)@DavidMaze,因此我必须将服务器代码中的主机地址更改为0.0.0.0```kubectl获取服务名称类型CLUSTER-IP EXTERNAL-IP端口AGE cluster fogapp LoadBalancer 10.103.239.184 6443:32626/TCP 3m15s``负载平衡花费的时间太长?由于您在裸机上安装了kubernetes,而不是在云提供商管理的kubernetes安装程序上,因此您需要额外的安装来获得负载平衡器。这可能会有所帮助。如果您对nodePort选项没有意见,那么我已经在上面添加了我的客户端代码,问题是我应该请求哪个IP地址?
kubectl get pods

NAME                             READY   STATUS    RESTARTS   AGE
cluster-fogapp-c987dfffd-6zc2x   1/1     Running   0          56m
cluster-fogapp-c987dfffd-gq5k4   1/1     Running   0          56m


    host = "????????????"#Which Address should I set  
    port = 31700

    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect((host, port))

    PATH = GenerateDATA()

    f = open (PATH, "rb")

    l = f.read(1024)

    while (l):
        s.send(l)
        l = f.read(1024)


    print(dt+' : '+'Done sending')