【发布时间】:2021-02-10 23:10:12
【问题描述】:
我想要实现的是使用python和tornado运行最简单的回显服务器,代码在这里:
#!/usr/bin/env python3
import tornado.ioloop
import tornado.web
from tornado.log import enable_pretty_logging
class MainHandler(tornado.web.RequestHandler):
def get(self):
self.write("Hello, world")
def make_app():
return tornado.web.Application([
(r"/", MainHandler),
])
if __name__ == "__main__":
port = 8080
print ("Starting up echo server at port %d" % port)
enable_pretty_logging()
app = make_app()
app.listen(int(port))
tornado.ioloop.IOLoop.current().start()
我想在运行在 kubernetes 的 Pod 中的 docker 中运行它。
我已经实现了,但只是部分实现了。我在本地网络中的物理机上运行 kubernetes 集群。为了运行集群,我使用了minikube。
这是我的配置文件,我用它们来运行 kubernetes Deployment 和 Service:
apiVersion: apps/v1
kind: Deployment
metadata:
name: testApp
spec:
replicas: 1
selector:
matchLabels:
app: testApp
template:
metadata:
labels:
app: testApp
spec:
containers:
- name: testApp-container
image: testApp-docker:latest
imagePullPolicy: Never
command: ["python3"]
args: ["-u", "echo_tornado.py"]
ports:
- containerPort: 5020
restartPolicy: Always
apiVersion: v1
kind: Service
metadata:
name: testApp-svc
labels:
app: testApp
spec:
type: NodePort
ports:
- port: 5020
targetPort: 5020
nodePort: 5020
selector:
app: testApp
究竟是什么问题?我可以通过curl $NODE_IP:$NODE_PORT 向我的回显服务器发送请求并且我得到了响应,但我也希望能够做到curl localhost:$NODE_PORT 并且(对我来说至关重要)我必须能够做到curl $MY_LOCAL_MACHINE_IP:$NODE_PORT from同一本地网络中的其他机器。
有可能实现吗?我应该使用某种方式将我的本地 IP 和端口转发到节点的 ip 吗?
也许我不应该使用 ServiceType : NodePort 而我应该使用 LoadBalancer ?
也许minikube 是个问题,我应该使用不同的工具?
【问题讨论】:
-
Kubernetes 本质上是一个远程集群环境; NodePort 服务几乎永远不会是
localhost或本地系统。您通常会使用 DNS 名称配置负载均衡器(手动或使用 LoadBalancer 服务)并让客户端连接到该名称。 -
好的,谢谢,我明白为什么在这种情况下我不能使用 NodePort。我将我的 ServiceType 更改为 LoadBalancer,现在我可以通过我的 loadBalancer 的外部 IP 与我的 echo 服务器通信,但我仍然只能从我的机器使用这个 IP(这与 minikube 集群),但我希望能够与这个 echo来自同一本地网络中其他计算机的服务器。我还应该做什么?
-
@Dariusz.O 这是可能的,但解决方案将取决于您使用的
--driver和操作系统。Minikube本身提供了一个“隔离层”(我的意思是在 LAN 上公开它)。请将您使用的操作系统和--driver添加到您的问题中。您可以尝试在具有minikube实例的主机上运行:kubectl port-forward svc/testApp-svc 5020:5020 --address 0.0.0.0。您还可以查看其他解决方案,例如kubeadm、kubespray、microk8s等。
标签: kubernetes minikube