如何在 DigitalOcean 上公开 Docker and/or Kubernetes 端口

How to expose Docker and/or Kubernetes ports on DigitalOcean

首先我想说我一点也不缺乏经验,我是专业人士,我已经用谷歌搜索这个问题一个星期了;我已经按照教程进行操作,并且还在该站点上发现了很多线程,这些线程告诉人们他们正在寻求免费劳动力并且答案在 Google 上。 Google上没有答案,还请多多包涵。正如人们喜欢在这里所说的那样,我一直在做我的“家庭作业”,但我遗漏了一些重要的东西。

我的用例:我想 运行 代码服务器和 JupyterLab 作为 DigitalOcean 液滴或 Kubernetes 集群上的浏览器可访问服务。我希望这样做的方式允许尽可能多的托管预算用于处理软件(我编写 Python 机器 learning/natural 语言代码)。我的理想设置是我有一个子域,带有 SSL(LetsEncrypt 很好),用于代码服务器,另一个用于 JupyterLab。理想情况下,他们可以访问相同的存储,但目前这是次要问题。我可以没有域,只是将流量通过 OpenVPN 传递到 IP 和端口,但如果没有 SSL,代码服务器将 运行 功能不全。

实际问题:几乎每次尝试实现此功能时,我都发现无法访问端口。在一次良好的尝试中,我设法获得了一项服务(通常类似于 Python http.server),在该服务中,转到我的域或 IP/port 立即得到除“连接被拒绝”之外的任何东西。我已经检查了防火墙设置(我不使用 DigitalOcean 的并且我一直打开我的本地服务 and/or Docker 容器正在侦听 on/being 转发到的端口)。我最好的结果是使用 Kubernetes 和 this tutorial following this tutorial:我在单独的子域中得到了代码服务器和两个示例站点 运行ning(使用节点平衡器指向,是的,我在 DO 上有一个完全注册的域名称服务器)。

但是有一个问题:我无法让 LetsEncrypt 在 Kubernetes 上颁发证书,而且我不知道如何将它放入代码服务器的容器中。

这让我想到了下一个问题,这是相关的,因为我不确定这完全是一个 Kubernetes 问题:在过去的四年里,我没有在任何 Linux 发行版中成功公开端口。从 2012-16 年左右开始,我曾经在一个 Linode 上管理多个站点,这没问题,尽管可能很不安全,但我说的是现在甚至无法公开 IP 地址上的端口。云提供商处理事情的方式发生了变化。我知道 AWS、GCloud 等将他们的虚拟机隔离在专用网络上,但这不是 DO、Linode 或 Vultr 所做的,但我还不能成功地公开一个端口——即使我遵循了发行版的端口公开教程题。我真的使用 Rancher 在端口上启动了一个 Docker 容器,由 OS 管理,并验证端口已公开,但它不起作用。使用 Kubernetes 时,负载均衡器有时会提供帮助。我也能够在 FreeBSD 中启动一个完整的服务器,但是我需要 运行 的太多东西取决于 Docker 和 Node,遗憾的是它们没有很好地移植到那个系统。

我想指出,我也 Googled Whosebug 并发现其他人有类似的问题,但他们的问题都在那里关闭,他们被告知 Google;谷歌搜索出现了 DO 教程和封闭的 Whosebug 线程。我应该注意到我也尝试在 Google Cloud 和 Linode 上执行此操作,结果相似。

另外:我知道 Docker 容器在默认情况下与 OS 网络隔离,并且遵循部署指南以确保转发它们的 OS-native 端口。

tl;博士;尽管遵循 OS 程序,但我在公开端口时遇到了问题,而且我不确定我的个人开发服务器是否应该只供我使用,应该是 Kubernetes 集群还是具有 Docker 部署的单个服务器,如果我不使用 Kubernetes 负载均衡器,我不知道如何将端口路由到我想公开的两个应用程序的子域。当它是一个非常狭窄的情况时,请不要以某种方式“太宽泛”来关闭它,其他人已经遇到过,而且我已经做了一个星期的研究。

您可以在此处找到执行此操作的位置:

https://www.digitalocean.com/docs/kubernetes/how-to/configure-load-balancers/#ssl-certificates