【问题标题】:Expose Kubernetes cluster to Internet将 Kubernetes 集群公开到 Internet
【发布时间】:2020-10-14 23:05:41
【问题描述】:

我已经在我的虚拟机上创建了一个 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

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

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

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

任何帮助将不胜感激。

【问题讨论】:

  • 您想暴露 Kubernetes API Server 或运行在 Kubernetes 集群中的 pod?
  • 我的集群中有几个应用程序,并创建了一个入口,其中映射到这些应用程序的不同路径。我正在尝试公开这个入口 IP,我们可以使用它访问我的所有应用程序。我可能是错的。
  • 将 DNS 配置添加为 A 记录后,我可以通过在我的主机中访问我的域 (mydomain.xyz) 来获得预期的输出。如果我尝试来自其他/不同网络的相同 URL,则没有得到响应。准确地说,无法到达获取页面。
  • 您是否确保 DNS 解析在另一网络端正常进行?
  • 请告诉您安装了 Kubernetes 的虚拟机在哪里。它是 Hostinger 基础架构中的虚拟机还是本地创建的?其次,如果您想将 A 记录指向您的集群的 public IP,如果您想将其公开到 Internet。

标签: nginx kubernetes dns


【解决方案1】:

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

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

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

Kubernetes.io: Learning environment: Minikube

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


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

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

为什么我认为是minikube 实例?

您有 2 个网络接口:

  • NAT
  • Host-only

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

访问公共 IP

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

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

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

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

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

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

允许访问您的 minikube 实例

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

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

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

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

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

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


结合以上所有

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-05
    • 1970-01-01
    • 1970-01-01
    • 2021-12-21
    • 2019-05-22
    • 1970-01-01
    • 2020-04-25
    • 1970-01-01
    相关资源
    最近更新 更多