Kubernetes NGINX Ingress 配置映射 301 重定向

Ben*_*way 6 kubernetes nginx-ingress

在 Kubernetes 中使用 NGINX Ingresss,我看不到一种方法将我的流量从非 www 转发到 www 或基于每个主机的另一个域等

我试过查看 configmap 文档,但看不到我需要的东西。也许它可以进入入口本身?

我还看到了一个使用注释的示例,但这似乎是入口范围的,所以我无法为每个主机设置特定的重定向

Clo*_*hel 14

确实可以使用简单的注释进行重定向:

但是正如您所提到的,它是“入口”范围的,并且无法按主机、域甚至每个路径进行配置。所以你必须自己通过ingress.kubernetes.io/configuration-snippet注解来完成,这要归功于正则表达式:

kind: Ingress
apiVersion: extensions/v1beta1
metadata:
  name: self-made-redirect
  annotations:
    ingress.kubernetes.io/configuration-snippet: |
      if ($host = 'blog.yourdomain.com') {
        return 301 https://yournewblogurl.com;
      }
      if ($host ~ ^(.+)\.yourdomain\.com$) {
        return 301 https://$1.anotherdomain.com$request_uri;
      }
spec:
  rules:
  - host: ...
Run Code Online (Sandbox Code Playgroud)

如果您不太习惯 NGINX,您将更多地了解代码片段中的可能性,尤其是NGINX 文档中$host变量是什么。


小智 5

为了将所有流量(无论使用 HTTP 还是 HTTPS)从 example.com 和www.example.com重定向到 newdomain.example.com,我最终得到了以下解决方案。

在此示例中,我还使用 cert-manager.io 请求www.example.com和 example.com 的证书。

重定向是使用注释nginx.ingress.kubernetes.io/permanent-redirect完成的

kind: Ingress
apiVersion: extensions/v1beta1
metadata:
  name: redirect-example-to-newdomain
  annotations:
    kubernetes.io/ingress.class: "nginx"
    cert-manager.io/cluster-issuer: "letsencrypt-prod"
    nginx.ingress.kubernetes.io/permanent-redirect: https://newdomain.example.com
spec:
  tls:
    - hosts:
      - example.com
      - www.example.com
      secretName: example.com-tls
  rules:
    - host: example.com
    - host: www.example.com
Run Code Online (Sandbox Code Playgroud)