python - 无法连接到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

# 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(套接字编程):

import socket
from datetime import datetime
import os

def ReceiveDATA():
    hostname = socket.gethostname()
    i=0
    host = socket.gethostbyname(hostname)
    port = 31700
    while True:
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # Create a socket object

        s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

        s.bind((host, port))            # Bind to the port

        s.listen(10)                    # Accepts up to 10 clientections.


        print("############################# ",i+1," #################################")

        print('Server listening.... on '+ str(host))

        client, address = s.accept()

        print('Connection from : ',address[0])

        i+=1

        date=str(datetime.now())
        date=date.replace('-', '.')
        date=date.replace(' ', '-')
        date=date.replace(':', '.')

        PATH = 'ClientDATA-'+date+'.csv'

        print(date+" : File created")

        f = open(PATH,'wb') #open in binary

        # receive data and write it to file
        l = client.recv(1024)

        while (l):
            f.write(l)
            l = client.recv(1024)

        f.close()


        dt=str(datetime.now())
        dt=dt.replace('-', '.')
        dt=dt.replace(' ', '-')
        dt=dt.replace(':', '.')

        print(dt+' : '+'Successfully get the Data')

        feedback = dt

        client.send(feedback.encode('utf-8'))

        client.close()

        s.close()



if __name__ == '__main__':
    ReceiveDATA()

我的 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 仪表板在 2 个 pod 中部署了 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

实际上 docker 镜像在两个 pod 中运行:

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')

我尝试了主节点的地址,但出现连接被拒绝的错误。

我想澄清一下,我正在开发一个由树莓派3组成的集群,客户端在我自己的电脑上。电脑和树莓卡连接到同一个本地网络。

谢谢你帮助我。

最佳答案

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

WorkerNode:<NodePort>

这种方法的问题是,如果任何节点死亡,您可能会遇到问题。理想的解决方案是将服务公开为LoadBalancer,这样您就可以通过外部IP或DNS访问集群外部的服务。

关于python - 无法连接到kubernetes集群上部署的服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56904309/

相关文章:

python - 导入后如何从 __future__ 中删除/取消导入符号?

python - 使用 freeglut 为 Python 3.5.2 设置 PyOpenGL

docker - 基于另一个 ENV 变量的变量的条件集

git - .gitlab-ci.yml 中的多个 Docker 镜像

kubernetes - 在 Kubernetes 中禁用 cronjob

python - fatal error : *. h : No such file or directory. 运行 docker build 命令为 python 项目创建图像时

postgresql - 将 azure 文件存储与 kubernetes 和 azure 容器服务 (aks) 一起使用 - 权限被拒绝

python - 如何使用 xlsx writer 动态写入 excel

python - 使用正则表达式查看最近 12 小时的文件

docker - 通过Docker在Raspberry Zero上支持dotnet核心