Nginx官方Ingress的Websocket配置

注意!

1-nginx-ingress实现ingress方案是nginx官方提供的,来源地址GitHub - nginxinc/kubernetes-ingress: NGINX and NGINX Plus Ingress Controllers for Kubernetes

2-该配置方案不适用

Welcome - Ingress-Nginx Controller (kubernetes.github.io)

3-ingress-nginx与nginx-ingress是两套不同的基于Nginx的实现ingress的方案

  • ingress-nginx  是Kubernetes官网方案
  • nginx-ingress  是Nginx官网方案

为了使用 NGINX Ingress 控制器对 WebSocket 应用进行负载均衡,你需要在 Ingress 资源定义中添加 nginx.org/websocket-services 注解。这个注解指定了哪些服务是 WebSocket 服务。注解的语法如下:

nginx.org/websocket-services: "service1[,service2,...]"

在这个例子中,nginx.org/websocket-services 注解被设置为 "service1,service2",这意味着 service1 和 service2 都会被识别为 WebSocket 服务。

在以下示例中,我们将对三个应用进行负载均衡,其中一个应用使用了WebSocket协议:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: example-ingress
  annotations:
    nginx.org/websocket-services: "websocket-service"
spec:
  rules:
  - host: example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: webapp-service
            port:
              name: http
      - path: /ws
        pathType: Prefix
        backend:
          service:
            name: websocket-service
            port:
              name: ws
      - path: /api
        pathType: Prefix
        backend:
          service:
            name: api-service
            port:
              name: http

在这个例子中:

  • nginx.org/websocket-services: "websocket-service" 注解指定了名为 websocket-service 的服务为 WebSocket 类型的服务。
  • / 路径映射到名为 webapp-service 的服务。
  • /ws 路径映射到名为 websocket-service 的服务,并且通过注解被标记为 WebSocket 服务。
  • /api 路径映射到名为 api-service 的服务。
### NGINX Ingress 配置指南 NGINX Ingress Controller 是 Kubernetes 中常用的 Ingress 实现之一,提供了对 Websocket、gRPC、TCP 和 UDP 应用程序的负载均衡支持[^1]。以下是对 NGINX Ingress 配置的详细说明、示例和参数详解。 #### 一、配置文件详解 NGINX Ingress配置主要通过 YAML 文件定义,其中包含 `metadata` 和 `spec` 两部分。以下是一个典型的 NGINX Ingress 配置文件示例: ```yaml apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: example-ingress annotations: kubernetes.io/ingress.class: "nginx" nginx.ingress.kubernetes.io/rewrite-target: / nginx.ingress.kubernetes.io/proxy-connect-timeout: "600" nginx.ingress.kubernetes.io/proxy-send-timeout: "600" nginx.ingress.kubernetes.io/proxy-read-timeout: "600" spec: rules: - host: foo.bar.com http: paths: - pathType: Prefix path: "/bar" backend: service: name: service1 port: number: 80 - host: "*.foo.com" http: paths: - pathType: Prefix path: "/foo" backend: service: name: service2 port: number: 80 ``` #### 二、关键参数详解 以下是 NGINX Ingress 配置中常见的注解及其作用: 1. **`kubernetes.io/ingress.class`** 指定使用的 Ingress Controller 类型。例如,`nginx` 表示使用 NGINX Ingress Controller[^4]。 2. **`nginx.ingress.kubernetes.io/rewrite-target`** 用于 URL 重写。例如,将 `/foo/bar` 转换为 `/bar`[^4]。 3. **`nginx.ingress.kubernetes.io/proxy-connect-timeout`** 定义连接到后端服务的超时时间,默认为 5 秒[^4]。 4. **`nginx.ingress.kubernetes.io/proxy-send-timeout`** 定义向后端发送数据的超时时间,默认为 60 秒。 5. **`nginx.ingress.kubernetes.io/proxy-read-timeout`** 定义从后端读取数据的超时时间,默认为 60 秒。 6. **`nginx.ingress.kubernetes.io/proxy-body-size`** 定义客户端上传文件的最大大小,默认为 20 MB。 7. **`nginx.ingress.kubernetes.io/app-root`** 定义应用程序的根路径。例如,将 `/index.html` 设置为默认页面。 #### 三、最佳实践 1. **使用通配符域名** 通过 `*.foo.com` 可以匹配所有以 `foo.com` 结尾的子域名,但需要确保 HTTP 请求头中的 `Host` 字段与规则匹配。 2. **启用 HTTPS 支持** 在生产环境中,建议为 Ingress 配置 TLS/SSL 终止功能。可以通过以下方式实现: ```yaml spec: tls: - hosts: - example.com secretName: example-tls-secret ``` 3. **优化超时设置** 根据实际应用场景调整 `proxy-connect-timeout`、`proxy-send-timeout` 和 `proxy-read-timeout` 参数,避免因超时导致的服务中断。 4. **简化路由规则** 在复杂的路由场景中,尽量减少不必要的嵌套和重复配置,以降低维护成本[^1]。 #### 四、部署方案 NGINX Ingress Controller 的部署通常包括以下步骤: 1. 部署 NGINX Ingress Controller。 2. 创建 Ingress 对象,定义路由规则。 3. 验证 Ingress 是否正常工作。 例如,创建一个核心的 `with-rbac.yaml` 文件,用于初始化 Ingress Controller[^2]。 --- ###
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

孤思冥想

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值