Kubernetes-Ingress
文档:https://kubernetes.github.io/ingress-nginx/
Kubernetes Ingress 是 Kubernetes 集群中管理外部访问的核心组件,它提供了灵活的路由规则定义和负载均衡能力
Ingress 概述与核心概念
Ingress 的定义与作用
Ingress 是 Kubernetes 中的一种 API 对象,用于管理和配置集群中的 HTTP 和 HTTPS 服务路由。它充当了集群外部流量和集群内部服务之间的入口,实现了流量的负载均衡、路由和 TLS 终止等功能。
Ingress 的主要优势在于:
- 统一入口:通过一个统一的入口暴露多个服务,避免为每个服务单独配置外部访问方式
- 资源节约:只需一个或少量公网 IP 和负载均衡器即可同时暴露多个 HTTP 服务
- 灵活路由:支持基于域名、路径、HTTP 头部等条件的复杂路由规则
- TLS 终止:可以在集群边缘处理 SSL/TLS 加密解密,减轻后端服务负担
Ingress 与 Service 的关系
在 Kubernetes 网络模型中,Ingress 和 Service 是互补的组件:
- Service:主要用于 L4(传输层)流量的暴露,定义了一组 Pod 的访问入口,可以通过 ClusterIP、NodePort、LoadBalancer 等方式将流量引入到集群内部
- Ingress:主要用于 L7(应用层)流量的路由,可以根据域名、路径等规则对流量进行分发,实现了灵活的路由和负载均衡功能
它们通常结合使用,通过 Ingress 将流量路由到对应的 Service,再由 Service 将流量分发到具体的 Pod。
Ingress 的核心组件
完整的 Ingress 系统包含两个核心部分:
- Ingress 资源对象:Kubernetes 的一个 API 对象,用于编写资源配置规则,定义请求如何转发到后端服务的规则
- Ingress Controller:负责实现 Ingress 规则的组件,监听 Ingress 对象的变化并动态更新代理配置。常见的实现有:
- Nginx Ingress Controller
- Traefik
- HAProxy
- Contour
- Istio
Ingress 工作原理
基本工作流程
Ingress 的工作机制可以概括为以下步骤:
- 定义路由规则:用户通过 Kubernetes API 创建 Ingress 规则,指定域名与集群内服务的映射关系
- 感知规则变化:Ingress 控制器实时监控 Kubernetes API,以便发现 Ingress 规则的更新
- 生成配置:一旦检测到变化,Ingress 控制器自动生成相应的代理配置(如 Nginx 配置)
- 应用配置:新生成的配置被应用到运行中的代理实例,通常无需重启服务
- 流量转发:代理根据更新的配置,将外部请求转发到集群内正确的服务
- SSL/TLS 终止(可选):如果配置了 SSL/TLS,代理可以在转发前终止加密连接
与传统负载均衡的区别
Ingress 相当于一个 7 层的负载均衡器,是 Kubernetes 对反向代理的一个抽象。与传统负载均衡相比:
- 传统负载均衡:如 Nginx、HAProxy,成熟稳定但动态更新需要 reload 配置
- 微服务负载均衡:如 Traefik、Envoy、Istio,专为微服务设计,支持动态更新但性能有待提升
Ingress 控制器详解
常见控制器类型
Kubernetes 支持多种 Ingress 控制器,各有特点:
- Nginx Ingress Controller:
- 基于 Nginx 的反向代理和负载均衡器
- 成熟稳定,性能高
- 支持丰富的注解(annotations)扩展功能
- 需要 reload 配置来应用变更
- Traefik:
- 专为微服务设计的现代 HTTP 反向代理
- 原生支持服务发现和自动配置
- 内置监控和熔断功能
- 配置热更新无需重启
- HAProxy Ingress:
- 高性能 TCP/HTTP 负载均衡器
- 特别适合高并发场景
- 动态配置更新能力
- Istio Ingress Gateway:
- 基于 Envoy 代理构建
- 与 Istio 服务网格深度集成
- 支持高级流量管理策略
控制器部署模式
Ingress 控制器可以以多种方式部署:
- DaemonSet:
- 每个节点运行一个控制器 Pod
- 使用 hostNetwork 或 hostPort 暴露端口
- 适合需要利用所有节点资源的场景
- Deployment:
- 运行指定数量的控制器副本
- 通过 NodePort 或 LoadBalancer 类型的 Service 暴露
- 配合外部负载均衡器实现高可用
- 外部负载均衡器:
- 在云环境中,可以直接使用云提供商提供的负载均衡器
- 如 AWS ALB、GCE 负载均衡器等
部署 Ingress 控制器
bash
wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.6.4/deploy/static/provider/cloud/deploy.yaml修改镜像地址
bash
# 将文件内的镜像下载地址改成国内的
registry.k8s.io/ingress-nginx/controller:v1.6.4
# 替换成阿里云的
registry.cn-hangzhou.aliyuncs.com/google_containers/nginx-ingress-controller:v1.6.4修改网络模式
bash
# 494行新增
hostNetwork: true
...
dnsPolicy: ClusterFirst
hostNetwork: true # 添加
nodeSelector:
kubernetes.io/os: linux
...修改部署资源类型
bash
# 默认deploment,只会在随机节点部署。
# 将nginx-ingress-controller设置成DaemonSet
390 ---
391 apiVersion: apps/v1
392 kind: DaemonSet # 此处修改
393 metadata:部署
bash
kubectl apply -f example-ingress.yamlIngress 配置详解
端口映射关系
| 配置位置 | 示例值 | 说明 |
|---|---|---|
path.backend.port.number | 80 | Service的对外暴漏的虚拟端口 |
Service的spec.ports.port | 80 | 必须与Ingress配置一致 |
Service的spec.ports.targetPort | 8080 | Pod的实际容器端口 |
路径匹配类型
Ingress 支持三种路径匹配方式:
- Prefix:前缀匹配,路径以指定字符串开头
- Exact:精确匹配,路径必须完全一致
- ImplementationSpecific:由具体 Ingress 控制器实现决定
基本配置结构
Ingress 资源的基本 YAML 结构如下:
yaml
apiVersion: networking.k8s.io/v1 # Kubernetes API 版本
kind: Ingress # 资源类型为 Ingress
metadata:
name: example-ingress # Ingress 对象名称
annotations: # 控制器专用配置(Nginx 示例)
# 注解
# 基础配置
kubernetes.io/ingress.class: "nginx" # 指定使用的 Ingress 控制器类型
nginx.ingress.kubernetes.io/ssl-redirect: "false" # 禁用 HTTP 到 HTTPS 的自动跳转
nginx.ingress.kubernetes.io/force-ssl-redirect: "false" # 禁用强制 SSL 重定向
# 注解配置:强制将 HTTP 请求重定向到 HTTPS
nginx.ingress.kubernetes.io/ssl-redirect: "true"
# 流量控制
nginx.ingress.kubernetes.io/limit-rps: "100" # 每秒请求数限制
nginx.ingress.kubernetes.io/proxy-buffer-size: "16k" # 代理缓冲区大小
# 连接优化
nginx.ingress.kubernetes.io/proxy-connect-timeout: "15" # 后端连接超时(秒)
nginx.ingress.kubernetes.io/proxy-read-timeout: "300" # 读取超时
# 安全相关
nginx.ingress.kubernetes.io/enable-cors: "true" # 启用 CORS
nginx.ingress.kubernetes.io/cors-allow-origin: "*" # 允许的域名
# 日志相关
nginx.ingress.kubernetes.io/enable-access-log: "true" # 启用访问日志
nginx.ingress.kubernetes.io/configuration-snippet: | # 自定义 Nginx 配置片段
access_log /var/log/nginx/access.log upstreaminfo;
error_log /var/log/nginx/error.log notice;
spec:
# TLS 配置(可选)
tls:
- hosts:
- example.com # 证书适用的域名
secretName: example-tls # 保存证书的 Secret 名称
rules: # 路由规则定义
- host: example.com # 匹配的域名
http:
paths:
- path: /app1 # 路径匹配规则
pathType: Prefix # 匹配类型:Prefix(前缀)|Exact(精确)|ImplementationSpecific
backend:
service:
name: app1-service # 后端 Service 名称
port:
number: 8080 # Service 端口(非 Pod 端口!)
# 路径级注解(覆盖全局)
metadata:
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /$1 # URL 重写规则
nginx.ingress.kubernetes.io/auth-type: basic # 基础认证
- path: /app2
pathType: Prefix
backend:
service:
name: app2-service
port:
number: 8081关键字段说明:
metadata.annotations:控制器的特定配置,如kubernetes.io/ingress.class指定控制器类型spec.rules:定义路由规则,可以基于主机名和路径spec.tls:配置 SSL/TLS 证书
路由规则类型
Ingress 支持多种路由规则配置方式:
基于路径的路由
yaml
apiVersion: networking.k8s.io/v1 # 使用 networking.k8s.io/v1 API(Kubernetes 1.19+)
kind: Ingress
metadata:
name: path-based-routing
annotations:
# 基础控制器配置
kubernetes.io/ingress.class: "nginx" # 指定使用 Nginx Ingress 控制器
nginx.ingress.kubernetes.io/ssl-redirect: "false" # 禁用自动 HTTPS 跳转(如有 TLS 需设为 true)
# 流量控制
nginx.ingress.kubernetes.io/limit-rps: "100" # 全局限流 100 请求/秒
nginx.ingress.kubernetes.io/proxy-connect-timeout: "15" # 连接超时时间(秒)
# 路径重写示例(按需启用)
# nginx.ingress.kubernetes.io/rewrite-target: /$2 # 捕获路径参数重写
spec:
# TLS 配置(可选)
# tls:
# - hosts:
# - yourdomain.com
# secretName: your-tls-secret
rules:
- host: yourdomain.com # 替换为实际域名,或删除此行使用 IP 访问
http:
paths:
- path: /service1 # 匹配 /service1 前缀路径
pathType: Prefix # 匹配类型:Prefix(前缀)|Exact(精确)
backend:
service:
name: service1 # 后端 Service 名称
port:
number: 80 # Service 端口(非 Pod 端口)
# 路径级专属注解(覆盖全局配置)
metadata:
annotations:
nginx.ingress.kubernetes.io/configuration-snippet: |
add_header X-Service-Type "Service1"; # 添加自定义响应头
# 重定向
if ($request_uri ~* "^/svc/") {
rewrite ^/svc/(.*) /$1 break;
}
# 会话保持
nginx.ingress.kubernetes.io/affinity: cookie
nginx.ingress.kubernetes.io/limit-rps: "50" # 本路径限流 50 请求/秒
- path: /service2
pathType: Prefix
backend:
service:
name: service2
port:
number: 80
metadata:
annotations:
nginx.ingress.kubernetes.io/auth-type: basic # 启用基础认证
nginx.ingress.kubernetes.io/auth-secret: basic-auth # 认证 Secret
nginx.ingress.kubernetes.io/auth-realm: "Authentication Required"
# 默认后端(可选,当没有路径匹配时使用)
# - path: /
# pathType: Prefix
# backend:
# service:
# name: default-service
# port:
# number: 8080路径匹配类型:
Prefix:匹配以指定路径开头的请求(如/service1会匹配/service1/xxx)Exact:精确匹配路径(需完全一致)
多路径优先级
- Kubernetes 会优先匹配更长的路径
- 例如
/service1/sub会优先于/service1
基于域名的路由
yaml
apiVersion: networking.k8s.io/v1 # Kubernetes 1.19+ 版本API
kind: Ingress
metadata:
name: domain-based-routing
annotations:
# 基础控制器配置
kubernetes.io/ingress.class: "nginx" # 指定使用Nginx Ingress控制器
nginx.ingress.kubernetes.io/ssl-redirect: "false" # 禁用自动HTTPS跳转
# 全局流量控制
nginx.ingress.kubernetes.io/proxy-connect-timeout: "15" # 连接超时(秒)
nginx.ingress.kubernetes.io/proxy-read-timeout: "300" # 读取超时
# 安全相关
nginx.ingress.kubernetes.io/enable-cors: "true" # 启用CORS
nginx.ingress.kubernetes.io/cors-allow-origin: "*" # 允许所有域名跨域
spec:
# TLS配置(可选)
tls:
- hosts:
- service1.example.com # 证书覆盖的域名
- service2.example.com
secretName: example-tls # 包含证书的Secret名称
rules:
# 第一个域名路由规则
- host: service1.example.com # 完全匹配该域名
http:
paths:
- path: / # 匹配根路径
pathType: Prefix # 匹配类型:Prefix/Exact/ImplementationSpecific
backend:
service:
name: service1 # 后端Service名称
port:
number: 80 # Service端口(非Pod端口)
# 域名级专属注解(覆盖全局配置)
metadata:
annotations:
nginx.ingress.kubernetes.io/configuration-snippet: |
add_header X-Service-Name "Service1"; # 添加自定义响应头
nginx.ingress.kubernetes.io/limit-rps: "200" # 本域名限流200请求/秒
# 第二个域名路由规则
- host: service2.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: service2
port:
number: 80
metadata:
annotations:
nginx.ingress.kubernetes.io/auth-type: basic # 启用基础认证
nginx.ingress.kubernetes.io/auth-secret: basic-auth # 认证Secret
nginx.ingress.kubernetes.io/auth-realm: "Service2 Authentication"
# 可选:为该域名添加额外路径规则
# - path: /api
# pathType: Prefix
# backend:
# service:
# name: service2-api
# port:
# number: 8080域名匹配规则
- 必须精确匹配
host字段指定的域名 - 支持通配符域名(如
*.example.com),但需要证书支持
TLS证书
bash
# 创建证书
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout tls.key -out tls.cert \
-subj "/CN=yunjisuan.com/O=yunjisuan.com"
# 将生成的证书保存到k8s中(example:域名)
kubectl create secret tls example-tls \
--cert=path/to/cert.pem \
--key=path/to/key.pem默认后端
yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: default-backend-ingress
annotations:
# 基础控制器配置
kubernetes.io/ingress.class: "nginx" # 指定使用的Ingress控制器类型
nginx.ingress.kubernetes.io/ssl-redirect: "false" # 禁用自动HTTPS跳转
# 默认后端专属配置
nginx.ingress.kubernetes.io/default-backend: "default-service" # 显式声明默认后端
nginx.ingress.kubernetes.io/custom-http-errors: "404,503" # 对这些错误码使用默认后端
# 全局配置
nginx.ingress.kubernetes.io/proxy-connect-timeout: "15" # 连接超时时间(秒)
nginx.ingress.kubernetes.io/proxy-read-timeout: "300" # 读取超时时间
spec:
# 默认后端配置(当没有规则匹配时使用)
defaultBackend:
service:
name: default-service # 默认后端Service名称
port:
number: 80 # Service端口(非Pod端口)
# 可选:正常路由规则(默认后端不会影响这些规则)
rules:
- host: app.example.com # 显式声明的域名规则优先于默认后端
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: app-service
port:
number: 8080
# TLS配置(可选)
# tls:
# - hosts:
# - app.example.com
# secretName: app-tlsdefaultBackend 核心作用
- 处理所有未匹配任何显式规则的请求
- 捕获自定义错误码(如404/503等)
- 通常用于展示维护页面或404页面
工作优先级
mermaid
graph TD
A[请求到达] --> B{匹配显式规则?}
B -->|是| C[按规则路由]
B -->|否| D[转到默认后端]测试命令
bash
# 测试未匹配任何规则的请求
curl http://<INGRESS_IP>/non-existent-path
# 测试显式规则(应返回app-service内容)
curl -H "Host: app.example.com" http://<INGRESS_IP>/混合路由
yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: hybrid-routing-ingress
annotations:
# 基础控制器配置
kubernetes.io/ingress.class: "nginx" # 指定Ingress控制器类型
nginx.ingress.kubernetes.io/ssl-redirect: "false" # 禁用自动HTTPS跳转
# 路由优先级控制
nginx.ingress.kubernetes.io/server-alias: "*.example.com" # 通配符域名支持
nginx.ingress.kubernetes.io/configuration-snippet: |
# 自定义Nginx配置片段
if ($host = '') { set $proxy_upstream_name "default-backend"; }
# 全局流量控制
nginx.ingress.kubernetes.io/proxy-connect-timeout: "15"
nginx.ingress.kubernetes.io/proxy-read-timeout: "300"
spec:
# TLS配置(可选)
tls:
- hosts:
- foo.example.com # 域名级TLS
secretName: foo-tls
- secretName: wildcard-tls # 通配符证书(用于非指定域名请求)
rules:
# ======================
# 域名+路径混合路由规则
# ======================
- host: foo.example.com # 显式域名匹配(高优先级)
http:
paths:
- path: /bar # 路径规则1
pathType: Prefix
backend:
service:
name: service1
port:
number: 80
metadata:
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /$1 # 路径重写
nginx.ingress.kubernetes.io/limit-rps: "100" # 限流
- path: /baz # 路径规则2
pathType: Exact # 精确匹配
backend:
service:
name: service2
port:
number: 80
metadata:
annotations:
nginx.ingress.kubernetes.io/auth-type: basic # 基础认证
# ======================
# 纯路径路由规则(无host)
# ======================
- http:
paths:
- path: /foo # 通用路径规则
pathType: Prefix
backend:
service:
name: service3
port:
number: 80
metadata:
annotations:
nginx.ingress.kubernetes.io/cors-allow-origin: "*" # 允许跨域
# ======================
# 默认后端(无规则匹配时)
# ======================
defaultBackend:
service:
name: default-service
port:
number: 8080路由优先级顺序
mermaid
graph LR
A[请求] --> B{匹配 foo.example.com?}
B -->|是| C{匹配 /bar或/baz?}
B -->|否| D{匹配 /foo?}
C -->|匹配| E[路由到service1/service2]
D -->|匹配| F[路由到service3]
C -->|不匹配| G[返回404]
D -->|不匹配| H[转到defaultBackend]TLS/SSL 配置
Ingress 配置
Ingress 支持 TLS 终止功能,可以在边缘终止 SSL 连接:
yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: tls-ingress
annotations:
# 基础控制器配置
kubernetes.io/ingress.class: "nginx" # 指定Ingress控制器类型
# TLS增强配置
nginx.ingress.kubernetes.io/ssl-redirect: "true" # 强制HTTP跳转到HTTPS
nginx.ingress.kubernetes.io/force-ssl-redirect: "true" # 即使错误也强制跳转
nginx.ingress.kubernetes.io/ssl-passthrough: "false" # 禁用SSL透传(需控制器支持)
# 安全加固
nginx.ingress.kubernetes.io/ssl-ciphers: "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256"
nginx.ingress.kubernetes.io/ssl-protocols: "TLSv1.2 TLSv1.3"
nginx.ingress.kubernetes.io/ssl-session-tickets: "false" # 禁用SSL会话票证
nginx.ingress.kubernetes.io/hsts: "true" # 启用HTTP严格传输安全
nginx.ingress.kubernetes.io/hsts-max-age: "31536000" # HSTS有效期(秒)
nginx.ingress.kubernetes.io/hsts-include-subdomains: "true" # 包含子域名
# 证书自动管理(需安装cert-manager)
cert-manager.io/cluster-issuer: "letsencrypt-prod" # 指定证书颁发者
cert-manager.io/acme-challenge-type: "http01" # 验证方式
spec:
# ======================
# TLS/SSL 配置
# ======================
tls:
- hosts:
- example.com # 证书适用的主域名
- "*.example.com" # 通配符子域名(需通配符证书支持)
secretName: example-tls # 引用存储证书的Secret名称
# ======================
# 路由规则
# ======================
rules:
- host: example.com # 必须与tls.hosts中的域名一致
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: web-service
port:
number: 80 # 后端Service端口
metadata:
annotations:
nginx.ingress.kubernetes.io/backend-protocol: "HTTP" # 后端协议类型TLS 证书准备
命令行模式
bash
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout example.key -out example.cert -subj "/CN=example.com/O=example.com"
openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout tls.key -out tls.crt \
-subj "/CN=www.yun.local" \
-addext "subjectAltName = DNS:www.yun.local, DNS:yun.local"
# 将生成的证书保存到k8s中
kubectl create secret tls example-tls --key example.key --cert example.cert
kubectl create secret tls example-tls \
--namespace demo-study \
--key tls.key \
--cert tls.crt
# 检测
kubectl get secret -n <namespace>资源清单
yaml
# Secret 资源 API 版本
apiVersion: v1
# 资源类型为 Secret
kind: Secret
metadata:
# Secret 名称,需与 Ingress 中引用的一致
name: ecommerce-tls
# 所属命名空间,与 Ingress 保持一致
namespace: shop
# Secret 类型为 kubernetes.io/tls(用于存储 TLS 证书)
type: kubernetes.io/tls
data:
# 证书内容(Base64 编码),可通过 `cat cert.pem | base64` 生成
tls.crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCg==
# 私钥内容(Base64 编码),可通过 `cat key.pem | base64` 生成
tls.key: LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCg==多域名证书配置
yaml
tls:
- hosts:
- example.com
- api.example.com
- "*.example.com" # 通配符需要证书支持
secretName: wildcard-tlsannotations-注解
负载均衡
yaml
annotations:
# 注解配置:将负载均衡策略设置为最少连接(优先转发到连接数最少的后端)
nginx.ingress.kubernetes.io/load-balance: "least_conn"- 轮询(默认):nginx.ingress.kubernetes.io/load-balance: "round_robin"
- 最少连接:nginx.ingress.kubernetes.io/load-balance: "least_conn"
- IP 哈希:nginx.ingress.kubernetes.io/ip-hash: "true"
重定向
yaml
annotations:
# 强制将 HTTP 请求重定向到 HTTPS
nginx.ingress.kubernetes.io/ssl-redirect: "true"路径重写
yaml
# 路径重写示例
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: rewrite-example
annotations:
# 重写目标配置:将匹配的路径重写为 /$2($2 对应正则表达式的第二个分组)
nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:
rules:
- host: api.example.com
http:
paths:
# 路径规则:匹配 /v1 开头的路径(如 /v1/user、/v1/order 等)
# 正则表达式说明:/v1(/|$)(.*) 中,$1 匹配 / 或空,$2 匹配后续内容
- path: /v1(/|$)(.*)
pathType: Prefix
backend:
service:
name: api-service
port: {number: 80}
# 效果:访问 api.example.com/v1/user 时,实际转发到 api-service 的 /user 路径跨域控制(CORS)
yaml
annotations:
# 允许跨域请求的来源(仅允许 https://frontend.example.com)
nginx.ingress.kubernetes.io/cors-allow-origin: "https://frontend.example.com"
# 允许的 HTTP 方法
nginx.ingress.kubernetes.io/cors-allow-methods: "GET, POST, PUT, DELETE"
# 允许的请求头
nginx.ingress.kubernetes.io/cors-allow-headers: "Content-Type, Authorization"
# 允许跨域请求携带 Cookie
nginx.ingress.kubernetes.io/cors-allow-credentials: "true"流量控制
Ingress 控制器通常支持多种流量控制策略:
流量限制
yaml
annotations:
nginx.ingress.kubernetes.io/limit-rpm: "100" # 每分钟100个请求
nginx.ingress.kubernetes.io/limit-rps: "5" # 每秒5个请求(与rpm同时生效时取更严格值)
nginx.ingress.kubernetes.io/limit-connections: "10" # 并发连接数限制
nginx.ingress.kubernetes.io/limit-burst-multiplier: "5" # 突发流量系数超时控制
yaml
annotations:
nginx.ingress.kubernetes.io/proxy-connect-timeout: "10" # 后端连接超时(秒)
nginx.ingress.kubernetes.io/proxy-send-timeout: "20" # 发送请求超时
nginx.ingress.kubernetes.io/proxy-read-timeout: "30" # 读取响应超时
nginx.ingress.kubernetes.io/proxy-next-upstream-timeout: "15" # 切换后端超时高级保护
yaml
annotations:
nginx.ingress.kubernetes.io/enable-underscores-in-headers: "false" # 禁用下划线header
nginx.ingress.kubernetes.io/disable-access-log: "false" # 开启访问日志
nginx.ingress.kubernetes.io/connection-proxy-header: "keepalive" # 连接优化会话保持
yaml
annotations:
nginx.ingress.kubernetes.io/affinity: cookie连接池优化
yaml
annotations:
nginx.ingress.kubernetes.io/upstream-keepalive-connections: "100"
nginx.ingress.kubernetes.io/upstream-keepalive-timeout: "60"
nginx.ingress.kubernetes.io/upstream-keepalive-requests: "1000"缓冲区优化
yaml
annotations:
nginx.ingress.kubernetes.io/proxy-buffer-size: "16k"
nginx.ingress.kubernetes.io/proxy-buffers-number: "4"