Kubernetes Ingress - 如何将所有非www流量重写为www子域名?

时间:2017-04-14 08:11:34

标签: kubernetes google-cloud-platform kubectl

我有一个Kubernetes Ingress资源,我正在尝试将所有非www流量重定向到www子域以进行url规范化。因此example.com上的所有流量都应该重写为www.example.com。我似乎无法弄清楚如何正确使用Ingress rewrite example来实现这一目标。

My Ingress(JSON格式):

{
  "apiVersion": "extensions/v1beta1",
  "kind": "Ingress",
  "metadata": {
    "name": "example-staging",
    "annotations": {
      "ingress.kubernetes.io/rewrite-target": "/",
      "kubernetes.io/ingress.global-static-ip-name": "example-static-ip"
    }
  },
  "spec": {
    "rules": [
      {
        "host": "www.example.nl",
        "http": {
          "paths": [
            {
              "path": "/",
              "backend": {
                "serviceName": "example-service",
                "servicePort": 80
              }
            }
          ]
        }
      }
    ]
  }
}

1 个答案:

答案 0 :(得分:2)

ingress.kubernetes.io/rewrite-target用于重写请求URI,而不是主机。

从你的链接看起来你正在使用nginx入口控制器。您可以为使用Ingress注释添加301的example.nl添加第二个ingress.kubernetes.io/configuration-snippet来获得所需效果。

{
  "apiVersion": "extensions/v1beta1",
  "kind": "Ingress",
  "metadata": {
    "name": "example-staging-wwwredir",
    "annotations": {
      "ingress.kubernetes.io/rewrite-target": "/",
      "ingress.kubernetes.io/configuration-snippet": "return 301 $scheme://www.example.nl$request_uri;"
    }
  },
  "spec": {
    "rules": [
      {
        "host": "example.nl",
        "http": {
          "paths": [
            {
              "path": "/",
              "backend": {
                "serviceName": "example-service",
                "servicePort": 80
              }
            }
          ]
        }
      }
    ]
  }
}