如何在 Kubernetes 集群上部署 Nginx
在上一篇文章中,我们讨论了如何设置和运行 Kubernetes 集群,接下来我们讨论如何在集群上部署 NGINX 服务。
我将在公共云提供商托管的虚拟机上运行此部署。与许多公共云服务一样,许多服务通常为其虚拟机维护公共和私有 IP 方案。
测试环境
Master Node - Public IP: 104.197.170.99 and Private IP: 10.128.15.195
Worker Node 1 - Public IP: 34.67.149.37 and Private IP: 10.128.15.196
Worker Node 2 - Public IP: 35.232.161.178 and Private IP: 10.128.15.197
在 Kubernetes 集群上部署 NGINX
我们将从主节点运行此部署。
让我们首先检查集群的状态。您的所有节点都应处于READY状态。
kubectl get nodes
我们使用 NGINX 映像创建 NGINX 部署。
kubectl create deployment nginx --image=nginx
您现在可以看到部署的状态。
kubectl get deployments
如果您想查看有关部署的更多详细信息,可以运行describe命令。例如,可以确定有多少部署副本正在运行。在我们的例子中,我们期望看到 1 的副本正在运行(即 1/1 副本)。
kubectl describe deployment nginx
现在您的 Nginx 部署已激活,您可能希望将 NGINX 服务公开到互联网上可访问的公共 IP。
将您的 Nginx 服务公开到公共网络
Kubernetes 在基于称为 Kubernetes 服务类型的功能公开服务时提供了多种选项,它们是:
- ClusterIP – 此服务类型通常在内部 IP 上公开服务,只能在集群内访问,并且可能只能在集群节点内访问。
- NodePort – 这是将服务公开为可在集群外部、集群中每个节点上的特定端口(称为 NodePort)上访问的最基本选项。我们将很快说明这个选项。
- LoadBalancer – 此选项利用各个提供商提供的外部负载平衡服务来允许访问您的服务。当考虑服务的高可用性时,这是一个更可靠的选项,并且具有默认访问之外的更多功能。
- ExternalName – 此服务将流量重定向到集群外部的服务。因此,该服务会映射到可以托管在集群之外的 DNS 名称。值得注意的是,这不使用代理。
默认服务类型是ClusterIP。
在我们的场景中,我们希望使用 NodePort 服务类型,因为我们同时拥有公共和私有 IP 地址,并且目前不需要外部负载均衡器。对于此服务类型,Kubernetes 将在 30000+ 范围内的端口上分配此服务。
kubectl create service nodeport nginx --tcp=80:80
运行 get svc 命令以查看服务和公开端口的摘要。
kubectl get svc
现在您可以使用curl 命令验证Nginx 页面在所有节点上均可访问。
curl master-node:30386
curl node-1:30386
curl node-2:30386
可以看到,可以到达“WELCOME TO NGINX!”页面。
访问临时公共 IP 地址
您可能已经注意到,Kubernetes 报告我没有注册活动公共 IP,或者更确切地说,没有注册 EXTERNAL-IP。
kubectl get svc
让我们验证一下是否确实如此,即我没有使用 IP 命令将外部 IP 连接到我的接口。
ip a
如您所见,没有公共 IP。
如前所述,我目前正在公共云提供商提供的虚拟机上运行此部署。因此,虽然没有为特定接口分配公共 IP,但虚拟机提供商已颁发了临时外部 IP 地址。
临时外部 IP 地址是在虚拟实例停止之前保持连接到 VM 的临时 IP 地址。当虚拟实例重新启动时,会分配一个新的外部IP。基本上来说,这是服务提供商利用闲置公共 IP 的一种简单方法。
这里的挑战,除了您的公共 IP 不是静态的事实之外,还在于临时公共 IP 只是专用 IP 的扩展(或代理),因此,该服务将只能在端口 30386 上访问。这意味着将通过 URL
访问该服务,即 104.197.170.99:30386,如果您检查您的浏览器应该能够看到欢迎页面。
这样,我们就成功在 3 节点 Kubernetes 集群上部署了 NGINX。