<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Networking :: Ay Docs</title>
    <link>https://ops.docs.72602.space/using/networking/index.html</link>
    <description>Ingress Nginx 性能优化 Traefik VS Nginx</description>
    <generator>Hugo</generator>
    <language>en</language>
    <lastBuildDate>Mon, 07 Oct 2024 19:58:45 +0800</lastBuildDate>
    <atom:link href="https://ops.docs.72602.space/using/networking/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Ingress</title>
      <link>https://ops.docs.72602.space/using/networking/ingress/index.html</link>
      <pubDate>Thu, 07 Mar 2024 15:00:59 +0800</pubDate>
      <guid>https://ops.docs.72602.space/using/networking/ingress/index.html</guid>
      <description>Kubernetes Ingress 原理详解 Ingress 是 Kubernetes 中用于管理集群外部访问集群内服务的 API 对象,提供 HTTP/HTTPS 路由功能。&#xA;🎯 Ingress 的作用 没有 Ingress 的问题 问题 1:每个服务需要一个 LoadBalancer ┌────────────────────────────────────┐ │ Service A (LoadBalancer) $$$ │ │ Service B (LoadBalancer) $$$ │ │ Service C (LoadBalancer) $$$ │ └────────────────────────────────────┘ 成本高、管理复杂、IP 地址浪费 问题 2:无法基于域名/路径路由 客户端 → NodePort:30001 (Service A) 客户端 → NodePort:30002 (Service B) 需要记住不同的端口,不友好 使用 Ingress 的方案 单一入口 + 智能路由 ┌───────────────────────────────────────┐ │ Ingress Controller │ │ (一个 LoadBalancer 或 NodePort) │ └───────────┬───────────────────────────┘ │ 根据域名/路径路由 ┌───────┴───────┬──────────┐ ▼ ▼ ▼ Service A Service B Service C (ClusterIP) (ClusterIP) (ClusterIP) 🏗️ Ingress 架构组成 核心组件 ┌─────────────────────────────────────────────┐ │ Ingress 生态系统 │ ├─────────────────────────────────────────────┤ │ 1. Ingress Resource (资源对象) │ │ └─ 定义路由规则(YAML) │ │ │ │ 2. Ingress Controller (控制器) │ │ └─ 读取 Ingress,配置负载均衡器 │ │ │ │ 3. 负载均衡器 (Nginx/Traefik/HAProxy) │ │ └─ 实际处理流量的组件 │ └─────────────────────────────────────────────┘ 📋 Ingress Resource (资源定义) 基础示例 apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: example-ingress annotations: nginx.ingress.kubernetes.io/rewrite-target: / spec: # 1. 基于域名路由 rules: - host: example.com http: paths: - path: / pathType: Prefix backend: service: name: web-service port: number: 80 # 2. TLS/HTTPS 配置 tls: - hosts: - example.com secretName: example-tls 完整功能示例 apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: advanced-ingress namespace: default annotations: # Nginx 特定配置 nginx.ingress.kubernetes.io/rewrite-target: /$2 nginx.ingress.kubernetes.io/ssl-redirect: &#34;true&#34; nginx.ingress.kubernetes.io/rate-limit: &#34;100&#34; # 自定义响应头 nginx.ingress.kubernetes.io/configuration-snippet: | add_header X-Custom-Header &#34;Hello from Ingress&#34;; spec: # IngressClass (指定使用哪个 Ingress Controller) ingressClassName: nginx # TLS 配置 tls: - hosts: - app.example.com - api.example.com secretName: example-tls-secret # 路由规则 rules: # 规则 1:app.example.com - host: app.example.com http: paths: - path: / pathType: Prefix backend: service: name: frontend-service port: number: 80 # 规则 2:api.example.com - host: api.example.com http: paths: # /v1/* 路由到 api-v1 - path: /v1 pathType: Prefix backend: service: name: api-v1-service port: number: 8080 # /v2/* 路由到 api-v2 - path: /v2 pathType: Prefix backend: service: name: api-v2-service port: number: 8080 # 规则 3:默认后端(可选) defaultBackend: service: name: default-backend port: number: 80 🎛️ PathType (路径匹配类型) 三种匹配类型 PathType 匹配规则 示例 Prefix 前缀匹配 /foo 匹配 /foo, /foo/, /foo/bar Exact 精确匹配 /foo 只匹配 /foo,不匹配 /foo/ ImplementationSpecific 由 Ingress Controller 决定 取决于实现 示例对比 apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: path-types-demo spec: rules: - host: example.com http: paths: # Prefix 匹配 - path: /api pathType: Prefix backend: service: name: api-service port: number: 8080 # 匹配: # ✅ /api # ✅ /api/ # ✅ /api/users # ✅ /api/v1/users # Exact 匹配 - path: /login pathType: Exact backend: service: name: auth-service port: number: 80 # 匹配: # ✅ /login # ❌ /login/ # ❌ /login/oauth 🚀 Ingress Controller (控制器) 常见 Ingress Controller Controller 特点 适用场景 Nginx Ingress 最流行,功能强大 通用场景,生产推荐 Traefik 云原生,动态配置 微服务,自动服务发现 HAProxy 高性能,企业级 大流量,高并发 Kong API 网关功能 API 管理,插件生态 Istio Gateway 服务网格集成 复杂微服务架构 AWS ALB 云原生(AWS) AWS 环境 GCE 云原生(GCP) GCP 环境 🔧 Ingress Controller 工作原理 核心流程 ┌─────────────────────────────────────────────┐ │ 1. 用户创建/更新 Ingress Resource │ │ kubectl apply -f ingress.yaml │ └────────────────┬────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────┐ │ 2. Ingress Controller 监听 API Server │ │ - Watch Ingress 对象 │ │ - Watch Service 对象 │ │ - Watch Endpoints 对象 │ └────────────────┬────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────┐ │ 3. 生成配置文件 │ │ Nginx: /etc/nginx/nginx.conf │ │ Traefik: 动态配置 │ │ HAProxy: /etc/haproxy/haproxy.cfg │ └────────────────┬────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────┐ │ 4. 重载/更新负载均衡器 │ │ nginx -s reload │ └────────────────┬────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────┐ │ 5. 流量路由生效 │ │ 客户端请求 → Ingress → Service → Pod │ └─────────────────────────────────────────────┘ 📦 部署 Nginx Ingress Controller 方式 1:使用官方 Helm Chart (推荐) # 添加 Helm 仓库 helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx helm repo update # 安装 helm install ingress-nginx ingress-nginx/ingress-nginx \ --namespace ingress-nginx \ --create-namespace \ --set controller.service.type=LoadBalancer # 查看部署状态 kubectl get pods -n ingress-nginx kubectl get svc -n ingress-nginx 方式 2:使用 YAML 部署 # 下载官方 YAML kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/cloud/deploy.yaml # 查看部署 kubectl get all -n ingress-nginx 核心组件 # 1. Deployment - Ingress Controller Pod apiVersion: apps/v1 kind: Deployment metadata: name: ingress-nginx-controller namespace: ingress-nginx spec: replicas: 2 # 高可用建议 2+ selector: matchLabels: app.kubernetes.io/name: ingress-nginx template: metadata: labels: app.kubernetes.io/name: ingress-nginx spec: serviceAccountName: ingress-nginx containers: - name: controller image: registry.k8s.io/ingress-nginx/controller:v1.9.0 args: - /nginx-ingress-controller - --election-id=ingress-nginx-leader - --controller-class=k8s.io/ingress-nginx - --configmap=$(POD_NAMESPACE)/ingress-nginx-controller ports: - name: http containerPort: 80 - name: https containerPort: 443 livenessProbe: httpGet: path: /healthz port: 10254 readinessProbe: httpGet: path: /healthz port: 10254 --- # 2. Service - 暴露 Ingress Controller apiVersion: v1 kind: Service metadata: name: ingress-nginx-controller namespace: ingress-nginx spec: type: LoadBalancer # 或 NodePort ports: - name: http port: 80 targetPort: 80 protocol: TCP - name: https port: 443 targetPort: 443 protocol: TCP selector: app.kubernetes.io/name: ingress-nginx --- # 3. ConfigMap - Nginx 全局配置 apiVersion: v1 kind: ConfigMap metadata: name: ingress-nginx-controller namespace: ingress-nginx data: # 自定义 Nginx 配置 proxy-body-size: &#34;100m&#34; proxy-connect-timeout: &#34;15&#34; proxy-read-timeout: &#34;600&#34; proxy-send-timeout: &#34;600&#34; use-forwarded-headers: &#34;true&#34; 🌐 完整流量路径 请求流程详解 客户端 │ 1. DNS 解析 │ example.com → LoadBalancer IP (1.2.3.4) ▼ LoadBalancer / NodePort │ 2. 转发到 Ingress Controller Pod ▼ Ingress Controller (Nginx Pod) │ 3. 读取 Ingress 规则 │ Host: example.com │ Path: /api/users │ 4. 匹配规则 │ rule: host=example.com, path=/api │ backend: api-service:8080 ▼ Service (api-service) │ 5. Service 选择器匹配 Pod │ selector: app=api │ 6. 查询 Endpoints │ endpoints: 10.244.1.5:8080, 10.244.2.8:8080 │ 7. 负载均衡(默认轮询) ▼ Pod (api-xxxx) │ 8. 容器处理请求 │ Container Port: 8080 ▼ 应用响应 │ 9. 原路返回 ▼ 客户端收到响应 网络数据包追踪 # 客户端发起请求 curl -H &#34;Host: example.com&#34; http://1.2.3.4/api/users # 1. DNS 解析 example.com → 1.2.3.4 (LoadBalancer External IP) # 2. TCP 连接 Client:54321 → LoadBalancer:80 # 3. LoadBalancer 转发 LoadBalancer:80 → Ingress Controller Pod:80 (10.244.0.5:80) # 4. Ingress Controller 内部处理 Nginx 读取配置: location /api { proxy_pass http://api-service.default.svc.cluster.local:8080; } # 5. 查询 Service kube-proxy/iptables 规则: api-service:8080 → Endpoints # 6. 负载均衡到 Pod 10.244.0.5 → 10.244.1.5:8080 (Pod IP) # 7. 响应返回 Pod → Ingress Controller → LoadBalancer → Client 🔒 HTTPS/TLS 配置 创建 TLS Secret # 方式 1:使用自签名证书(测试环境) openssl req -x509 -nodes -days 365 -newkey rsa:2048 \ -keyout tls.key -out tls.crt \ -subj &#34;/CN=example.com&#34; kubectl create secret tls example-tls \ --cert=tls.crt \ --key=tls.key # 方式 2:使用 Let&#39;s Encrypt (生产环境,推荐) # 安装 cert-manager kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.13.0/cert-manager.yaml # 创建 ClusterIssuer kubectl apply -f - &lt;&lt;EOF apiVersion: cert-manager.io/v1 kind: ClusterIssuer metadata: name: letsencrypt-prod spec: acme: server: https://acme-v02.api.letsencrypt.org/directory email: admin@example.com privateKeySecretRef: name: letsencrypt-prod solvers: - http01: ingress: class: nginx EOF 配置 HTTPS Ingress apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: https-ingress annotations: # 自动重定向 HTTP 到 HTTPS nginx.ingress.kubernetes.io/ssl-redirect: &#34;true&#34; # 使用 cert-manager 自动申请证书 cert-manager.io/cluster-issuer: &#34;letsencrypt-prod&#34; spec: ingressClassName: nginx tls: - hosts: - example.com - www.example.com secretName: example-tls # cert-manager 会自动创建这个 Secret rules: - host: example.com http: paths: - path: / pathType: Prefix backend: service: name: web-service port: number: 80 验证 HTTPS # 检查证书 curl -v https://example.com # 查看 Secret kubectl get secret example-tls kubectl describe secret example-tls # 测试 HTTP 自动重定向 curl -I http://example.com # HTTP/1.1 308 Permanent Redirect # Location: https://example.com/ 🎨 高级路由场景 场景 1:基于路径的路由 apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: path-based-routing annotations: nginx.ingress.kubernetes.io/rewrite-target: /$2 spec: rules: - host: myapp.com http: paths: # /api/v1/* → api-v1-service - path: /api/v1(/|$)(.*) pathType: Prefix backend: service: name: api-v1-service port: number: 8080 # /api/v2/* → api-v2-service - path: /api/v2(/|$)(.*) pathType: Prefix backend: service: name: api-v2-service port: number: 8080 # /admin/* → admin-service - path: /admin pathType: Prefix backend: service: name: admin-service port: number: 3000 # /* → frontend-service (默认) - path: / pathType: Prefix backend: service: name: frontend-service port: number: 80 场景 2:基于子域名的路由 apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: subdomain-routing spec: rules: # www.example.com - host: www.example.com http: paths: - path: / pathType: Prefix backend: service: name: website-service port: number: 80 # api.example.com - host: api.example.com http: paths: - path: / pathType: Prefix backend: service: name: api-service port: number: 8080 # blog.example.com - host: blog.example.com http: paths: - path: / pathType: Prefix backend: service: name: blog-service port: number: 80 # *.dev.example.com (通配符) - host: &#34;*.dev.example.com&#34; http: paths: - path: / pathType: Prefix backend: service: name: dev-environment port: number: 80 场景 3:金丝雀发布 (Canary Deployment) # 主版本 Ingress apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: production spec: rules: - host: myapp.com http: paths: - path: / pathType: Prefix backend: service: name: app-v1 port: number: 80 --- # 金丝雀版本 Ingress apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: canary annotations: nginx.ingress.kubernetes.io/canary: &#34;true&#34; # 10% 流量到金丝雀版本 nginx.ingress.kubernetes.io/canary-weight: &#34;10&#34; # 或基于请求头 # nginx.ingress.kubernetes.io/canary-by-header: &#34;X-Canary&#34; # nginx.ingress.kubernetes.io/canary-by-header-value: &#34;always&#34; # 或基于 Cookie # nginx.ingress.kubernetes.io/canary-by-cookie: &#34;canary&#34; spec: rules: - host: myapp.com http: paths: - path: / pathType: Prefix backend: service: name: app-v2-canary port: number: 80 场景 4:A/B 测试 apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: ab-testing annotations: # 基于请求头进行 A/B 测试 nginx.ingress.kubernetes.io/canary: &#34;true&#34; nginx.ingress.kubernetes.io/canary-by-header: &#34;X-Version&#34; nginx.ingress.kubernetes.io/canary-by-header-value: &#34;beta&#34; spec: rules: - host: myapp.com http: paths: - path: / pathType: Prefix backend: service: name: app-beta port: number: 80 # 普通用户访问 A 版本 curl http://myapp.com # Beta 用户访问 B 版本 curl -H &#34;X-Version: beta&#34; http://myapp.com 🔧 常用 Annotations (Nginx) 基础配置 metadata: annotations: # SSL 重定向 nginx.ingress.kubernetes.io/ssl-redirect: &#34;true&#34; # 强制 HTTPS nginx.ingress.kubernetes.io/force-ssl-redirect: &#34;true&#34; # 后端协议 nginx.ingress.kubernetes.io/backend-protocol: &#34;HTTPS&#34; # 或 HTTP, GRPC # 路径重写 nginx.ingress.kubernetes.io/rewrite-target: /$2 # URL 重写 nginx.ingress.kubernetes.io/use-regex: &#34;true&#34; 高级配置 metadata: annotations: # 上传文件大小限制 nginx.ingress.kubernetes.io/proxy-body-size: &#34;100m&#34; # 超时配置 nginx.ingress.kubernetes.io/proxy-connect-timeout: &#34;600&#34; nginx.ingress.kubernetes.io/proxy-send-timeout: &#34;600&#34; nginx.ingress.kubernetes.io/proxy-read-timeout: &#34;600&#34; # 会话保持 (Sticky Session) nginx.ingress.kubernetes.io/affinity: &#34;cookie&#34; nginx.ingress.kubernetes.io/session-cookie-name: &#34;route&#34; nginx.ingress.kubernetes.io/session-cookie-expires: &#34;172800&#34; nginx.ingress.kubernetes.io/session-cookie-max-age: &#34;172800&#34; # 限流 nginx.ingress.kubernetes.io/limit-rps: &#34;100&#34; # 每秒请求数 nginx.ingress.kubernetes.io/limit-connections: &#34;10&#34; # 并发连接数 # CORS 配置 nginx.ingress.kubernetes.io/enable-cors: &#34;true&#34; nginx.ingress.kubernetes.io/cors-allow-origin: &#34;*&#34; nginx.ingress.kubernetes.io/cors-allow-methods: &#34;GET, POST, PUT, DELETE, OPTIONS&#34; # 白名单 nginx.ingress.kubernetes.io/whitelist-source-range: &#34;10.0.0.0/8,192.168.0.0/16&#34; # 基本认证 nginx.ingress.kubernetes.io/auth-type: basic nginx.ingress.kubernetes.io/auth-secret: basic-auth nginx.ingress.kubernetes.io/auth-realm: &#34;Authentication Required&#34; # 自定义 Nginx 配置片段 nginx.ingress.kubernetes.io/configuration-snippet: | more_set_headers &#34;X-Custom-Header: MyValue&#34;; add_header X-Request-ID $request_id; 🛡️ 安全配置 1. 基本认证 # 创建密码文件 htpasswd -c auth admin # 输入密码 # 创建 Secret kubectl create secret generic basic-auth --from-file=auth # 应用到 Ingress kubectl apply -f - &lt;&lt;EOF apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: secure-ingress annotations: nginx.ingress.kubernetes.io/auth-type: basic nginx.ingress.kubernetes.io/auth-secret: basic-auth nginx.ingress.kubernetes.io/auth-realm: &#34;Authentication Required - Please enter your credentials&#34; spec: rules: - host: admin.example.com http: paths: - path: / pathType: Prefix backend: service: name: admin-service port: number: 80 EOF 2. IP 白名单 apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: whitelist-ingress annotations: # 只允许特定 IP 访问 nginx.ingress.kubernetes.io/whitelist-source-range: &#34;10.0.0.0/8,192.168.1.100/32&#34; spec: rules: - host: internal.example.com http: paths: - path: / pathType: Prefix backend: service: name: internal-service port: number: 80 3. OAuth2 认证 apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: oauth2-ingress annotations: nginx.ingress.kubernetes.io/auth-url: &#34;https://oauth2-proxy.example.com/oauth2/auth&#34; nginx.ingress.kubernetes.io/auth-signin: &#34;https://oauth2-proxy.example.com/oauth2/start?rd=$escaped_request_uri&#34; spec: rules: - host: app.example.com http: paths: - path: / pathType: Prefix backend: service: name: protected-service port: number: 80 📊 监控和调试 查看 Ingress 状态 # 列出所有 Ingress kubectl get ingress # 详细信息 kubectl describe ingress example-ingress # 查看 Ingress Controller 日志 kubectl logs -n ingress-nginx -l app.kubernetes.io/name=ingress-nginx -f # 查看生成的 Nginx 配置 kubectl exec -n ingress-nginx &lt;ingress-controller-pod&gt; -- cat /etc/nginx/nginx.conf 测试 Ingress 规则 # 测试域名解析 nslookup example.com # 测试 HTTP curl -H &#34;Host: example.com&#34; http://&lt;ingress-ip&gt;/ # 测试 HTTPS curl -k -H &#34;Host: example.com&#34; https://&lt;ingress-ip&gt;/ # 查看响应头 curl -I -H &#34;Host: example.com&#34; http://&lt;ingress-ip&gt;/ # 测试特定路径 curl -H &#34;Host: example.com&#34; http://&lt;ingress-ip&gt;/api/users 常见问题排查 # 1. 检查 Ingress 是否有 Address kubectl get ingress # 如果 ADDRESS 列为空,说明 Ingress Controller 未就绪 # 2. 检查 Service 和 Endpoints kubectl get svc kubectl get endpoints # 3. 检查 Ingress Controller Pod kubectl get pods -n ingress-nginx kubectl logs -n ingress-nginx &lt;pod-name&gt; # 4. 检查 DNS 解析 kubectl run -it --rm debug --image=busybox --restart=Never -- nslookup example.com # 5. 检查网络连通性 kubectl run -it --rm debug --image=curlimages/curl --restart=Never -- \ curl -H &#34;Host: example.com&#34; http://web-service.default.svc.cluster.local 🎯 Ingress vs Service Type 对比表 维度 Ingress LoadBalancer NodePort 成本 1 个 LB 每个服务 1 个 LB 免费 域名路由 ✅ 支持 ❌ 不支持 ❌ 不支持 路径路由 ✅ 支持 ❌ 不支持 ❌ 不支持 TLS 终止 ✅ 支持 ⚠️ 需要额外配置 ❌ 不支持 7 层功能 ✅ 丰富 ❌ 4 层 ❌ 4 层 适用场景 HTTP/HTTPS 服务 需要独立 LB 的服务 开发测试 💡 关键要点总结 Ingress 的价值 成本优化:多个服务共享一个 LoadBalancer 智能路由:基于域名、路径的 7 层路由 TLS 管理:集中管理 HTTPS 证书 高级功能:限流、认证、重写、CORS 等 易于管理:声明式配置,统一入口 核心概念 Ingress Resource:定义路由规则的 YAML Ingress Controller:读取规则并实现路由的控制器 负载均衡器:实际处理流量的组件(Nginx/Traefik/HAProxy) 典型使用场景 ✅ 微服务 API 网关 ✅ 多租户应用(基于子域名隔离) ✅ 蓝绿部署/金丝雀发布 ✅ Web 应用统一入口 ❌ 非 HTTP 协议(如 TCP/UDP,考虑使用 Gateway API) 🚀 高级话题 1. IngressClass (多 Ingress Controller) 在同一集群中运行多个 Ingress Controller:</description>
    </item>
    <item>
      <title>Nginx 性能优化</title>
      <link>https://ops.docs.72602.space/using/networking/nginx/index.html</link>
      <pubDate>Mon, 07 Oct 2024 19:58:45 +0800</pubDate>
      <guid>https://ops.docs.72602.space/using/networking/nginx/index.html</guid>
      <description>从通用优化、操作系统层、Nginx 配置层、架构层等多个维度，为你详细梳理的方式。&#xA;一、操作系统与硬件层优化 这是优化的基础，为 Nginx 提供一个高性能的运行环境。&#xA;增加文件描述符限制 Nginx 每个连接（尤其是静态文件）都会消耗一个文件描述符。如果并发高，默认限制很容易成为瓶颈。&#xA;# 临时生效 ulimit -n 65536 # 永久生效，修改 /etc/security/limits.conf * soft nofile 65536 * hard nofile 65536 # 同时，确保 nginx.conf 中使用了足够的 worker_rlimit_nofile worker_rlimit_nofile 65536; 优化网络栈&#xA;调整 net.core.somaxconn： 定义等待 Nginx 接受的最大连接队列长度。如果遇到 accept() 队列溢出的错误，需要增加这个值。 sysctl -w net.core.somaxconn=65535 并在 Nginx 的 listen 指令中显式指定 backlog 参数： listen 80 backlog=65535; 启用 TCP Fast Open： 减少 TCP 三次握手的延迟。 sysctl -w net.ipv4.tcp_fastopen=3 增大临时端口范围： 当 Nginx 作为反向代理时，它需要大量本地端口来连接上游服务器。 sysctl -w net.ipv4.ip_local_port_range=&#34;1024 65535&#34; 减少 TCP TIME_WAIT 状态： 对于高并发短连接场景，大量连接处于 TIME_WAIT 状态会耗尽端口资源。 # 启用 TIME_WAIT 复用 sysctl -w net.ipv4.tcp_tw_reuse=1 # 快速回收 TIME_WAIT 连接 sysctl -w net.ipv4.tcp_tw_recycle=0 # 注意：在 NAT 环境下建议为 0，否则可能有问题 # 增大 FIN_WAIT_2 状态的超时时间 sysctl -w net.ipv4.tcp_fin_timeout=30 使用高性能磁盘 对于静态资源服务，使用 SSD 硬盘可以极大提升 IO 性能。</description>
    </item>
    <item>
      <title>Traefik VS Nginx</title>
      <link>https://ops.docs.72602.space/using/networking/traefik_vs_nginx/index.html</link>
      <pubDate>Thu, 07 Mar 2024 15:00:59 +0800</pubDate>
      <guid>https://ops.docs.72602.space/using/networking/traefik_vs_nginx/index.html</guid>
      <description>好的，这是一个非常经典的问题。Traefik 和 Nginx Ingress 都是 Kubernetes 生态中顶级的 Ingress Controller，但它们的设计哲学、使用体验和侧重点有显著不同。&#xA;简单来说：&#xA;Traefik 更像一个为云原生和微服务而生的动态、自动化的 API 网关。 Nginx Ingress 更像一个基于久经考验的 Nginx 的、高度可配置的强大、稳定的反向代理/负载均衡器。 下面我们详细对比一下 Traefik 相对于 Nginx Ingress 的主要优点。&#xA;Traefik 的核心优点 1. 极致的动态配置与自动化 这是 Traefik 最核心的卖点。&#xA;工作原理：Traefik 会主动监听 Kubernetes API Server，实时感知 Service、Ingress Route、Secret 等资源的变化。一旦你创建或修改了一个 Ingress 资源，Traefik 几乎在秒级内自动更新其路由配置，无需任何重启或重载操作。 Nginx Ingress 的对比：Nginx Ingress 通常需要一个名为 nginx-ingress-controller 的组件来监控变化，然后生成一个新的 nginx.conf 配置文件，最后通过向 Nginx 进程发送 reload 信号来加载新配置。虽然这个过程也很快，但它本质上是一个 “生成-重载” 模型，在超大流量或配置复杂时，重载可能带来微小的性能抖动或延迟。 结论：在追求完全自动化和零重载的云原生环境中，Traefik 的动态模型更具吸引力。&#xA;2. 简化的配置模型与 “IngressRoute” CRD Traefik 完美支持标准的 Kubernetes Ingress 资源，但它更推荐使用自己定义的 Custom Resource Definition (CRD)，叫做 IngressRoute。</description>
    </item>
  </channel>
</rss>