nginx ingress 是 Kubernetes ingress 的一种实现,您可以通过 nginx ingress 接入 ingress 流量。本文为您介绍 ingress-nginx 组件常见的最佳实践操作。
背景信息
容器服务提供基于社区版的 Nginx Ingress Controller,它将 ingress 规则转换成 nginx 的配置,然后基于 nginx 来进行七层的流量转发。
常用操作
配置实例个数
在容器服务集群中安装 ingress-nginx 组件后,组件的默认实例个数为 2。您也可以调整实例个数,满足生产业务的高可用。
- 在左侧导航栏中选择 集群。单击目标集群名称,进入集群管理页面。
- 在左侧导航栏中选择 组件管理,并选择 网络 页签。
- 将鼠标移动到 ingress-nginx 组件上,单击 部署。
-
- 在 ingress-nginx 规格配置 对话框,配置 实例个数 为所需数值,然后单击 确定。
-
- (可选)当 ECS 的节点数大于或等于实例个数时,需要配置 ingress-nginx-controller 的反亲和调度策略,使组件的多个实例分散调度到不同的节点上。
说明
安装 ingress-nginx 组件后,会以无状态负载(对应名称为 ingress-nginx-controller)的方式部署到集群中。
- 在集群管理页面的左侧导航栏中,选择 工作负载 > 无状态负载。
- 在 无状态负载 页面的 kube-system 命名空间下,找到 ingress-nginx-controller,单击对应 操作 列的... > 更新。
-
-
修改资源限制
默认配置下,ingress-nginx-controller 的 CPU 资源限制是 0.5 core,内存限制是 1 GiB。如果您的业务流量较大,建议资源配额 CPU 上限不低于1 core,内存上限不低于2 GiB。您可以根据业务的实际需要调整 ingress-nginx-controller 组件的资源限制。
说明
- 更改 ingress-nginx-controller 的资源配额前,首先确保实例个数在 2 以上。详细操作,请参见本文上方 配置实例个数。
- 更改配置后滚动更新实例,可能会造成业务流量抖动在 1 分钟以内长链接中断重连,因此建议您在业务流量低峰期操作。
- 在左侧导航栏中选择 集群。单击目标集群名称,进入集群管理页面。
- 在左侧导航栏中选择 组件管理,并选择 网络 页签。
- 将鼠标移动到 ingress-nginx 组件上,单击 配置。
-
专属节点
为了进一步确保 nginx ingress 的性能和稳定性,可以将 ingress-nginx-controller 的多个实例部署在一些高配置节点上,以避免不同实例资源的抢占和单点故障。
下面以 ingress-nginx-controller 的 2 个实例分别独占 2 个专属节点为例,介绍配置步骤。
- 在集群中创建两个专属的 Worker 节点。您可以在已有节点池中增加 2 个新的节点,也可以通过创建节点池的方式新增 2 个专属节点。详细操作,请参见 新增节点。
- 分别给两个专属节点添加键:ingress-nginx、值:true 的标签。详细操作,请参见 标签管理。
-
- 分别给两个专属节点添加污点,禁止没有容忍度的 Pod 调度到专属节点上。此处使用和标签相同的键/值。详细操作,请参见 污点管理。
-
- 配置工作负载的污点容忍规则,使 ingress-nginx-controller 实例可以被调度到专属节点上。详细参数说明,请参见 创建无状态负载 中的调度策略参数说明。
-
-
- 为 log-collector 等 daemonset(守护进程)设置相同的污点容忍规则,使相应的实例可以部署到专属节点上进行工作。
- 设置 nodeSelector 使 ingress-nginx-controller 实例只能调度到专属节点,禁止实例调度到其他节点。
- 设置反亲和调度策略,使 ingress-nginx-controller 的两个实例不能被调度到同一个节点上,保障高可靠。
-
- 配置完成后,查看 ingress-nginx-controller 的实例部署情况
-
监控和告警
您可以使用云原生观测对 ingress-nginx-controller 进行监控,并根据实际需求配置告警。详情请参见 Ingress 服务观测。 日志持久化
默认情况下,ingress-nginx-controller 的日志没有进行持久化存储,需要您进行配置开启,实现 ingress-nginx-controller 日志持久化采集、存储以及查询。为了更好地展示 ingress-nginx-controller 日志内容,提升可读性,容器服务将 ingress-nginx-controller 日志采集作为一个独立功能供您使用。
说明
- 需要开通日志服务。若未开通,请登录 日志服务控制台,根据控制台向导提示,开通服务。
- 需要安装 log-collector 组件、ingress-nginx 组件。相关操作,请参见 安装组件。
- 需要提前在日志服务中创建 日志项目 和 日志主题。详细操作,请参见 日志项目 和 日志主题。
-
- 当不需要 ingress-nginx 日志时,可以单击 组件日志 页签下的 关闭 Ingress 访问日志。关闭后,系统不再采集 Ingress Nginx Controller 组件的日志。
自定义配置原生参数
在 Kubernetes 集群中,路由规则(ingress)对集群服务(service)中外部可访问的 API 对象进行管理,提供七层负载均衡能力,可以给 ingress 配置提供外部可访问的 URL、Rewrite 配置、HTTPS 服务、以及灰度发布功能等高级功能。
ingress nginx 原生支持的部分高级功能/高级配置可以基于 Annotation 的方式进行配置和实现。在每个ingress Yaml 的 Annotation 里配置,只对本 ingress 生效。更多信息请参见 Annotations。 配置示例:自定义最大请求体
对于 nginx,当请求 body 大小超过客户端请求最大允许值时,将向客户端返回413错误。 这个大小可以通过参数client_max_body_size来配置。
- 如果您想为集群内所有的 ingress 规则配置全局参数,可以在 配置项 中对 kube-system 下的 ingress-nginx-controller 增加 proxy-body-size 键值对。
-
-
-
- 更新 configmap 后,进入 kube-system 下的 ingress-nginx-controller 容器内查看 nginx 配置是否生效。
-
- 如果只针对 特定的 ingress 规则 使用自定义值,可以在此 ingress 规则中添加 Annotaion。
-
-