将 Kubernetes 集群暴露给 Internet

Pra*_*166 2 dns nginx kubernetes

我已经在我的虚拟机上创建了一个 Kubernetes 集群,并且我一直试图用我自己的域(例如,www.mydomain.xyz)将它公开到 Internet 。我创建了一个入口资源,如下所示,我还修改了 kubelet 配置以使用我的域名。我所有的 pod 和服务都是在这个域名中创建的(例如,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

Run Code Online (Sandbox Code Playgroud)

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

在此处输入图片说明

这是我陷入困境而无法进一步进行的地方。我是否需要更改集群中的任何内容以在“域 DNS 配置”(Hostinger)或要在主节点中添加的任何内容中添加此命名空间。

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

任何帮助将不胜感激。

Daw*_*ruk 5

您无法像尝试那样公开 Kubernetes 集群。

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

Minikube 是一个可以轻松在本地运行 Kubernetes 的工具。Minikube 在笔记本电脑上的虚拟机 (VM) 内运行单节点 Kubernetes 集群,供想要试用 Kubernetes 或使用它进行日常开发的用户使用。

Kubernetes.io:学习环境:Minikube

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


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

  • 访问公共IP
  • 能够在您的网络内移植转发流量
  • 允许流量到您的minikube实例
  • 结合以上所有

为什么我认为它是minikube实例?

您有 2 个网络接口:

  • NAT
  • Host-only

当您minikube使用 Virtualbox运行时,将创建此接口

访问公共IP

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

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

您可以在此处阅读有关公共和私有 IP 地址之间差异的更多信息:

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

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

你可以在这里读更多关于它的内容:

允许流量到您的minikube实例

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

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

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

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

您还需要更改您的.kube/configIP 地址,因为它会有旧的/错误的 IP 地址!

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


结合以上所有

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

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

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

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