NGINX Ingress 使用配置参考
- 已创建 CCE 集群并安装
cce-ingress-nginx-controller组件。 - 已获取目标集群的
kubeconfig,本地已安装kubectl且可连接到集群。 - 具备目标集群
kube-system命名空间ConfigMap与Ingress资源的读写权限。## 前提条件本文档介绍在 CCE 集群中为cce-ingress-nginx-controller组件配置全局参数,以及通过IngressAnnotation 调整 Ingress 行为,并给出常见场景示例。## 概述## 文档内容 对于cce-ingress-nginx-controller组件,有 2 处位置可以对组件参数或Ingress资源进行配置。
可以在组件的 ConfigMap 中配置全局运行参数,或在 Ingress Annotation 中对某个 Ingress、Host 或 Rule 的配置进行修改。
Ingress NGINX Controller ConfigMap
在集群中的每个 cce-ingress-nginx-controller 插件实例均配有对应的 ConfigMap,其配置项作用于所属插件整体。
组件会使用 ConfigMap 中的配置来覆盖组件的默认配置。
在集群中,该 ConfigMap 存在于 kube-system 命名空间并以 {ingressclass}-ngx-control-controller 命名。
ConfigMap 中配置项的内容均为 key-value 字符串:
- 对于数字和 Bool 类型 Value,需要对其添加引号,如:
"true"、"101"。 - 对于数组 Value,使用逗号分隔的字符串。
完整 ConfigMap 参数请参考 ConfigMap - NGINX Ingress Controller。
示例
以下是一个集群中 cce-ingress-nginx-controller 的 ConfigMap 结构示意,具体值请按实际环境填写。
1apiVersion: v1
2data:
3 compute-full-forwarded-for: "true"
4 forwarded-for-header: X-Forwarded-For
5 use-forwarded-headers: "true"
6 keep-alive-requests: "<number>"
7 log-format-upstream: >-
8 {"time": "$time_iso8601", "remote_addr": "$proxy_protocol_addr",
9 "x_forward_for": "$proxy_add_x_forwarded_for", "request_id": "$req_id",
10 "remote_user": "$remote_user", "bytes_sent": $bytes_sent, "request_time":
11 $request_time, "status": $status, "vhost": "$host", "request_proto":
12 "$server_protocol", "path": "$uri", "request_query": "$args",
13 "request_length": $request_length, "duration": $request_time, "method":
14 "$request_method", "http_referrer": "$http_referer", "http_user_agent":
15 "$http_user_agent" }
16 max-worker-connections: "<number>"
17 upstream-keepalive-connections: "<number>"
18kind: ConfigMap
19metadata:
20 annotations:
21 meta.helm.sh/release-name: "<release-name>"
22 meta.helm.sh/release-namespace: kube-system
23 labels:
24 app.kubernetes.io/component: controller
25 app.kubernetes.io/instance: "<release-name>"
26 app.kubernetes.io/managed-by: Helm
27 app.kubernetes.io/name: cce-ingress-nginx-controller
28 app.kubernetes.io/version: "<version>"
29 helm.sh/chart: "cce-ingress-nginx-controller-<chart-version>"
30 name: "{ingressclass}-ngx-control-controller"
31 namespace: kube-system
NGINX Ingress Annotation
NGINX Ingress 中的 Annotation 配置可以对 Ingress、Host 或某条 Rule 的默认行为进行修改。
完整的 Ingress Annotation 配置请参考 Annotations - NGINX Ingress Controller。
示例
以下是一个集群中的 Ingress 资源结构示意,具体值请按实际环境填写。
1apiVersion: networking.k8s.io/v1
2kind: Ingress
3metadata:
4 annotations:
5 cce.ingress.blb-backup-content: ""
6 kubernetes.io/ingress.class: cce
7 nginx.ingress.kubernetes.io/use-regex: "true"
8 nginx.ingress.kubernetes.io/ssl-redirect: "false"
9 name: "<ingress-name>"
10 namespace: "<namespace>"
11spec:
12 rules:
13 - host: "<domain>"
14 http:
15 paths:
16 - backend:
17 service:
18 name: "<service-name>"
19 port:
20 number: "<service-port>"
21 path: /*
常见使用场景
以下说明常用的使用场景及其相关配置。
使用 X-Forwarded-For Header 记录源 IP
当希望请求经过 Ingress 时附加原始 Client IP,可按以下配置进行修改:
1# 配置位于 ConfigMap
2compute-full-forwarded-for: "true" # 计算完整 X-Forwarded-For Header,将源 IP 添加在 Header 之后,而非直接覆盖原值
3forwarded-for-header: X-Forwarded-For # 使用 X-Forwarded-For Header 来标识源 IP
4use-forwarded-headers: "true" # 沿用上游请求的 X-Forwarded-* 相关 Header
Ingress 同时接收 HTTP 与 HTTPS 请求
NGINX Ingress 默认对配置 HTTPS 的域名的 HTTP 请求返回 308 响应,为 Ingress 资源添加以下 Annotation 后 HTTPS 跳转会关闭,HTTP 可以直接访问:
1# 配置位于 Ingress Annotation
2nginx.ingress.kubernetes.io/ssl-redirect: "false" # 关闭 SSL 重定向
URL 重写
Ingress 结合 Annotation 可以实现 URL 重写。
在正则匹配提取时,$N 代表匹配 URL 正则表达式模板中的第 N 个括号中匹配到的内容。
当需要对多个前缀进行重写时,可在 Ingress 中添加如下 Annotation:
1# 配置位于 Ingress Annotation
2nginx.ingress.kubernetes.io/configuration-snippet: |
3 rewrite ^/path-a/(.*) /$1 break;
4 rewrite ^/path-b/(.*) /$1 break;
评价此篇文章
