第五章:Nginx Ingress安装与配置_《再也不踩坑的kubernetes实战指南》
第五章 Nginx Ingress安装与配置
一、Nginx Ingress 核心架构
二、重点功能详解
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)
流量切分策略:
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 模块实现令牌桶算法控制流量速率。
三、典型配置错误排查流程
四、高级技巧:多路径重写
场景: 将 /api/v1/ 重定向到新版接口 /api/v2/
配置示例:
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /api/v2/$1
spec:
rules:
- http:
paths:
- path: /api/v1/(.*)
五、生产环境注意事项
-
性能调优:
- 调整 Nginx worker_processes 数量与节点CPU核数对齐
- 启用 HTTP/2 提升传输效率
-
安全加固:
- 配置 WAF 规则防止 SQL 注入
- 禁用不必要的 HTTP 方法(如 TRACE)
-
监控指标:
- 通过 Prometheus 监控请求成功率、延迟等关键指标
- 设置 Ingress 错误率告警阈值
通过以上结构化解析,可系统掌握 Nginx Ingress 在 Kubernetes 中的高阶用法,快速定位和解决实际运维中的复杂问题。
第五章 Nginx Ingress 配置多选测试题
-
关于 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" -
实现请求重写(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" -
配置 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规则 -
关于速率限制的配置,以下哪些参数组合是正确的?
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" -
实现金丝雀发布(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" -
配置基本认证(Basic Auth)时,必须完成的步骤包括:
A. 创建包含用户名密码的 Secret
B. 在 Ingress 注解中指定nginx.ingress.kubernetes.io/auth-type: basic
C. 在 Ingress 中引用 Secret 名称
D. 在 Nginx 配置中手动添加auth_basic指令 -
关于错误页面重定向,以下哪些配置是可行的?
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" -
以下哪些配置可以实现 HTTP 到 HTTPS 的自动跳转?
A. 在 Ingress 中设置tls字段
B. 添加注解nginx.ingress.kubernetes.io/ssl-redirect: "true"
C. 在 Service 中指定port: 443
D. 修改 Nginx 配置文件中的listen 80为listen 443 -
配置请求头匹配路由时,正确的注解用法是:
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" -
关于全局配置(ConfigMap)的作用范围,以下说法正确的是:
A.proxy-connect-timeout可以全局设置所有 Ingress 的超时时间
B.ssl-protocols的全局配置会覆盖单个 Ingress 的注解
C.hsts: "true"在 ConfigMap 中启用后会强制所有请求使用 HTTPS
D.custom-http-errors只能在 Ingress 级别配置
答案及解析
-
AB
- A 和 B 是启用 SSL 自动跳转的关键注解。C 是证书自动签发(如 Let’s Encrypt)相关,非必需。D 是定义后端协议,与 SSL 配置无关。
-
AB
- A 是标准的 Rewrite Target 注解。B 通过代码片段自定义重写规则。C 是永久重定向注解,D 不存在
temporal-redirect。
- A 是标准的 Rewrite Target 注解。B 通过代码片段自定义重写规则。C 是永久重定向注解,D 不存在
-
BD
- B 直接通过注解拒绝指定 CIDR。D 通过代码片段添加
deny规则。A 和 C 是白名单配置。
- B 直接通过注解拒绝指定 CIDR。D 通过代码片段添加
-
BD
- B 表示每秒请求数限制(Requests Per Second),D 是突发请求数。A 和 C 的参数名称错误(正确为
limit-rps和limit-rpm不存在)。
- B 表示每秒请求数限制(Requests Per Second),D 是突发请求数。A 和 C 的参数名称错误(正确为
-
ABC
- A 启用金丝雀,B 设置权重,C 根据 Header 分流。D 不存在
canary-by-cookie注解。
- A 启用金丝雀,B 设置权重,C 根据 Header 分流。D 不存在
-
AC
- A 创建 Secret 存储密码,C 在 Ingress 中引用 Secret。B 注解不存在,D 需通过注解自动生成配置。
-
AC
- A 定义需要捕获的错误码,C 通过代码片段自定义错误页面。B 的注解名称错误,D 的 ConfigMap 配置方式不存在。
-
AB
- A 启用 TLS 并配合 B 的
ssl-redirect实现跳转。C 和 D 是端口配置,不直接关联跳转。
- A 启用 TLS 并配合 B 的
-
B
- B 使用代码片段匹配 Header。A 和 D 的注解不存在,C 的字段不存在于 Ingress 规范。
-
AB
- A 正确,全局超时生效。B 正确,全局配置优先级更高。C 错误,HSTS 是强制浏览器使用 HTTPS,需配合 SSL。D 错误,
custom-http-errors可在全局或 Ingress 配置。
更多推荐

所有评论(0)