部署Nginx并通过Ingress暴露和监控服务

更新时间: 2023-12-11 10:22:41

一键部署

45

https://www.aliyun.com/solution/tech-solution/nginx_ingress

方案概览

容器服务 Kubernetes 版 ACK(Container Service for Kubernetes)提供丰富的集群及应用的管理运维功能,支持企业级容器化应用的全生命周期管理。在自建Kubernetes集群中,手动部署集群步骤较为复杂,集群应用的运维管理往往需要您手动维护和探索。ACK支持在控制台快速创建集群,接入日志服务 SLS(Simple Log Service)提供日志采集方案和看板。

本技术解决方案以部署Nginx并通过Ingress暴露和监控服务为例,为您演示:

  • 如何快速创建ACK集群并在集群中使用YAML文件部署无状态应用。

  • 如何创建Service发布Nginx应用并通过Nginx Ingress组件暴露服务。

  • 如何在SLS控制台查看Nginx Access日志。

方案架构

方案提供的默认设置完成部署后在阿里云上部署、发布并监控Nginx应用的架构如下图所示。实际部署时您可以根据资源规划修改部分设置,但最终形成的运行环境与下图相似。

使用YAML部署.jpg

本方案的技术架构包括以下基础设施和云服务:

  • 1个地域:ACK集群、SLS Project均部署在统一地域下。

  • 1个专有网络VPC:形成云上私有网络,确保核心云资源的网络环境,如容器服务ACK。

  • ACK集群:简单、低成本、高可用的Kubernetes集群,支持应用管理,无需您管理控制面板。

  • 日志服务SLS:提供日志采集服务以及可视化看板。

部署准备

10

开始部署前,请按以下指引完成账号申请、账号充值、RAM用户创建和授权。

准备账号

  1. 如果您还没有阿里云账号,请访问阿里云账号注册页面,根据页面提示完成注册。阿里云账号是您使用云资源的付费实体,因此是部署方案的必要前提。

  2. 为阿里云账号充值

    • 本方案的云资源支持按量付费,且默认设置均采用按量付费引导操作。请确保您的账户余额大于等于100元。

    • 完成本方案的部署及体验,预计产生费用约为5元(假设您配置ACK集群时选择本文指导的规格资源,且资源运行时间不超过45分钟。实际情况可能会因您操作过程中使用的资源规格和流量差异,导致费用有所变化,请以控制台显示的实际报价以及最终账单为准)。

      产品

      费用来源

      规格

      预估费用参考

      容器服务 Kubernetes 版

      CLB Ingress费用

      标准型I(slb.s2.small)

      实例费用:0.34/小时

      流量费用:0.8/GB

      CLB API Server费用

      标准型I(slb.s1.small)

      0.1元/时

      NAT费用

      公网NAT网关

      • 实例费:0.195元/时

      • 容量单位CU费:0.195元/CU

      EIP费用

      不涉及

      • EIP配置费:0.02元/小时

      • 流量费用:0.8元/GB

      ECS费用

      3个计算型 c6 4 vCPU 8GiB的实例;系统盘为云盘ESSD,40GiB,PL1。

      2.592元/小时

      集群管理费用

      不涉及

      0.64元/小时

      日志服务 SLS

      写入数据存储费用

      不涉及

      0.4 元/GB

      按量费用:3.887元/时

      CU容量费用产品:1个

      流量费用产品:3个

  3. 阿里云账号拥有操作资源的最高权限,从云资源安全角度考虑,建议您创建RAM用户。RAM用户需要获得相关云服务的访问权限才能完成方案部署,详情如下:

    1. 访问RAM控制台-用户页面,单击创建用户,填写相关信息,勾选控制台访问OpenAPI 调用访问,自定义密码并选择无需重置密码,创建一个RAM用户。

    2. 在RAM用户列表的操作列,单击目标RAM用户对应的添加权限。在添加权限面板,在选择权限策略的系统策略区域,搜索并新增如下权限,然后单击确定

      涉及的云服务:资源编排 ROS、容器服务 Kubernetes 版、日志服务SLS、专有网络 VPC、云服务器 ECS、费用中心 BSS。

      每次支持最多绑定5条策略,请分2次操作添加如下权限。

      云服务

      需要的权限

      描述

      资源编排 ROS

      AliyunROSFullAccess

      管理资源编排服务 ROS的权限。

      容器服务 ACK

      AliyunCSFullAccess

      管理容器服务 ACK的权限。

      日志服务 SLS

      AliyunLogFullAccess

      管理日志服务 SLS的权限

      专有网络 VPC

      AliyunVPCFullAccess

      管理专有网络 VPC的权限。

      云服务器 ECS

      AliyunECSFullAccess

      管理云服务器服务 ECS的权限。

      访问控制 RAM

      AliyunRAMFullAccess

      管理访问控制 RAM的权限,即管理用户以及授权的权限

      费用中心 BSS

      AliyunBSSReadOnlyAccess

      只读访问费用中心 BSS的权限。

      创建RAM用户后,您可以使用RAM用户登录阿里云控制台,开始本方案的部署和体验。

      RAM用户的使用请参见创建RAM用户创建自定义权限策略为RAM用户授权

    3. 单击云资源访问权限,然后单击同意授权

      此页权限为可供容器服务 ACK使用的角色。授权后,ACK拥有对您云资源相应的访问权限。

一键部署

10

您可以通过下方提供的ROS一键部署链接,来自动化地完成以下资源的创建和配置。部署完成后,您可以参见教程实现并体验如何通过MSE微服务治理完成ACK应用的全链路灰度。

  • 创建一个ACK Pro版集群

  • 开通日志服务SLS

ROS部署前置资源

  1. 单击一键配置前往ROS控制台,系统自动打开并停留在配置模板参数页面,请在配置资源栈前在页面上方选择地域。本方案示例地域为华东1(杭州)。

  2. 配置模板参数页面,配置基础信息,确认无误后单击创建

    配置项

    说明

    示例

    资源栈名称

    本资源栈的名称。保持默认即可。

    保持默认

    集群名称

    ACK托管版集群的名称。本方案中的ACK集群名称默认为cluster-for-nginx。如您的账号下已存在同名ACK集群,请更改该名称,避免集群名称重复导致的资源栈创建失败。

    cluster-for-nginx

    可用区

    在规划的地域内选择可用区。

    可用区I

    节点规格

    Worker节点规格:支持选择多个实例规格。可通过vCPU内存筛选实例规格,也可选择架构分类。本方案选择通用型实例规格即可。关于ECS选型的最佳实践请参见选型最佳实践

    • 计算型 c6 4 vCPU 8GiB

  3. 资源栈信息页面的状态显示为创建成功时表示一键配置完成。

部署、发布并对外暴露应用

15

Nginx是一个开源反向代理服务器,部署Nginx应用并创建Service后,Nginx Service可通过集群虚拟IP(Cluster IP)、节点端口(NodePort)或负载均衡(LoadBalancer)来公开端口,将流量分到Pod,暴露应用程序。而Nginx Ingress支持通过Nginx Ingress Controller组件定义从集群外部访问集群内部服务的规则,将集群外部流量转发到相应的后端Service或Pod上。更多信息,请参见管理Nginx Ingress Controller组件

1、部署Nginx应用

  1. 登录容器服务管理控制台,在左侧导航栏选择集群

  2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择工作负载 > 无状态

  3. 无状态页面,单击使用YAML创建资源,对模板进行相关配置,完成配置后单击创建

    • 在页面顶部设置命名空间default,并设置示例模板Resource - basic Deployment

    • 配置日志采集。有关更多日志参数的配置信息,请参见通过日志服务采集Kubernetes容器日志

      在模板中的spec字段下添加以下内容。

      说明

      下方示例代码中aliyun_logs_log-nginxvarlog表示创建一个名为log-nginxvarlog的Logstore,日志采集路径为stdout的配置,从而将容器的标准输出采集到Logstore中。

      env:
      - name: aliyun_logs_log-nginxvarlog
        value: stdout

      配置日志采集

    • 将Nginx镜像版本改为 1.9.1。设置镜像

    创建成功后,单击页面左上方的image.png,可以在无状态页签下查看创建成功的Nginx应用。Nginx

2、创建Service发布Nginx应用

  1. 在集群管理页左侧导航栏,选择网络 > 服务

  2. 服务页面,单击创建,然后在创建服务对话框,配置服务信息,然后单击创建

    参数

    说明

    示例值

    名称

    设置服务名称。

    nginxservice

    类型

    支持多种设置类型虚拟集群IP

    虚拟集群IP

    关联

    设置关联对象。

    nginx-deployment-basic

    端口映射

    自定义端口名称,配置服务端口为80,容器端口为80,协议TCP

    • test

    • 80

    • 80

    • TCP

3、创建Nginx Ingress路由对外暴露Nginx应用

  1. 在集群管理页左侧导航栏,选择网络 > 路由

  2. 路由页面,单击创建 Ingress

  3. 选择网关类型Nginx,参照下方内容配置路由,然后单击确定

    以下为重点配置项,其他配置项的说明请参见创建Nginx Ingress

    • 名称:自定义路由名称,本示例设置为ingress-demo。

    • 规则:域名置空,设置路径/,匹配规则为默认,设置服务名称为上文创建的服务名称,即nginxservice,端口自动绑定为80。

    等待1分钟左右,路由列表的端点列将显示路由的IP。在浏览器中输入端点IP,显示以下页面,表明路由创建成功。Nginx

完成及清理

10

方案验证

Nginx应用成后发布并对外暴露后,Nginx Ingress Controller支持将所有HTTP请求日志记录到标准输出中。您可以在SLS控制台查看Nginx应用的访问日志,监控Nginx Ingress实时状态。

  1. 登录容器服务管理控制台,在左侧导航栏选择集群

  2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择集群信息

  3. 单击集群资源页签,单击日志服务Project的ID,跳转至日志库。

  4. 在日志库中,选择log-nginxvarlog,查看最近访问日志。

    日志

清理资源

完成本方案后,如您无需使用相关资源,请清理相关数据和资源。

  • ROS资源

    如果无需使用资源,可以资源栈下的资源,包括1个ACK集群、1个MSE Nacos实例、1个MSE网关云原生网关实例。

    1. 登录ROS控制台,然后在左侧导航栏,选择资源栈

    2. 资源栈页面的顶部选择部署的资源栈所在地域,找到资源栈,然后在其右侧操作列,单击删除

      本方案会自动创建两个资源栈,一个由您部署时创建,另一个以k8s-开头,由ACK创建集群时创建。请删除非k8s-开头的资源栈,删除此资源栈时将自动删除k8s-开头的资源栈。

    3. 删除资源栈对话框,选择删除方式释放资源,然后单击确定,根据提示完成资源释放。

  • 日志服务 SLS

    1. 登录日志服务控制台,在Project列表区域定位目标Project并复制Project名称,然后在操作列,单击删除

    2. 在删除面板,输入Project名称,选择删除原因,然后单击确定