Administrator
发布于 2026-08-19 / 1 阅读
0
0

第十章.k8sHELM-Ingress-nginx-4

来源链接:https://www.bilibili.com/video/BV1PbeueyE8V?spm_id_from=333.788.videopod.episodes&vd_source=d8c71ff24a3359a807967fc4b5daa0e4&p=76

1. 前置准备:清理历史实验资源

  • 清理此前实验创建的Deployment、Service、Ingress资源,避免历史配置干扰当前实验流程
  • 观察测试Pod状态:此前创建的Bacon Pod初始处于ContainerCreating状态,因需从镜像仓库拉取镜像,拉取完成后自动进入Running状态

2. Ingress默认错误行为与自定义错误页

2.1 默认行为验证

  • 基于此前学习的rewrite(路径重写)实验资源(Rewind地址跳转、路径重写规则)进行验证:
    • 访问正常路径可正常转发到后端服务,请求正常处理
    • 访问不存在的路径时,默认返回Ingress-nginx的通用错误页(如视频中的“权力修复 万万猜数游戏”页面)
  • 关键结论:默认情况下,仅后端服务返回502/503等网关类错误时,Ingress-nginx才会捕获并返回默认错误页;若后端服务正常处理请求但返回404(如访问了后端不存在的路由,但服务本身运行正常),Ingress-nginx会判定为正常请求,不会触发默认错误页,这类低级别错误需要自定义错误页捕获

2.2 自定义错误页配置

  • 支持两种配置维度:全局默认自定义错误页(对所有Ingress生效)、单Ingress定制化错误页
  • 配置示例资源:
    • Deployment errtest:镜像为nginx:latest,标签app=errtest
    • Service:匹配errcode Deployment
    • Deployment errcode:镜像为wangyanglinux/tools:errweb1.0,用于测试定制化错误页效果
    • Ingress资源err.xinxianghf.com(命名空间default):
      • 默认后端为errtest对应的Service(端口80)
      • 自定义404、415错误码的返回页面,由errcode Deployment提供
  • 验证效果:访问err.xinxianghf.com的不存在路径时,会返回自定义错误页,而非后端原始404响应
  • 补充实验:猜数游戏场景下,后端随机数为52,提交错误答案51时,Ingress-nginx会捕获后端返回的错误,返回自定义错误页,验证自定义错误页可捕获后端特定错误码

3. Snippet配置实现UA感知路由跳转

  • Snippet是Ingress-nginx提供的扩展配置能力,支持写入原生nginx兼容的配置片段,实现复杂路由逻辑
  • 本节演示场景:移动端(Android/iPhone)与PC端访问同一域名,跳转到不同服务

3.1 前置配置

  • Snippet功能默认关闭,需要先修改Ingress-nginx控制器的ConfigMap,开启snippet配置,保存后重建Ingress-nginx的Pod让配置生效

3.2 配置示例资源

  • Deployment snippet:镜像为nginx:latest
  • Service:匹配snippet Deployment
  • Ingress资源snippet.xinxianghf.com(命名空间default):
    • 配置Snippet规则:
      1. 定义变量agentflag,默认值为0
      2. 若请求的User-Agent(UA)匹配Android或iPhone,将agentflag置为1
      3. 若agentflag为1,则302跳转到www.baidu.com
    • 默认规则:访问根路径时,后端指向snippet对应的Service(端口80)

3.3 验证效果

  • PC端访问snippet.xinxianghf.com,正常返回后端服务的Hallormide页面
  • 移动端(UA标识为Android/iPhone)访问同一域名,自动跳转到www.baidu.com
  • 结论:Snippet可复用nginx原生高级参数,实现复杂的流量路由逻辑

4. Ingress黑白名单配置

  • 黑白名单是基于IP的访问控制能力,核心优先级规则:作用域越小,优先级越高

4.1 基础概念

  • 白名单:默认拒绝所有请求,仅允许白名单中的IP访问
  • 黑名单:默认放行所有请求,仅拒绝黑名单中的IP访问

4.2 配置方式与适用场景

配置方式 生效范围 优先级 适用场景
Ingress Annotations(注解) 仅当前Ingress资源生效 高 白名单:需求较少,仅允许特定IP访问的场景
Ingress-nginx ConfigMap 全局所有Ingress资源生效 低 黑名单:全局拒绝风险IP的场景

4.3 实验演示:黑名单ConfigMap全局配置

  1. 编辑Ingress-nginx控制器的ConfigMap(命名空间ingress-nginx,名称ingress-nginx-controller),添加黑名单规则:deny 192.168.66.12;(拒绝该IP的所有访问)
  2. 为快速生效,删除所有已有Ingress资源,Ingress-nginx会自动重新生成配置
  3. 验证:从192.168.66.12的机器访问Ingress服务,返回403 Forbidden,其他IP访问正常,黑名单生效

4.4 实验演示:黑名单Annotations局部配置

  1. 清理ConfigMap中的黑名单配置,删除所有Ingress资源
  2. 创建测试资源:Deployment black-service、对应Service、Ingress资源,在Ingress的Annotations中添加nginx.ingress.kubernetes.io/deny: "192.168.10.101",拒绝该IP访问
  3. 添加域名解析到Ingress Service的地址,验证:192.168.10.101访问返回403,其他IP访问正常,Annotations配置的黑名单生效

4.5 注意事项

  • 修改ConfigMap后,Ingress-nginx支持热更新,但速度较慢,直接删除Ingress资源让控制器重新生成配置是更快的生效方式
  • 白名单需求较少,建议用Annotations配置,灵活性更高,无需全局修改控制器配置

AI 总结

本节核心讲解了Ingress-nginx的3类高阶流量治理能力:自定义错误页可捕获后端低级别错误(如404)并返回定制化页面;Snippet扩展配置支持复用原生nginx能力,实现UA感知等复杂路由逻辑;黑白名单基于IP实现访问控制,通过Annotations和ConfigMap两种配置方式分别满足局部和全局的访问控制需求,同时明确了不同配置方式的优先级和适用场景,为生产环境的Ingress流量管理提供了实用方案。


评论