将 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: Production environment: Create cluster kubeadm
- Github.com: Kubespray
- Cloud.google.com: Kubernetes Engine
- Aws.amazon.com: EKS
尝试将 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
实例。
我在我的虚拟机上创建了一个 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: Production environment: Create cluster kubeadm
- Github.com: Kubespray
- Cloud.google.com: Kubernetes Engine
- Aws.amazon.com: EKS
尝试将 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
实例。