You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kubernetes Nginx Ingress Controller实现旧子域名重定向配置问询

结论

你当前提供的Ingress配置无法实现old.example.com到new.example.com的子域名重定向需求。

现有配置的问题
  • nginx.ingress.kubernetes.io/rewrite-target注解的作用是重写请求的URI路径,不涉及域名修改,现有配置只会让新旧两个域名同时访问同一个后端服务,不会触发任何重定向逻辑。
  • TLS配置段未包含old.example.com域名,用户访问旧域名时会先触发证书安全告警,即使配置了重定向也会影响访问体验。
调整方案

你可以根据使用习惯选择以下任意一种配置方式实现需求:

方案1:拆分两个独立Ingress(推荐,逻辑更清晰)

新域名正常服务的Ingress配置

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: rancher-ing-new
  namespace: test
  annotations:
    kubernetes.io/ingress.class: "nginx"
    cert-manager.io/cluster-issuer: letsencrypt-prod
    kubernetes.io/tls-acme: "true"
    ingress.kubernetes.io/secure-backends: "true"
    ingress.kubernetes.io/ssl-redirect: "true"
spec:
  tls:
  - hosts:
    - new.example.com
    secretName: new.example.com
  rules:
  - host: new.example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: rancher-logo-service
            port:
              number: 80

旧域名重定向专用的Ingress配置

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: rancher-ing-old-redirect
  namespace: test
  annotations:
    kubernetes.io/ingress.class: "nginx"
    cert-manager.io/cluster-issuer: letsencrypt-prod
    kubernetes.io/tls-acme: "true"
    ingress.kubernetes.io/ssl-redirect: "true"
    # 301永久重定向到新域名,完整保留原请求路径和参数
    nginx.ingress.kubernetes.io/permanent-redirect: https://new.example.com$request_uri
spec:
  tls:
  - hosts:
    - old.example.com
    secretName: old.example.com
  rules:
  - host: old.example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          # 此处填任意集群内存在的Service即可,重定向逻辑会优先于后端转发生效
          service:
            name: rancher-logo-service
            port:
              number: 80

方案2:单个Ingress实现

如果你不想拆分Ingress资源,也可以在原有配置基础上增加域名判断逻辑:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: rancher-ing
  namespace: test
  annotations:
    kubernetes.io/ingress.class: "nginx"
    cert-manager.io/cluster-issuer: letsencrypt-prod
    kubernetes.io/tls-acme: "true"
    ingress.kubernetes.io/secure-backends: "true"
    ingress.kubernetes.io/ssl-redirect: "true"
    # 增加域名判断重定向逻辑
    nginx.ingress.kubernetes.io/server-snippet: |
      if ($host = 'old.example.com') {
        return 301 https://new.example.com$request_uri;
      }
spec:
  tls:
  - hosts:
    - new.example.com
    - old.example.com
    secretName: example.com
  rules:
  - host: new.example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: rancher-logo-service
            port:
              number: 80
  - host: old.example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: rancher-logo-service
            port:
              number: 80

两种方案都可以实现旧域名所有请求301永久重定向到新域名,同时完整保留原请求路径、参数,且旧域名不会触发证书安全告警。

内容的提问来源于stack exchange,提问作者gharbi.bdr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 09:24:01