我正在尝试将网址 www.example.com 本身重定向到 example.com ,同时保留有关原始请求的所有内容在 k8s 1.11.1
我尝试使用简单的Ingress进行此操作,然后使用注释将其重定向。
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
这里的问题是我不想有任何规则/后端。我只是想使用一个Ingress将www.example.com重定向到example.com,但是k8s Ingresses要求我有规则。这里有任何解决方法吗?
答案 0 :(得分:0)
实际上,Ingress资源已经为相关API specification明确定义了先决条件。您可以从常规配置中排除rules:
字段,但是应该明确指定backend:
,这样在没有声明或不匹配任何规则的情况下,Nginx Ingress controller可以将网络流量路由到目标端点。
每当您通过Annotations或ConfigMaps为Nginx Ingress控制器创建任何特定设置时,这两个选项都执行相同的工作,即对基础nginx.conf
文件应用某些特定配置,驻留在nginx-ingress-controller
Pod上。这意味着Ingress控制器将server {}
和location {}
块应用于特定主机的相应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控制器Pod中独立应用它。
我认为您也可以考虑使用nginx.ingress.kubernetes.io/from-to-www-redirect: "true"
annotation来实现当前方案中的目标。
答案 1 :(得分:0)
以下应该做:
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