上云无忧 > 文档中心 > 百度智能云容器引擎服务 CCE NGINX Ingress 使用配置参考
容器引擎服务CCE
百度智能云容器引擎服务 CCE NGINX Ingress 使用配置参考

文档简介:
对于 cce-ingress-nginx-controller 组件有 2 处位置可以对组件参数或 Ingress 资源进行配置。 我们可以在组件的 ConfigMap 配置组件的全局运行参数,或是在 Ingress Annotation 中对某个 Ingress 或是 Host、Rule 的配置进行修改。
*此产品及展示信息均由百度智能云官方提供。免费试用 咨询热线:400-826-7010,为您提供专业的售前咨询,让您快速了解云产品,助您轻松上云! 微信咨询
  免费试用、价格特惠

对于 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-values 字符串:

  • 对于数字和 Bool 类型 Value,需要对其添加引号,如:"true","101"
  • 对于数组 Value,使用逗号分隔的字符串

完整 ConfigMap 参数请参考 ConfigMap - NGINX Ingress Controller

示例

以下是一个集群中 cce-ingress-nginx-controller ConfigMap 以供参考

apiVersion: v1
data:
  compute-full-forwarded-for: 'true'
  forwarded-for-header: X-Forwarded-For
  use-forwarded-headers: 'true'
  keep-alive-requests: '10000'
  log-format-upstream: >-
    {"time": "$time_iso8601", "remote_addr": "$proxy_protocol_addr",
    "x_forward_for": "$proxy_add_x_forwarded_for", "request_id": "$req_id",
    "remote_user": "$remote_user", "bytes_sent": $bytes_sent, "request_time":
    $request_time, "status": $status, "vhost": "$host", "request_proto":
    "$server_protocol", "path": "$uri", "request_query": "$args",
    "request_length": $request_length, "duration": $request_time,"method":
    "$request_method", "http_referrer": "$http_referer", "http_user_agent":
    "$http_user_agent" }
  max-worker-connections: '65536'
  upstream-keepalive-connections: '200'
kind: ConfigMap
metadata:
  annotations:
    meta.helm.sh/release-name: cce-ngx-control
    meta.helm.sh/release-namespace: kube-system
  labels:
    app.kubernetes.io/component: controller
    app.kubernetes.io/instance: cce-ngx-control
    app.kubernetes.io/managed-by: Helm
    app.kubernetes.io/name: cce-ingress-nginx-controller
    app.kubernetes.io/version: 0.45.0
    helm.sh/chart: cce-ingress-nginx-controller-3.29.0
  name: cce-ngx-control-controller
  namespace: kube-system

NGINX Ingress Annotation

NGINX Ingress 中的 Annotation 中的配置可以对 Ingress、Host 或是某条 Rule 的默认行为进行修改。

完整的 Ingress Annotation 配置请参考 Annotations - NGINX Ingress Controller

示例

以下是一个集群中的 Ingress 资源内容以供参考:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    cce.ingress.blb-backup-content: ''
    kubernetes.io/ingress.class: cce
    nginx.ingress.kubernetes.io/use-regex: 'true'
    nginx.ingress.kubernetes.io/ssl-redirect: 'false'
  name: test
  namespace: default
spec:
  rules:
    - host: a.com
      http:
        paths:
          - backend:
              serviceName: service-example
              servicePort: 80
            path: /*

常见使用场景

以下说明常用的使用场景及其相关配置

使用 X-Forwarded-For Header 记录源 IP

当我们希望请求经过 Ingress 的时候,附加上请求的原始 ClientIP 时,可以按以下配置进行修改:

# 配置位于 ConfigMap
compute-full-forwarded-for: 'true'    # 计算完整 X-Forwarded-For Header,将源 IP 添加在 Header 之后,而非直接覆盖原值
forwarded-for-header: X-Forwarded-For # 使用 X-Forwarded-For Header 来标识源 IP
use-forwarded-headers: 'true'         # 沿用上游请求的 X-Forwarded-* 相关 Header

Ingress 同时接收 HTTP 与 HTTPS 请求

NGINX Ingress 默认对配置 HTTPS 的域名的 HTTP 请求返回 308 响应,为 Ingress 资源以下 Annotation 之后 HTTPS 跳转会关闭,HTTP 可以直接访问:

# 配置位于 Ingress Annotation
nginx.ingress.kubernetes.io/ssl-redirect: "false" # 关闭 SSL 重定向

URL 重写

Ingress 结合 Annotation 可以实现 URL 重写。

在正则匹配提取时,$N 代表匹配 URL 正则表达式模板中的第 N 个括号中匹配到的内容。

以下举例,假设我们希望将某个 Ingress 下的 ^/nginx/(.) URL 向后端服务转发时去除 /nginx 前缀,将某个 Ingress 下的 ^/tomcat/(.) URL 向后端服务转发时去除 /tomcat 前缀,那么可以在 Ingress 中添加如下 Annotation:

# 配置位于 Ingress Annotation
nginx.ingress.kubernetes.io/configuration-snippet: |
      rewrite ^/nginx/(.*) /$1 break;
      rewrite ^/tomcat/(.*) /$1 break;
相似文档
  • NetworkPolicy 是 K8S 提供的一种资源,用于定义基于 Pod 的网络隔离策略。它描述了一组 Pod 能否与其它组 Pod 及其它 Endpoints 进行通信。本文主要演示如何使用开源工具 felix 或 kube-router 在 CCE 上实现 NetworkPolicy 功能。 用户可以根据集群的容器网络模式,选择对应的组件进行部署。
  • VPC-CNI 模式是百度云容器引擎 CCE 支持的扩展网络模式,基于百度云的弹性网卡产品,能够为集群内的 Pod 分配 VPC 内的 IP 地址。 由百度云 VPC 功能负责路由,打通容器网络的连通性,可实现 Pod 和 Node 的控制面和数据面完全在同一网络层面,该模式下的 Pod 能够复用百度云 VPC 所有产品特性。
  • 注意:以下内容仅针对使用 “VPC 网络”模式的集群 概述: 一个集群中最大的节点数量由容器网段的大小和每个节点上最大 Pod 数量所决定,例如: 容器网段选择 172.16.0.0/16,每个节点最大 Pod 数量为 256,则一个集群中最多只能有 256 个节点;
  • IPv6 可以有效地弥补 IPv4 网络地址空间有限的问题,CCE 目前支持 IPv4/IPv6 双栈集群,包括如下特点: 1. Node 同时支持 IPv4 和 IPv6 地址,集群内部支持使用两种类型地址通信; 2. Pod 双栈同时支持 IPv4 和 IPv6 地址,并支持两种类型 IP 访问; 3. Service 同时支持 IPv4 和 IPv6 地址,并支持通过 IPv6 对外暴露服务。
  • 本文档会详细展示如何配置 ip-masq-agent, 用户可以灵活地将各种配置进行组合,满足容器流量出节点时身份的选择。 关键术语: NAT (网络地址解析) 是一种通过修改 IP 地址头中的源和/或目标地址信息将一个 IP 地址重新映射到另一个 IP 地址的方法。通常由执行 IP 路由的设备执行。
官方微信
联系客服
400-826-7010
7x24小时客服热线
分享
  • QQ好友
  • QQ空间
  • 微信
  • 微博
返回顶部