You need to enable JavaScript to run this app.
文档中心
容器服务

容器服务

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