Kubernetes 是一个广泛使用的容器编排工具,能够大规模管理容器化应用程序。它可以快速扩展容器化应用程序,使其具备高可用性和弹性。部署一个 Nginx 服务在 Kubernetes 上可以让您更好地利用 Kubernetes 的能力和优势,本文将详细介绍 Kubernetes 上部署 Nginx 的最佳实践。
准备工作
在部署 Nginx 服务之前,您需要创建一个 Kubernetes 集群。如果您还没有一个 Kubernetes 集群,可以使用 Minikube 搭建一个本地的测试环境。
此外,您还需要安装 Kubernetes CLI 工具,比如 kubectl 命令行工具,以及 Helm 包管理器。
步骤一:创建 Nginx Deployment
在 Kubernetes 中,一个 Deployment 负责部署应用程序的一个副本集,并执行滚动升级和自动修复等操作。因此,我们首先需要创建一个 Nginx 的 Deployment。
使用以下 YAML 文件创建一个名为 nginx-deployment 的 Deployment:
-- -------------------- ---- ------- ----------- ------- ----- ---------- --------- ----- ---------------- ----- --------- - --------- ------------ ---- ----- --------- --------- ------- ---- ----- ----- ----------- - ----- ----- ------ ------------------- ------ - -------------- --
这个 YAML 文件指定了一个由 3 个副本组成的 Deployment,在每个副本中都运行该 Nginx 镜像,该镜像映射到容器端口 80。该部署的 selector 属性告诉 Kubernetes 现在有一个名为 "nginx" 的应用程序,应该选择属于 "nginx" 应用程序的所有 pod。
执行以下命令创建该 Deployment:
kubectl apply -f nginx-deployment.yaml
您可以使用以下命令进行检查:
kubectl get deployment nginx-deployment
步骤二:创建 Nginx Service
在 Kubernetes 中,服务是负责将请求路由到正确的 Pod 的抽象对象。一个 Pod 可能会被创建或者销毁,并被分配到不同的 IP 地址上,但是服务通过一个固定的 IP 地址和端口号对外提供服务。这就为服务消费者提供了一个稳定的地址,而无需关心后端 Pod 的实际位置。因此,我们需要为这个 Nginx 部署创建一个服务。
使用以下 YAML 文件创建一个名为 nginx-service 的服务:
-- -------------------- ---- ------- ----------- -- ----- ------- --------- ----- ------------- ----- --------- ---- ----- ------ - ----- ---- ----- -- ----------- -- ----- ---------
该 YAML 文件中的 type 属性指定了该服务的类型,您可以使用 LoadBalancer 或者 NodePort 等其他类型。
执行以下命令创建该服务:
kubectl apply -f nginx-service.yaml
您可以使用以下命令进行检查 Nginx 服务是否有效:
kubectl get svc nginx-service
步骤三:测试 Nginx 服务
使用以下命令获取服务 IP 地址和端口:
kubectl get svc nginx-service
通过该 IP 地址和端口号,可以测试 Nginx 服务是否正常工作:
curl http://{IP}:{port}
您可以使用 Web 浏览器访问,应该可以看到 Nginx 的默认欢迎页面。这表明您已经成功安装 Nginx。
步骤四:使用 Helm 部署 Nginx-ingress Controller
Nginx-ingress Controller 是 Kubernetes 上的一种 Ingress Controller,特点是使用 Nginx 作为反向代理,处理所有流量,解密 SSL,并根据基于规则的 URL 转发流量到相应的服务。这是一个有效的解决方案,如果您决定将多个域名映射到不同的集群服务上。
使用以下命令安装 Helm:
brew install helm
使用以下命令添加 Nginx-ingress Helm 仓库:
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
安装 Nginx-ingress Controller:
helm install nginx-ingress ingress-nginx/ingress-nginx
检查 Nginx-ingress Controller 是否处于运行状态:
kubectl get pod -n ingress-nginx # Output # NAME READY STATUS RESTARTS AGE # nginx-ingress-controller-768b65d8d7-xqgqz 1/1 Running 0 86s
步骤五:创建 Ingress 资源
在 Kubernetes 中,Ingress 资源允许您定义规则将外部请求路由到集群内的服务。以下是一个例子:
-- -------------------- ---- ------- ----------- -------------------- ----- ------- --------- ----- ------------- ----- ------ - ----- ----------------- ----- ------ - ----- ------ --------- ------ -------- -------- ----- ------------- ----- ----- ----
该 YAML 文件使用 host 属性指定了要为该规则路由到的域名,以及要为该域名路由到的服务。该 YAML 文件告诉 Nginx-ingress 在针对 nginx.example.com 的所有 HTTP 请求中查找前缀为 /nginx 的路径,并将它们路由到 nginx-service 服务上。
执行以下命令创建 Ingress 资源:
kubectl apply -f nginx-ingress.yaml
步骤六:测试 Ingress
通过 Nginx-ingress 在 Kubernetes 中创建并配置的 Ingress 资源,您可以通过浏览器针对您的 Nginx 服务调用它。
要查找当前 Kubernetes 上的 IP 地址,请执行以下命令:
kubectl get ingress
然后,您可以使用 Web 浏览器访问 http://IP address/nginx,以验证 Ingress 服务是否起作用。
总结
在本文中,我们详细介绍了 Kubernetes 上部署 Nginx 的最佳实践。步骤一和步骤二涵盖了如何创建 Nginx Deployment 和 Service。步骤三涵盖了如何测试 Nginx 服务是否有效。步骤四涵盖了如何使用 Helm 部署 Nginx-ingress Controller。步骤五和步骤六则涵盖了如何创建和测试 Kubernetes 中的 Ingress 规则。
通过本文,您应该了解到如何使用 Kubernetes 管理 Nginx 服务。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6486a0b448841e989452b7c1