将 Kubernetes 集群公开到 Internet

Expose Kubernetes cluster to Internet

我在我的虚拟机上创建了一个 Kubernetes 集群,我一直在尝试用我自己的域(例如,www.mydomain.xyz)将它公开到 Internet。我创建了一个入口资源,如下所示,我还修改了 kubelet 配置以使用我的域名。我所有的pods和服务都是在这个域名下创建的(例如,default.svc.mydomain.xyz)

root@master-1:~# kubectl get ingress
NAME           CLASS    HOSTS                  ADDRESS        PORTS   AGE
test-ingress   <none>   www.mydomain.xyz   192.168.5.11   80      5d20h

root@master-1:~# kubectl get svc -n ingress-nginx
NAME                                 TYPE           CLUSTER-IP      EXTERNAL-IP    PORT(S)                      AGE
ingress-nginx-controller             LoadBalancer   10.103.59.116   192.168.5.11   443:30740/TCP,80:31894/TCP   6d21h

我尝试如下在我的域 DNS 页面中添加 A 记录,但无法添加。

这是我卡住的地方,无法继续。我是否需要更改集群中的任何内容以在“域 DNS 配置”(Hostinger) 中添加此命名空间或在主节点中添加任何内容。

我拥有的域如何将所有流量重定向到我的 kubernetes 集群?

非常感谢任何帮助。

您不能像您尝试的那样公开您的 Kubernetes 集群。

我强烈建议使用不同的 Kubernetes 解决方案,因为 minikube 更像是一种实验和开发工具,如官方网站所述:

Minikube is a tool that makes it easy to run Kubernetes locally. Minikube runs a single-node Kubernetes cluster inside a Virtual Machine (VM) on your laptop for users looking to try out Kubernetes or develop with it day-to-day.

Kubernetes.io: Learning environment: Minikube

请查看其他解决方案,例如:


尝试将 Kubernetes 从您的专用网络公开到 Internet 时,您需要记住几件事。

  • 获得publicIP
  • 能够在您的网络内转发流量
  • 允许流量到您的 minikube 实例
  • 结合以上所有

Why do I think it's minikube instance?

You have 2 network interfaces:

  • NAT
  • Host-only

This interfaces are getting created when you run your minikube with Virtualbox

获得publicIP

访问 public IP 至关重要。 没有它,您将无法向 Internet 公开您的服务。有一些例外情况,但我不会在这里重点介绍。

在 DNS 面板中,您输入了私有 IP 地址。除非 DNS 服务器旨在仅解析本地查询(您的专用网络),否则您不能这样做。要允许其他用户连接到您的 Kubernetes 集群,您需要提供一个 public IP 地址 像 94.XXX.XXX.XXX.

您可以在此处详细了解 public 和私有 IP 地址之间的区别:

能够在您的网络内转发流量

如果您有 public IP,您还需要检查传入连接是否未被其他设备(如 ISP 的防火墙或您的路由器)阻止。 如果它们被阻止,您将无法公开您的服务。要将您的服务公开到 Internet,您需要使用“端口转发”。

您可以在此处阅读更多相关信息:

允许流量到您的 minikube 实例

正如我之前提到的:当您使用 Virtualbox 创建 minikube 实例时,您将创建以下网络接口:

  • NAT- 允许您的 VM 访问 Internet 的界面。此连接不能用于公开您的服务
  • Host-only-network-adapter - 由您的主机创建的接口,允许在接口内进行通信。这意味着您的主机和其他具有此特定适配器的虚拟机可以相互连接。它专为内部使用而设计。

您可以在此处阅读有关 Virtualbox 网络的更多信息:

我设法找到了一个 解决方法 以允许 laptop/pc 之外的连接到您的 minikube 实例。您需要将 minikube 实例设置中的网络接口从 Host-only-network-adapter 更改为 Bridged Adapter(第二个适配器)。这将在另一台设备连接到您的物理网络时起作用。请确保此桥接适配器与以太网 NIC 一起使用。 Minikube 应更改 IP 地址以匹配您的物理 IP 地址。

You will also need to change your .kube/config as it will have the old/wrong IP address!

之后您应该能够通过物理网络中可访问的 IP 连接到您的 Ingress 资源。


结合以上所有

记住上面的信息,让我们假设。

  • 您在路由器的 WAN 接口上关联了一个 public IP 地址(例如 94.100.100.100)。
  • 您在 DNS 中创建了一条 A 记录指向您的域名 94.100.100.100
  • 您创建了一个从端口 80 到端口 80 minikube 桥接适配器的 IP 地址的端口转发。

之后您应该能够从外部连接到您的 Ingress 资源。

请求将首先联系 DNS 服务器以获取与域关联的 IP 地址。然后它会向这个 IP 地址(大概是你的路由器)发送请求。您的路由器会将此连接端口转发到您的 minikube 实例。