Redirect 如何使用nginx入口控制器将www url重定向到无www url?

Redirect 如何使用nginx入口控制器将www url重定向到无www url?,redirect,kubernetes-ingress,nginx-ingress,Redirect,Kubernetes Ingress,Nginx Ingress,我试图让url www.example.com重定向到example.com,同时在k8s1.11.1中保留原始请求的所有内容 我试图使用一个简单的入口来实现这一点,然后使用注释来重定向它 apiVersion: extensions/v1beta1 kind: Ingress metadata: annotations: kubernetes.io/tls-acme: "true" kubernetes.io/ingress.class: "nginx" nginx

我试图让url www.example.com重定向到example.com,同时在k8s1.11.1中保留原始请求的所有内容

我试图使用一个简单的入口来实现这一点,然后使用注释来重定向它

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/tls-acme: "true"
    kubernetes.io/ingress.class: "nginx"
    nginx.ingress.kubernetes.io/permanent-redirect: https://example.com
    nginx.ingress.kubernetes.io/ssl-redirect: "True"
  name: example-redirect
spec:
  tls:
  - hosts:
    - www.example.com
    secretName: example-tls
  rules:
  - host: www.example.com
    http:
      paths:
      - backend:
          serviceName: example
          servicePort: http
这里的问题是我不想有任何规则/后端。我只是想使用入口将www.example.com重定向到example.com,但k8s入口要求我有规则。这里有什么解决方法吗?

实际上,resource已经为相关API定义了严格的先决条件。您可以从常规配置中排除rules:字段,但是应该明确指定backend:,以便在没有声明或匹配规则的情况下将网络流量路由到目标端点

每当您通过或为Nginx Ingress controller创建任何特定设置时,这两个选项都会执行相同的任务,将某些特定配置应用于驻留在Nginx Ingress controller Pod上的底层Nginx.conf文件。这意味着入口控制器将服务器{}和位置{}块应用到特定主机对应的Nginx web服务器Pod中:

server {
        server_name www.example.com ;

        listen 80;

        listen [::]:80;

        set $proxy_upstream_name "-";

        listen 443  ssl http2;

        listen [::]:443  ssl http2;

        .............

        location / {

            set $namespace      "default";
            set $ingress_name   "example-redirect";
            set $service_name   "example";
            set $service_port   "http";
            set $location_path  "/";
            ......................
                   }
       }
因此,我假设您可以根据Ingress资源配置捕获nginx.conf文件,然后在Ingress控制器吊舱内独立应用它

我假设您也可以考虑使用NGNX.IGRES.KubNET.IO/OFF到WWW重定向:TURE以实现当前场景中的目标。

以下应该做:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/tls-acme: "true"
    kubernetes.io/ingress.class: "nginx"
    nginx.ingress.kubernetes.io/configuration-snippet: |
      if ($host = 'www.example.com' ) {
        rewrite ^ https://example.com$request_uri permanent;
      }
  name: example-redirect
spec:
  tls:
  - hosts:
    - www.example.com
    secretName: example-tls
  rules:
  - host: www.example.com
    http:
      paths:
      - backend:
          serviceName: example
          servicePort: http