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

时间:2019-07-05 13:47:08

标签: python docker kubernetes

我已经准备好了泊坞窗映像。 我的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仪表板将docker映像部署在2个容器中:

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

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

我只是想澄清一下,我正在处理一个由树莓派Pi3组成的群集,并且客户端位于我自己的PC上。 PC和覆盆子卡已连接到同一局域网。

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

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

WorkerNode:<NodePort>

此方法的问题在于,如果任何节点都死了,则可能会遇到问题。理想的解决方案是将服务公开为LoadBalancer,以便您可以使用外部IP或DNS访问群集外部的服务。

答案 1 :(得分:0)

我已成功通过节点端口模式:ManagerIP:31700将群集中的应用程序暴露给外部。 我想知道覆盆子群集将已接收到的数据文件存储在何处?