从互联网访问kubernetes上运行的应用程序

时间:2018-04-15 17:23:47

标签: kubernetes cluster-computing kubernetes-service

我非常确定这是在tkinter上运行应用时的基本用例,但到目前为止我还无法找到教程,也无法从文档中了解如何让它发挥作用。

我有一个应用程序,正在监听kubernetes。因此,当我在localhost上运行时,我可以通过localhost:9000上的Web浏览器访问它。在我的port 9000上运行的docker容器中运行时,它也可以在VPS上访问。现在的问题是,如何在同一myVPSAddress:9000上运行的kubernetes上部署它,并使应用程序也可见,就像部署在docker上一样。我可以从VPS中访问群集地址上的应用程序,但不能访问服务器本身的IP地址。有人可以给我看一些基本的dockerfile,其中有描述它正在做什么或者向我展示一些防止白痴的方式,如何使它工作?感谢

1 个答案:

答案 0 :(得分:1)

虽然人们会认为这是一个非常基本的用例,但对于在裸机服务器上运行自己的kubernetes集群的人来说并非如此。 (你的VPS方式)。

向“世界”展示应用程序的推荐方法是使用kubernetes services,请参阅有关exposing services的此文档。您可以定义kubernetes服务,类型为NodePort或类型为Loadbalancer *。

这是一个死的简单服务的样子(提示:它是默认类型NodePort):

kind: Service
apiVersion: v1
metadata:
  name: my-service
spec:
  selector:
    app: MyApp
  ports:
  - protocol: TCP
    port: 9000
    targetPort: 9376

这将在您的VPS群集中端口name: my-service的所有节点上以标签9376(在端口9000上运行)公开您的服务。

假设您的节点有一个公共IP(根据您的问题我假设他们这样做),您可以放心地curl localhost:9376

由于这通常不是向用户公开的理想用户体验/用户界面,因此人们使用Loadbalancer类型的服务。此服务类型为您的每个服务而不是端口提供唯一的IP。

这些服务是云托管集群的一等公民,例如Google的GKE,但如果您运行自己的Kubernetes集群(使用说kubeadm进行设置),则需要部署Loadbalancer服务提供商。我已经使用了优秀的MetalLB,它一旦设置就完美无缺,但你需要自己设置它。如果您还需要服务的DNS名称,您还应该查看ExternalDNS

*请注意,如果你能以某种方式使IP路由可用,你也可以使用ExternalIP类型的服务,但除非网络在你的控制范围内,这通常不是一种可行的方法,而且我建议改为寻找LB提供商。