我创建了一个运行容器化Flask Web应用程序的Kubernetes集群(1个Master / 2个Workers)。我在主节点上创建了一个部署/服务,该部署/服务公开了一个NodePort来访问在:5000下的worker上运行的应用程序。
应用程序窗格处于活动状态,NodePort服务可用。但是,由于集群在具有其自身IP的AWS EC2实例上运行,因此我无法通过NodePort IP地址访问集群应用。
我正在考虑通过本地浏览器通过:5000访问群集的Flask应用的最简单方法吗?
到目前为止的背景:
我已经阅读了大量有关Kubernetes Ingress和AWS ELB / ALB NGINX Ingress的文章,以解决此问题,但是根据我的尝试,我无法设置此路由。情况似乎很复杂,而且我无法找到任何易于理解的资源来适用于我的情况。
我认为一个更简单的解决方案可能是设置一个在我的主节点上运行的简单NGINX反向代理,以将通过[ec2_public_ip]:5000进入的流量转换为[nodeport-cluster-ip]:5000 。但是,这似乎在60秒后挂起并超时。
这是我的集群设置:
NAME READY STATUS RESTARTS AGE
pod/anagram-app-55996478f5-mdnlg 1/1 Running 0 13m
pod/anagram-app-55996478f5-qkn7p 1/1 Running 0 13m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/anagram-app NodePort 10.108.225.119 <none> 5000:30230/TCP 13m
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 14m
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/anagram-app 2/2 2 2 13m
NAME DESIRED CURRENT READY AGE
replicaset.apps/anagram-app-55996478f5 2 2 2 13m
kubectl记录了anagram-app-55996478f5-mdnlg(以显示Flask应用程序处于活动状态):
* Serving Flask app "app" (lazy loading)
* Environment: production
WARNING: Do not use the development server in a production environment.
Use a production WSGI server instead.
* Debug mode: on
* Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
* Restarting with stat
* Debugger is active!
* Debugger PIN: 212-934-957
我只是在寻找一种简单的方法来通过我的浏览器在端口:5000上访问集群应用程序。如果有人在AWS EC2上对此感到满意,我很乐于助人:)
先谢谢了。
答案 0 :(得分:0)
您应该能够通过EC2公共IP到达应用程序NodePort。您只需要允许节点实例安全组中的NodePort端口。要允许所有NodePort,您需要允许端口范围从0.0.0.0/0到30000-32767。
如果只想打开端口5000,则需要像这样在部署规范中放入hostNetwork: true
:
spec:
hostNetwork: true
而且您还需要在安全组中允许端口5000