如何在 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,但 VM 提供商已发布临时外部 IP 地址。
临时外部 IP 地址是临时 IP 地址,在虚拟实例停止之前,该 IP 地址会一直连接到虚拟机。虚拟实例重新启动时,会分配一个新的外部 IP。简单来说,这是服务提供商利用空闲公共 IP 的一种简单方法。
这里的挑战除了您的公共 IP 不是静态的之外,还在于临时公共 IP只是私有 IP 的扩展(或代理),因此,该服务只能在端口 30386 上访问。这意味着该服务将在 URL<PublicIP:InternalPort>
即104.197.170.99:30386上访问,如果您检查浏览器,您应该能够看到欢迎页面。
这样,我们就成功地在 3 节点 Kubernetes 集群上部署了NGINX 。