第五章:Nginx Ingress安装与配置_《再也不踩坑的kubernetes实战指南》

第五章 Nginx Ingress安装与配置

一、Nginx Ingress 核心架构
请求
路由规则
配置生成
代理流量
负载均衡
负载均衡
Client
Ingress Controller
Ingress 资源
Nginx 配置文件
K8s Service
Pod v1
Pod v2
二、重点功能详解
1. SSL/TLS 证书配置

核心步骤:

  • 创建 TLS Secret
apiVersion: v1
kind: Secret
metadata:
  name: my-tls-secret
type: kubernetes.io/tls
data:
  tls.crt: base64编码证书
  tls.key: base64编码私钥
  • Ingress 引用 Secret
spec:
  tls:
  - hosts:
    - mydomain.com
    secretName: my-tls-secret

难点突破:
证书自动更新方案需配合 cert-manager,自动申请 Let’s Encrypt 证书。

2. 灰度发布(Canary)

流量切分策略:

70% 30% 流量分配比例 v1版本 v2版本

Annotations 配置:

nginx.ingress.kubernetes.io/canary: "true"
nginx.ingress.kubernetes.io/canary-weight: "30" # 30%流量到新版本
nginx.ingress.kubernetes.io/canary-by-header: "X-User-Type" # 按Header分流
3. 速率限制

配置参数解析:

nginx.ingress.kubernetes.io/limit-connections: 10 # 单IP最大连接数
nginx.ingress.kubernetes.io/limit-rps: 5 # 每秒请求数限制
nginx.ingress.kubernetes.io/limit-burst: 20 # 突发流量缓冲

生效原理:
基于 Nginx 的 limit_req 模块实现令牌桶算法控制流量速率。

三、典型配置错误排查流程
Events报错
404错误
访问异常
检查 Ingress 状态
查看证书Secret是否存在
检查Service端口匹配
验证Endpoints是否正常
检查Pod是否Ready
查看Nginx日志
kubectl logs -n ingress-nginx
四、高级技巧:多路径重写

场景:/api/v1/ 重定向到新版接口 /api/v2/
配置示例:

annotations:
  nginx.ingress.kubernetes.io/rewrite-target: /api/v2/$1
spec:
  rules:
  - http:
      paths:
      - path: /api/v1/(.*)
五、生产环境注意事项
  1. 性能调优:

    • 调整 Nginx worker_processes 数量与节点CPU核数对齐
    • 启用 HTTP/2 提升传输效率
  2. 安全加固:

    • 配置 WAF 规则防止 SQL 注入
    • 禁用不必要的 HTTP 方法(如 TRACE)
  3. 监控指标:

    • 通过 Prometheus 监控请求成功率、延迟等关键指标
    • 设置 Ingress 错误率告警阈值

通过以上结构化解析,可系统掌握 Nginx Ingress 在 Kubernetes 中的高阶用法,快速定位和解决实际运维中的复杂问题。

第五章 Nginx Ingress 配置多选测试题


  1. 关于 Nginx Ingress 的 SSL 配置,以下哪些注解是必需的?
    A. nginx.ingress.kubernetes.io/ssl-redirect: "true"
    B. nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
    C. kubernetes.io/tls-acme: "true"
    D. nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"

  2. 实现请求重写(Rewrite)时,以下哪些配置是正确的?
    A. nginx.ingress.kubernetes.io/rewrite-target: /$1
    B. nginx.ingress.kubernetes.io/configuration-snippet: rewrite ^/oldpath /newpath;
    C. nginx.ingress.kubernetes.io/permanent-redirect: "https://example.com/new"
    D. nginx.ingress.kubernetes.io/temporal-redirect: "https://example.com/temp"

  3. 配置 Nginx Ingress 实现基于 IP 的黑名单时,正确的做法包括:
    A. 在 ConfigMap 中定义 block-cidrs 列表
    B. 使用注解 nginx.ingress.kubernetes.io/deny-cidrs: "192.168.0.0/24"
    C. 在 Ingress 资源中添加 nginx.ingress.kubernetes.io/whitelist-source-range: "10.0.0.0/8"
    D. 通过 nginx.ingress.kubernetes.io/server-snippet 添加 deny 规则

  4. 关于速率限制的配置,以下哪些参数组合是正确的?
    A. nginx.ingress.kubernetes.io/limit-connections: "10"
    B. nginx.ingress.kubernetes.io/limit-rps: "100"
    C. nginx.ingress.kubernetes.io/limit-rpm: "6000"
    D. nginx.ingress.kubernetes.io/limit-burst: "20"

  5. 实现金丝雀发布(Canary Release)时,以下哪些注解是有效的?
    A. nginx.ingress.kubernetes.io/canary: "true"
    B. nginx.ingress.kubernetes.io/canary-weight: "30"
    C. nginx.ingress.kubernetes.io/canary-by-header: "X-Canary"
    D. nginx.ingress.kubernetes.io/canary-by-cookie: "canary_enabled"

  6. 配置基本认证(Basic Auth)时,必须完成的步骤包括:
    A. 创建包含用户名密码的 Secret
    B. 在 Ingress 注解中指定 nginx.ingress.kubernetes.io/auth-type: basic
    C. 在 Ingress 中引用 Secret 名称
    D. 在 Nginx 配置中手动添加 auth_basic 指令

  7. 关于错误页面重定向,以下哪些配置是可行的?
    A. nginx.ingress.kubernetes.io/custom-http-errors: "404,500"
    B. nginx.ingress.kubernetes.io/default-backend: error-service
    C. nginx.ingress.kubernetes.io/configuration-snippet: error_page 502 /custom-error.html;
    D. 在 ConfigMap 中定义 custom-errors: "404=/error/404.html"

  8. 以下哪些配置可以实现 HTTP 到 HTTPS 的自动跳转?
    A. 在 Ingress 中设置 tls 字段
    B. 添加注解 nginx.ingress.kubernetes.io/ssl-redirect: "true"
    C. 在 Service 中指定 port: 443
    D. 修改 Nginx 配置文件中的 listen 80listen 443

  9. 配置请求头匹配路由时,正确的注解用法是:
    A. nginx.ingress.kubernetes.io/request-headers: "X-Env=prod"
    B. nginx.ingress.kubernetes.io/server-snippet: "if ($http_x_env = 'prod') { ... }"
    C. 在 Ingress 规则中使用 http.header.match 字段
    D. 使用 nginx.ingress.kubernetes.io/conditions: "X-Env=prod"

  10. 关于全局配置(ConfigMap)的作用范围,以下说法正确的是:
    A. proxy-connect-timeout 可以全局设置所有 Ingress 的超时时间
    B. ssl-protocols 的全局配置会覆盖单个 Ingress 的注解
    C. hsts: "true" 在 ConfigMap 中启用后会强制所有请求使用 HTTPS
    D. custom-http-errors 只能在 Ingress 级别配置


答案及解析

  1. AB

    • A 和 B 是启用 SSL 自动跳转的关键注解。C 是证书自动签发(如 Let’s Encrypt)相关,非必需。D 是定义后端协议,与 SSL 配置无关。
  2. AB

    • A 是标准的 Rewrite Target 注解。B 通过代码片段自定义重写规则。C 是永久重定向注解,D 不存在 temporal-redirect
  3. BD

    • B 直接通过注解拒绝指定 CIDR。D 通过代码片段添加 deny 规则。A 和 C 是白名单配置。
  4. BD

    • B 表示每秒请求数限制(Requests Per Second),D 是突发请求数。A 和 C 的参数名称错误(正确为 limit-rpslimit-rpm 不存在)。
  5. ABC

    • A 启用金丝雀,B 设置权重,C 根据 Header 分流。D 不存在 canary-by-cookie 注解。
  6. AC

    • A 创建 Secret 存储密码,C 在 Ingress 中引用 Secret。B 注解不存在,D 需通过注解自动生成配置。
  7. AC

    • A 定义需要捕获的错误码,C 通过代码片段自定义错误页面。B 的注解名称错误,D 的 ConfigMap 配置方式不存在。
  8. AB

    • A 启用 TLS 并配合 B 的 ssl-redirect 实现跳转。C 和 D 是端口配置,不直接关联跳转。
  9. B

    • B 使用代码片段匹配 Header。A 和 D 的注解不存在,C 的字段不存在于 Ingress 规范。
  10. AB

  • A 正确,全局超时生效。B 正确,全局配置优先级更高。C 错误,HSTS 是强制浏览器使用 HTTPS,需配合 SSL。D 错误,custom-http-errors 可在全局或 Ingress 配置。

你可能感兴趣的:(k8s,nginx,kubernetes,笔记)