2017-04-14 38 views
2

我有一個Kubernetes Ingress資源,我試圖將所有非www流量重定向到www子域進行url規範化。因此,example.com上的所有流量都應重寫爲www.example.com。我似乎無法弄清楚如何正確使用Ingress rewrite example來實現這一點。Kubernetes Ingress - 如何將所有非www流量重寫到www子域?

我的入口(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 
       } 
      } 
      ] 
     } 
     } 
    ] 
    } 
} 

回答

2

ingress.kubernetes.io/rewrite-target用於重寫請求URI,而不是主機。

它看起來像你從你的鏈接使用nginx入口控制器。您可以通過添加第二個Ingress得到你想要的效果爲example.nl使用該ingress.kubernetes.io/configuration-snippet註釋添加301

{ 
    "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 
       } 
      } 
      ] 
     } 
     } 
    ] 
    } 
}