首页 > 解决方案 > 如何在 DigitalOcean 上公开 Docker 和/或 Kubernetes 端口

问题描述

首先我想说我一点都不缺乏经验,我是专业人士,我已经在谷歌上搜索了一周;我已经按照教程进行操作,并且在这个网站上也基本上找到了告诉人们他们要求免费劳动力的主题,答案在谷歌上。答案不在谷歌上,所以请多多包涵。正如人们在这里所说的那样,我一直在做我的“家庭作业”,但我错过了一些重要的东西。

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

实际问题:几乎每次尝试实现这一点时,我都发现我无法访问端口。在一次好的尝试中,我设法获得了一项服务(通常是 Python http.server 之类的服务),在该服务中,转到我的域或 IP/端口可以让我立即获得除“连接被拒绝”之外的任何东西。我检查了防火墙设置(我不使用 DigitalOcean,并且我一直打开我的本地服务和/或 Docker 容器正在侦听/被转发到的端口)。最好的方法是使用 Kubernetes 和本教程之后的本教程:我得到了代码服务器和两个在不同子域中运行的示例站点(使用节点平衡器指向,是的,我在 DO 的名称服务器上有一个完全注册的域)。

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

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

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

另外:我知道 Docker 容器默认情况下与操作系统网络隔离,并遵循部署指南以确保转发其操作系统原生端口。

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

标签: dockernginxkubernetesdigital-oceanlets-encrypt

解决方案



推荐阅读