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

如何在Kubernetes中实现跨域名URL重定向(含公网转内网)

场景1:公网域名A(https://example.com)重定向到公网域名B(https://sample.com)

在Kubernetes中实现域名重定向,主流方案是通过Ingress控制器搭配中间件/注解完成,以下是两种常用实现方式:

方案1:使用Traefik的RedirectRegex中间件

Traefik原生支持Middleware资源处理重定向逻辑,步骤如下:

  1. 创建RedirectRegex中间件,匹配域名A的请求并跳转至域名B:
apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
  name: redirect-example-to-sample
spec:
  redirectRegex:
    regex: ^https://example.com/(.*)
    replacement: https://sample.com/$1
    permanent: true  # 启用301永久重定向,改为false则为302临时重定向
  1. 将中间件关联到域名A的IngressRoute:
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
  name: example-ingress
spec:
  entryPoints:
    - websecure
  routes:
    - match: Host(`example.com`)
      kind: Rule
      middlewares:
        - name: redirect-example-to-sample
      services:
        - name: dummy-service  # 只需存在的服务,重定向会优先触发
          port: 80
  tls:
    certResolver: default  # 配置你的证书解析器,确保HTTPS正常运行

方案2:使用Nginx Ingress注解

Nginx Ingress可通过注解直接配置重定向,无需额外中间件资源:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: example-ingress
  annotations:
    nginx.ingress.kubernetes.io/permanent-redirect: "https://sample.com$request_uri"
    # 若需临时重定向,替换为:nginx.ingress.kubernetes.io/temporary-redirect: "https://sample.com$request_uri"
spec:
  tls:
    - hosts:
        - example.com
      secretName: example-tls  # 绑定你的HTTPS证书Secret
  rules:
    - host: example.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: dummy-service  # 只需存在的服务
                port:
                  number: 80

场景2:公网域名A重定向至内网域名B

这种场景需注意:内网域名B必须确保请求发起方(用户客户端)能够访问到,如果内网域名仅在Kubernetes集群内部或企业内网可解析,公网用户直接访问会失败。若仅需集群内部流量重定向,或客户端处于可访问内网域名的环境,可按以下方式配置:

方案1:Traefik中间件实现

与场景1逻辑一致,仅修改重定向目标为内网域名:

apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
  name: redirect-example-to-internal-sample
spec:
  redirectRegex:
    regex: ^https://example.com/(.*)
    replacement: https://internal.sample.com/$1
    permanent: true

随后将该中间件关联到域名A的IngressRoute即可,配置同场景1,仅需替换中间件名称。

方案2:Nginx Ingress注解实现

直接修改重定向目标为内网域名:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: example-internal-ingress
  annotations:
    nginx.ingress.kubernetes.io/permanent-redirect: "https://internal.sample.com$request_uri"
spec:
  tls:
    - hosts:
        - example.com
      secretName: example-tls
  rules:
    - host: example.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: dummy-service
                port:
                  number: 80

补充说明

如果内网域名B仅能被Kubernetes集群内部访问,公网用户无法直接访问,此时URL重定向无法满足需求,需要改为反向代理(将请求转发至内网服务,而非让客户端跳转)。以Nginx Ingress为例,配置如下:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: example-proxy-to-internal
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /$1
spec:
  tls:
    - hosts:
        - example.com
      secretName: example-tls
  rules:
    - host: example.com
      http:
        paths:
          - path: /(.*)
            pathType: Prefix
            backend:
              service:
                name: internal-sample-service  # 若内网域名对应集群内Service,可直接指向该Service
                port:
                  number: 443

内容的提问来源于stack exchange,提问作者kishore pv

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 08:45:46