[英]Cannot connect to the server deployed on kubernetes cluster
我已经准备好了我的 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')
我已经尝试了主节点的地址,但出现连接被拒绝的错误。
我想澄清一下,我正在开发一个由 raspberry Pi3 组成的集群,客户端在我自己的电脑上。 电脑和树莓派卡连接到同一个本地网络。
感谢你们对我的帮助。
由于您将服务公开为 NodePort,因此您可以使用工作节点 IP 访问该服务。
WorkerNode:<NodePort>
这种方法的问题在于,如果任何节点死亡,您可能会遇到问题。 理想的解决方案是将服务暴露为 LoadBalancer,这样你就可以通过外部 IP 或 DNS 访问集群外的服务。
我已成功通过节点端口模式将集群中的应用程序暴露给外部:ManagerIP:31700。 我想知道树莓派集群在哪里存储它已经收到的数据文件?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.