Невозможно подключиться к серверу, развернутому в кластере kubernetes - PullRequest
1 голос
/ 05 июля 2019

Я уже все подготовил мой образ докера Мой 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

Затем я развернул образ докера в 2-х модулях через панель управления kubernetes:

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

Итак, на самом деле образ докера выполняется в двух модулях:

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

Я пробовал адрес главного узла, и я получаю сообщение об ошибке «Отказано в соединении».

Я хотел бы просто уточнить, что я работаю над кластером, состоящим из Raspberry Pi3, и клиент работает на моем собственном компьютере. ПК и карты малины подключены к одной локальной сети.

Спасибо, что помогли мне.

Ответы [ 2 ]

1 голос
/ 06 июля 2019

Вы можете получить доступ к сервису с IP-адресом рабочих узлов, поскольку вы указали сервис как NodePort.

WorkerNode:<NodePort>

Проблема с этим подходом состоит в том, что, если какой-либо из узлов мертв, вы можете столкнуться с проблемой. Идеальным решением является предоставление службы как LoadBalancer, чтобы вы могли получить доступ к службе вне кластера с помощью внешнего IP или DNS.

0 голосов
/ 25 июля 2019

Мне удалось открыть приложение в кластере снаружи через режим порта узла: ManagerIP: 31700.Хотелось бы узнать, где кластер малины хранит файлы данных, которые он уже получил?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...