Ingress注解Annotations



Nginx Ingress 注解使用在 Ingress 资源实例中,用以设置当前 Ingress 资源实例中 Nginx 虚拟主机的相关 配置,对应配置的是 Nginx 当前虚拟主机的 server 指令域内容。在与 Nginx Ingress 配置映射具有相同功能配 置时,将按照所在指令域层级遵循 Nginx 配置规则覆盖。 Nginx Ingress注解按照配置功能有如下分类。 1、Nginx原生配置指令 支持在注解中添加 Nginx 原生配置指令。配置说明如下表所示。 注解类型功能描述 nginx.ingress.kubernetes.io/serv在 server 指令域添加 Nginx 配置 string er-snippet nginx.ingress.kubernetes.io/conf在 location 指令域添加 Nginx 配 string iguration-snippet 配置样例如下: apiVersion: extensions/v1beta1 kind: Ingress metadata: name: web-nginxbar-org annotations: nginx.ingress.kubernetes.io/server-snippet: | location / { return 302 /coffee; } spec: rules:

  • host: web.nginxbar.org http: paths:
  • path: /tea backend: serviceName: tea-svc servicePort: 80
  • path: /coffee backend: serviceName: coffee-svc servicePort: 80 2、通用配置 Nginx 虚拟主机中的通用配置。通用配置说明如下表所示。

注解类型功能描述 nginx.ingress.kubernetes.io/ena对当前虚拟主机设置是否启用访 true 或 false ble-access-log nginx.ingress.kubernetes.io/serv为 Nginx 添加更多的主机名,同 string Nginx 配置指令 server name nginx.ingress.kubernetes.io/app-将当前虚拟主机根目录的访问 string 302 跳转到当前指定的路径 nginx.ingress.kubernetes.io/clie string client_body_buffer_size 是否对当前虚拟主机的 Nginx 指 nginx.ingress.kubernetes.io/use- true 或 false令 location 使用正则方式进行路 regex 径匹配,默认值为 false nginx.ingress.kubernetes.io/cust根据响应码状态定义为错误状态 []int om-http-errors 自定义默认后端的资源对象 nginx.ingress.kubernetes.io/defaService 名称,当客户端的请求 string 没有匹配的 Nginx 规则或响应错 误时,将被转发到默认后端 nginx.ingress.kubernetes.io/whit CIDR whitelist-source-range nginx.ingress.kubernetes.io/per 设置永久重定向的目标地址 manent-redirect nginx.ingress.kubernetes.io/per自定义永久重定向的响应码,默 number manent-redirect-code nginx.ingress.kubernetes.io/tem 设置临时重定向的目标地址 poral-redirect 设置是否将当前虚拟主机子域名 nginx.ingress.kubernetes.io/from true 或 false为 www 的请求跳转到当前主机 -to-www-redirect 域名 nginx.ingress.kubernetes.io/rewr 同 Nginx 配置指令 rewrite ite-target nginx.ingress.kubernetes.io/ena同 Nginx 配置指令 rewrite log, true 或 false ble-rewrite-log nginx.ingress.kubernetes.io/mirr 同 Nginx 配置指令 mirro or-uri 同 Nginx 配置指令 nginx.ingress.kubernetes.io/mirr mirror_request_body,默认为 or-request-body true 配置样例如下:

apiVersion: extensions/v1beta1 kind: Ingress metadata: name: web-nginxbar-org namespace: default annotations: nginx.ingress.kubernetes.io/rewrite-target: /tea/$1 nginx.ingress.kubernetes.io/enable-rewrite-log: “true” spec: rules:

  • host: web.nginxbar.org # 此service的访问域名 http: paths:
  • backend: serviceName: nginx-web servicePort: 8080 path: /coffee/(.+) 3、访问控制 用以设置基于流量、请求连接数、请求频率的访问控制。访问控制配置说明如下表所示。 注解类型/选项功能描述 nginx.ingress.kubernetes.io/limit访问流量速度限制,同 Nginx 配 number 置指令 limit_rate 启用访问流量速度限制的最大 nginx.ingress.kubernetes.io/limit 值,同 Nginx 配置指令 -rate-after limit_rate_after nginx.ingress.kubernetes.io/limit节并发连接数限制,同 Nginx 配 number 置指令 limit_conn 每秒请求频率限制,burst 参数为 nginx.ingress.kubernetes.io/limit给定值的 5 倍,响应状态码由 number ConfigMap 的 limit-req-status- code 设定 每分钟请求频率限制,burst 参数 nginx.ingress.kubernetes.io/limit为给定值的 5 倍,响应状态码由 number ConfigMap 的 limit-req-status- code 设定 nginx.ingress.kubernetes.io/limit 对以上限制设置基于 IP 的白名单 -whitelist 4、认证管理 Nginx Ingress 提供了基本认证、摘要认证和外部认证 3 种方式,为被代理服务器提供认证支持。认证管理 配置说明如下表所示。

注解类型功能描述 如果 ConfigMap 的 global-auth- nginx.ingress.kubernetes.io/enaurl 被设置,Nginx 会将所有的请 true 或 false ble-global-auth URL,默认为 true nginx.ingress.kubernetes.io/sati 同 Nginx 配置指令 satisfy sfy nginx.ingress.kubernetes.io/auth设置 HTTP 认证类型,支持基本 basic 或 digest 和摘要两种类型 nginx.ingress.kubernetes.io/auth 指定关联资源对象 secret 的名称 -secret nginx.ingress.kubernetes.io/auth string auth_basic 设置提供外部身份认证的 URL, nginx.ingress.kubernetes.io/auth 由 Nginx 配置指令 auth_request -url 提供该功能 设置当外部认证返回 401 时跳转 nginx.ingress.kubernetes.io/auth 的 URL,通常为提示输入用户名 -signin 和密码的 URL 指定访问外部认证 URL 的 HTTP nginx.ingress.kubernetes.io/auth 方法,由 Nginx 配置指令 -method proxy_method 提供该功能 nginx.ingress.kubernetes.io/auth设置发送给认证服务器请求头中 string X-Auth-Request-Redirect 的值 nginx.ingress.kubernetes.io/auth启用认证缓存,并设置认证缓存 string -cache-key nginx.ingress.kubernetes.io/auth基于响应码设置认证缓存的有效 string -cache-duration nginx.ingress.kubernetes.io/auth设置认证请求完成后传递到真实 string -response-headers nginx.ingress.kubernetes.io/auth可以自定义在外部认证指令区域 string 添加 Nginx 配置指令 基本认证配置如下:

创建基本认证用户名nginxbar、密码123456,输出文件名必须是auth

htpasswd -bc auth nginxbar 123456

创建资源对象secret保存账号和密码

kubectl create secret generic basic-auth –from-file=auth

查看创建的basic-auth

kubectl get secret basic-auth -o yaml

创建基本认证的Ingress实例

cat>auth-nginxbar-org.yaml«EOF apiVersion: extensions/v1beta1 kind: Ingress metadata: name: auth-nginxbar-org namespace: default annotations:

设置认证类型

nginx.ingress.kubernetes.io/auth-type: basic

关联账号和密码

nginx.ingress.kubernetes.io/auth-secret: basic-auth

显示认证提示信息

nginx.ingress.kubernetes.io/auth-realm: ‘Authentication Required for web.nginxbar.org’ spec: rules:

  • host: auth.nginxbar.org # 此service的访问域名 http: paths:
  • backend: serviceName: nginx-web servicePort: 8080 EOF kubectl create -f auth-nginxbar-org.yaml 认证转发配置样例如下: apiVersion: extensions/v1beta1 kind: Ingress metadata: name: auth-nginxbar-org namespace: default annotations: nginx.ingress.kubernetes.io/auth-url: “http://$host/auth2” nginx.ingress.kubernetes.io/auth-signin: “http://$host/auth/start” nginx.ingress.kubernetes.io/auth-method: “POST” nginx.ingress.kubernetes.io/auth-cache-key: “foo”, nginx.ingress.kubernetes.io/auth-cache-duration": “200 202 401 30m” nginx.ingress.kubernetes.io/auth-snippet: | proxy_set_header Foo-Header 42; spec: rules:
  • host: auth.nginxbar.org # 此service的访问域名

http: paths:

  • backend: serviceName: nginx-web servicePort: 8080 5、跨域访问 跨域访问功能配置说明如下表所示。 注解类型功能描述 nginx.ingress.kubernetes.io/ena true 或 false ble-cors nginx.ingress.kubernetes.io/cors允许跨域访问的域名,默认为 string -allow-origin 允许跨域访问方法,默认为 nginx.ingress.kubernetes.io/cors GET、PUT、POST、 -allow-methods DELETE、PATCH、OPTIONS 允许跨域访问的请求头,默认为 DNT,X-CustomHeader、Keep- nginx.ingress.kubernetes.io/corsAlive、User-Agent、X- string Requested-With、If-Modified- Since、Cache-Control、 Content-Type、Authorization 设置在响应头中 Access-Control- nginx.ingress.kubernetes.io/corsAllow-Credentials 的值,设置是 true 或 false -allow-credentials cookie 等,默认为 true 设置响应头中 Access-Control- nginx.ingress.kubernetes.io/corsMax-Age 的值,设置返回结果可 number 以用于缓存的最长时间,默认为 1728000 秒 配置样例如下: apiVersion: extensions/v1beta1 kind: Ingress metadata: name: web-nginxbar-org namespace: default annotations: nginx.ingress.kubernetes.io/cors-allow-headers: >- DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,

If-Modified-Since,Cache-Control,Content-Type,Authorization nginx.ingress.kubernetes.io/cors-allow-methods: ‘PUT, GET, POST, OPTIONS’ nginx.ingress.kubernetes.io/cors-allow-origin: ‘*’ nginx.ingress.kubernetes.io/enable-cors: “true” nginx.ingress.kubernetes.io/cors-max-age: 600 spec: rules:

  • host: web.nginxbar.org http: paths:
  • backend: serviceName: nginx-web servicePort: 8080 path: / 6、代理配置 Nginx 代理相关功能配置说明如下表所示。

注解类型/选项功能描述 默认 Nginx 以 Service 中 Pod 的 IP 和端口为 Upstream 中的成员 列表,该参数为 true 时,将以 nginx.ingress.kubernetes.io/serv true 或 falseService 的 ClusterIP 和端口为被 ice-upstream 代理入口,该功能避免了因 Pod 漂移带来的 Upstream 的配置变 化 НТТР 或 HTTPS 或 nginx.ingress.kubernetes.io/bac设置代理后端服务器的代理协议 GRPC 或 GRPCS 或 kend-protocol AJP 或 FCGI 同 Nginx 配置指令 nginx.ingress.kubernetes.io/prox client_max_body-size,默认为 y-body-size 1m nginx.ingress.kubernetes.io/prox string proxy_cookie_domain nginx.ingress.kubernetes.io/prox string proxy_cookie_path nginx.ingress.kubernetes.io/prox number proxy_connect_timeout nginx.ingress.kubernetes.io/prox number proxy_send_timeout nginx.ingress.kubernetes.io/prox number proxy_read_timeout nginx.ingress.kubernetes.io/prox string proxy_next_upstream nginx.ingress.kubernetes.io/prox number proxy_next_upstream_timeout nginx.ingress.kubernetes.io/prox number proxy_next_upstream_tries nginx.ingress.kubernetes.io/prox string proxy_buffering nginx.ingress.kubernetes.io/prox 同 Nginx 配置指令 proxy_buffers y-buffers-number nginx.ingress.kubernetes.io/prox string proxy_buffer_size nginx.ingress.kubernetes.io/prox string proxy_request_buffering nginx.ingress.kubernetes.io/prox同 Nginx 配置指令 1.0 或 1.1 proxy_http_version,默认为 1.1 nginx.ingress.kubernetes.io/upststring ream-vhost 头字段中 Host 的内容,相当于

Nginx 配置指令 proxy_set_header Host $host 的 设置 nginx.ingress.kubernetes.io/prox设置要替换的源文本,同 Nginx string 配置指令 proxy_redirect nginx.ingress.kubernetes.io/prox设置要替换的目标文本,同 string Nginx 配置指 proxy redirect 设置发送到被代理服务器请求头 中字段属性 connection 的值,相 nginx.ingress.kubernetes.io/con 当于 Nginx 配置指令 nection-proxy-header proxy_set_header Connection 的状态为 Keep-Alive 创建并设置代理请求头属性字段 nginx.ingress.kubernetes.io/x- X-Forwarded-Prefix 属性,用以 forwarded-prefix 向后端传递请求路径 nginx.ingress.kubernetes.io/http同 Nginx 配置指令 http2-push- true 或 false preload,默认值为 false 7、负载均衡 为方便上游服务器组的动态管理,Nginx Ingress 基于 Lua 实现了一致性哈希、基于子集的一致性哈希、轮 询调度及峰值指数加权移动平均(Peak Exponentially Weighted Moving-Average,Peak EWMA)负载均衡算 法。负载均衡配置说明如下表所示。 注解类型/选项功能描述 同 Nginx 配置指令 hash,此处默 nginx.ingress.kubernetes.io/upst认为一致性哈希负载算法,允许 string 除了客户端 IP 或 cookie 之外的 会话粘连 nginx.ingress.kubernetes.io/upst设置是否使用子集模式的一致性 true 或 false ream-hash-by-subset nginx.ingress.kubernetes.io/upst设置子集模式中上游服务器分组 int ream-hash-by-subset-size 设置负载均衡算法,基于 nginx.ingress.kubernetes.io/loadbalancer_by_lua 模块实现,支 round_robin 或 ewma 持轮询和 Peak EWMA 两种负载 算法 子集模式的一致性哈希负载算法是将上游服务器组中的被代理服务器分成固定数量的分组,然后把每个分组 当作一致性哈希计算的虚拟节点。默认一致性哈希是按照每个被代理服务器为虚拟节点进行计算的。 Peak EWMA 负载均衡算法,是对每个 Pod 请求的往返延时(Round-Trip Time,RTT)计算移动平均值, 并用该 Pod 的未完成请求数对这个平均值加权计算,计算值最小的 Pod 端点将被分配新的请求。 8、会话保持配置 设置基于 cookie 的会话亲缘关系,也就是会话保持功能。启用基于 cookie 的会话保持功能时,可以使同一 客户端的请求始终转发给同一后端服务器。Nginx Ingress 对启用会话保持功能的 Service 集群使用一致性哈希

负载算法,即使后端 Pod 数量变化,也不会对会话保持功能产生太大的影响。会话保持配置说明如下表所示。 注解类型功能描述 nginx.ingress.kubernetes.io/affin设置会话保持类型,目前只有 cookie cookie 类型 nginx.ingress.kubernetes.io/ses string sion-cookie-name 设置 cookie 字段 path 的值,默 认值为当前资源实例 path 的设 nginx.ingress.kubernetes.io/ses 置。如果启用 use-regex 功能, sion-cookie-path 使用正则匹配时,必须单独指 定,不能使用默认值 nginx.ingress.kubernetes.io/ses设置 cookie 字段 max-age 的 — sion-cookie-max-age 为兼容旧的浏览器,设置 cookie nginx.ingress.kubernetes.io/ses 字段 expires 的值,表示 cookie sion-cookie-expires 过期时间 当会话保持的被代理服务器请求 失败时,如果设置值为 true,则 nginx.ingress.kubernetes.io/ses true 或 false将下次请求更改为向另一台被代 sion-cookie-change-on-failure 理服务器转发,否则继续向当前 被代理服务器转发请求 配置样例如下: apiVersion: extensions/v1beta1 kind: Ingress metadata: name: web-nginxbar-org annotations: nginx.ingress.kubernetes.io/affinity: “cookie” nginx.ingress.kubernetes.io/session-cookie-name: “route” nginx.ingress.kubernetes.io/session-cookie-expires: “172800” nginx.ingress.kubernetes.io/session-cookie-max-age: “172800” spec: rules:

  • host: web.nginxbar.org http: paths:
  • backend: serviceName: nginx-web servicePort: 8080

path: / 9、HTTPS配置 HTTPS 功能的配置说明如下表所示。 注解类型功能描述 当客户端的 HTTPS 被外部集群 nginx.ingress.kubernetes.io/forc进行 SSL 卸载(SSL true 或 false offloading)时,仍将 HTTP 的请 求强制跳转到 HTTPS 端口 设置当前虚拟主机支持 HTTPS nginx.ingress.kubernetes.io/ssl-请求时,是否将 HTTP 的请求强 true 或 false 制跳转到 HTTPS 端口,全局默 认为 true nginx.ingress.kubernetes.io/ssl- true 或 false设置是否启用 SSL 透传 passthrough nginx.ingress.kubernetes.io/auth 设置客户端证书的资源对象名称 -tls-secret 设置 TLS 用于协商使用的加密算 nginx.ingress.kubernetes.io/ssl- 法组合,同 Nginx 配置指令 ciphers ssl_ciphers nginx.ingress.kubernetes.io/auth是否启用客户端证书验证,同 string Nginx 配置指令 ssl_verify_client nginx.ingress.kubernetes.io/auth客户端证书链的验证深度同 number Nginx 配置指令 ssl_verify_depth nginx.ingress.kubernetes.io/auth设置客户端证书验证错误时的跳 string -tls-error-page nginx.ingress.kubernetes.io/auth true 或 false指定证书是否传递到上游服务器 -tls-pass-certificate-to-upstream nginx.ingress.kubernetes.io/sec设置是否启用对被代理服务器的 string ure-verify-ca-secret HTTPS 配置样例如下:

创建TLS证书

openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /data/apps/certs/dashboard.key -out /data/apps/certs/dashboard.crt -subj “/CN=dashboard.nginxbar.org/O=dashboard.nginxbar.org” kubectl -n kube-system create secret tls ingress-secret –key /data/apps/certs/dashboard.key –cert /data/apps/certs/dashboard.crt

创建HTTPS服务

cat>dashboard-ingress.yaml«EOF apiVersion: extensions/v1beta1

kind: Ingress metadata: name: dashboard-ingress namespace: kube-system annotations: nginx.ingress.kubernetes.io/ingress.class: nginx

使用HTTPS协议代理后端服务器

nginx.ingress.kubernetes.io/backend-protocol: “HTTPS”

启用SSL透传

nginx.ingress.kubernetes.io/ssl-passthrough: “true” spec: tls:

  • hosts:
  • dashboard.nginxbar.org secretName: ingress-secret rules:
  • host: dashboard.nginxbar.org http: paths:
  • path: / backend: serviceName: kubernetes-dashboard servicePort: 443 EOF kubectl create -f dashboard-ingress.yaml curl -k -H “Host:dashboard.nginxbar.org” https://10.103.196.209 Nginx-ingress 在用户没有提供证书的情况下会提供一个内置的默认 TLS 证书,如果 secretName 参数没 有配置或配置错误,Nginx 会使用系统默认的证书,所以配置后仍需检查确认。 HTTPS 客户端证书身份认证配置样例如下:

创建客户端证书资源对象default/ca-secret

apiVersion: extensions/v1beta1 kind: Ingress metadata: annotations:

启用客户端证书验证

nginx.ingress.kubernetes.io/auth-tls-verify-client: “on”

绑定客户端证书的资源对象名称,是命名空间default的ca-secret

nginx.ingress.kubernetes.io/auth-tls-secret: “default/ca-secret”

客户端证书链的验证深度为1

nginx.ingress.kubernetes.io/auth-tls-verify-depth: “1”

设置客户端证书验证错误时的跳转页面

nginx.ingress.kubernetes.io/auth-tls-error-page: “http://www.mysite.com/error-cert.html"

指定证书传递到上游服务器

nginx.ingress.kubernetes.io/auth-tls-pass-certificate-to-upstream: “true” name: nginx-test namespace: default spec: rules:

  • host: mydomain.com http: paths:
  • backend: serviceName: http-svc servicePort: 80 path: / tls:
  • hosts:
  • mydomain.com secretName: tls-secret 10、“金丝雀”发布 “金丝雀”发布又称为灰度发布,灰度发布功能可以将用户请求按照指定的策略进行分割,并转发到不同的代 理服务器组,通过不同的代理服务器部署应用不同版本可进行对照比较,因该方式对于新版本而言类似于使用 “金丝雀”的方式进行测试,所以也叫“金丝雀”发布。 Nginx Ingress 支持 Header、cookie 和权重 3 种方式,可单独使用,也可以组合使用。“金丝雀”发布配置说 明如下表所示。

注解类型功能描述 nginx.ingress.kubernetes.io/can true 或 false启用“金丝雀”发布功能 ary 设置请求头属性字段的名称,用 于根据该字段的值判断是否将请 求路由到“金丝雀”服务器组,该 nginx.ingress.kubernetes.io/can 字段值为 always 时则该请求被 ary-by-header 路由到“金丝雀”服务器组;该字 段值为 never 时则不路由到“金丝 雀”服务器组 自定义用于判断是否路由到“金丝 nginx.ingress.kubernetes.io/can雀”服务器组的请求头字段值,默 string 认为 always,必须与 canary-by- header同时使用 设置 cookie 的字段名称,用于根 据该字段的值判断是否将请求路 nginx.ingress.kubernetes.io/can由到“金丝雀”服务器组。always string 则路由到“金丝雀”服务器组; never 则永远不路由到“金丝雀”服 务器组 将请求基于整数(0~100)的请 求百分比随机路由到“金丝雀”服 nginx.ingress.kubernetes.io/can务器组;100 表示所有请求都路 number 由到“金丝雀”服务器组;0 表示不 路由任何请求到“金丝雀”服务器 组 “金丝雀”路由规则同时存在时的优先顺序是 canary-by-header、canary-by-cookie、canary-weight。 配置样例如下:

创建主机web.nginxbar.org的Ingress资源配置

apiVersion: extensions/v1beta1 kind: Ingress metadata: name: web-nginxbar-org namespace: default annotations: nginx.ingress.kubernetes.io/ingress.class: “nginx” spec: rules:

  • host: web.nginxbar.org # 此service的访问域名 http: paths:

  • backend: serviceName: nginx-web servicePort: 8080

创建主机web.nginxbar.org金丝雀组的Ingress资源配置

apiVersion: extensions/v1beta1 kind: Ingress metadata: name: web-nginxbar-org-canary namespace: default annotations: nginx.ingress.kubernetes.io/ingress.class: “nginx” nginx.ingress.kubernetes.io/canary: “true”,

根据请求头字段CanaryByHeader的值进行判断

nginx.ingress.kubernetes.io/canary-by-header: “CanaryByHeader”,

请求头字段CanaryByHeader的值为DoCanary时,路由到“金丝雀”服务器组

nginx.ingress.kubernetes.io/canary-by-header-value: “DoCanary”,

根据Cookie字段CanaryByCookie的值进行判断

nginx.ingress.kubernetes.io/canary-by-cookie: “CanaryByCookie”,

随机10%的请求路由到“金丝雀”服务器组

nginx.ingress.kubernetes.io/canary-weight: “10”, spec: rules:

  • host: web.nginxbar.org # 此service的访问域名 http: paths:
  • backend: serviceName: nginx-web-canary servicePort: 8080 11、lua-resty-waf模块 lua-resty-waf 是一个基于 OpenResty 的高性能 Web 应用防火墙,对当前虚拟主机的访问可以按照相关防 火墙规则进行访问过滤。模块配置说明如下表所示。

注解类型功能描述 设置 WAF 防火墙的工作模式, inactive 表示不执行任何操作; active 表示启用:simulate 模式 nginx.ingress.kubernetes.io/lua-下,如果给定请求有匹配的规 string 则,它将记录一条警告消息而不 进行处理。这有助于在完全部署 规则之前调试规则并消除可能的 误报 nginx.ingress.kubernetes.io/lua-设置是否启用调试功能,默认值 true 或 false resty-waf-debug 设置忽略规则集的名称,当某些 nginx.ingress.kubernetes.io/lua-规则集(如 sqli 或 xss crs 规则 string resty-waf-ignore-rulesets 通过该设置进行忽略处理 nginx.ingress.kubernetes.io/lua- 设置自定义的规则 resty-waf-extra-rules 设置在发送了不在允许内容类型 表中的内容类型头时是否继续处 nginx.ingress.kubernetes.io/lua- 理请求。默认允许的为 resty-waf-allow-unknown- text/html、text/json、 content-types application/json 的文档类型,默 认值为 false 设置请求异常评分的阈值,如果 nginx.ingress.kubernetes.io/lua- 超过这个阈值,则拒绝该请求, resty-waf-score-threshold 默认值为 5 nginx.ingress.kubernetes.io/lua- true 或 false模块对 multipart/form-data 类型 body 请求体的处理,默认为 true 12、ModSecurity模块配置 ModSecurity 是一个开源的 Web 应用防火墙。必须首先通过在 ConfigMap 中启用 Mod-Security 来加载 ModSecurity 模块。这将为所有路径启用 ModSecurity 过滤,可以手动在 Ingress 资源实例中禁用此功能。 ModSecurity 模块配置说明如下表所示。

注解类型功能描述 设置是否启用 ModSecurity 过 nginx.ingress.kubernetes.io/ena滤,启用时应用推荐的规则以仅 bool 检测(Detection-Only)模式运 行 nginx.ingress.kubernetes.io/ena设置是否使用 OWASP 核心规则 bool ble-owasp-core-rules 设置从 Nginx 传递事务 ID,而不 是在库中自动生成,有利于在 nginx.ingress.kubernetes.io/mod ModSecurity 中跟踪查看检测的 security-transaction-id 请求,对应模块配置指令为 modsecurity_transaction_id nginx.ingress.kubernetes.io/mod添加模块配置指令 string modsecurity_rules 的内容 配置样例如下: apiVersion: extensions/v1beta1 kind: Ingress metadata: name: web-nginxbar-org annotations: nginx.ingress.kubernetes.io/enable-modsecurity: “true” nginx.ingress.kubernetes.io/enable-owasp-core-rules: “true” nginx.ingress.kubernetes.io/modsecurity-transaction-id: “$request_id” nginx.ingress.kubernetes.io/modsecurity-snippet: | SecRuleEngine On SecDebugLog /tmp/modsec_debug.log spec: rules:

  • host: web.nginxbar.org http: paths:
  • backend: serviceName: nginx-web servicePort: 8080 path: / 13、Influxdb模块配置 通过使用 Nginx Influxdb 模块,可以用 UDP 协议将请求记录实时发送到后端的 Influxdb 服务器。Influxdb 模块配置说明如下表所示。

注解类型功能描述 nginx.ingress.kubernetes.io/ena true 或 false是否启用 Influxdb 输出功能 ble-influxdb nginx.ingress.kubernetes.io/influ指定 Influxdb 中的 measurement string xdb-measurement nginx.ingress.kubernetes.io/influ 指定 Influxdb 的端口 xdb-port nginx.ingress.kubernetes.io/influ 指定 Influxdb 的 IP 地址 xdb-host nginx.ingress.kubernetes.io/influ 设置自己的应用标识 xdb-server-name 配置样例如下: apiVersion: extensions/v1beta1 kind: Ingress metadata: name: web-nginxbar-org annotations: nginx.ingress.kubernetes.io/enable-influxdb: “true” nginx.ingress.kubernetes.io/influxdb-measurement: “nginxbar-reqs” nginx.ingress.kubernetes.io/influxdb-port: “8089” nginx.ingress.kubernetes.io/influxdb-host: “192.168.2.110” nginx.ingress.kubernetes.io/influxdb-server-name: “nginxbar-com” spec: rules:

  • host: web.nginxbar.org http: paths:
  • backend: serviceName: nginx-web servicePort: 8080 path: /