0

我很确定这是在 上运行应用程序时的基本用例kubernetes,但到目前为止,我无法找到教程,也无法从文档中了解如何使其工作。

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

4

1 回答 1

1

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

将应用程序公开给“世界”的推荐方法是使用kubernetes 服务,请参阅这篇关于公开服务的文档。您定义一个 kubernetes 服务,类型为NodePortLoadbalancer *。

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

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

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

假设您的节点有一个公共 IP(根据您的问题,我认为他们有),您可以安全地执行curl localhost:9376.

因为这通常不是向用户公开的理想 UX/UI,所以人们使用类型的服务Loadbalancer。此服务类型为您的每个服务提供唯一 IP,而不是端口。

这些服务是云托管集群上的一等公民,例如 Google 的 GKE,但如果您运行自己的 Kubernetes 集群(使用 say 进行设置kubeadm),那么您需要部署您的 Loadbalancer 服务提供程序。我使用了出色的MetalLB,一旦设置它就可以完美运行,但你需要自己设置它。如果您还想为您的服务提供 dns 名称,您还应该查看ExternalDNS


*这里需要注意的是,ExternalIP如果您可以以某种方式使该 IP 可路由,您也可以使用类型的服务,但除非网络在您的控制范围内,否则这通常不是可行的方法,我建议您改用 LB 提供商.

于 2018-04-15T17:58:16.887 回答