我已经准备好了我的 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/