重写nginx Ingress的路径
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了重写nginx Ingress的路径相关的知识,希望对你有一定的参考价值。
我需要将Ingress指向图像,以便我的Pod完整地获取URL。我有以下配置:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: solar-demo
annotations:
nginx.org/server-snippet: "proxy_ssl_verify off;"
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: shmukler.example.com
http:
paths:
- path: /city/*
backend:
serviceName: solar-demo
servicePort: 3000
- path: /solar/*
backend:
serviceName: solar-demo
servicePort: 3001
如果我保留行:nginx.ingress.kubernetes.io/rewrite-target: /
,我在Pods内的服务得到重写的路径,所以/city/dublin
变成/dublin
。
如果我注释掉nginx.ingress.kubernetes.io/rewrite-target: /
这行,我只是在客户端获得503
错误,而日志中没有任何内容。通过重写,我的服务给了我404
,因为没有路线/dublin
。
我究竟做错了什么?我怎么才能通过路径并让Pods响应?
$ kubectl describe svc solar-demo
Name: solar-demo
Namespace: default
Labels: <none>
Annotations: kubectl.kubernetes.io/last-applied-configuration=
{"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"name":"solar-demo","namespace":"default"},"spec":{"ports":[{"name":"city","port":3000...
Selector: app=testapp
Type: ClusterIP
IP: 10.107.221.76
Port: city 3000/TCP
TargetPort: 3000/TCP
Endpoints: 172.17.0.3:3000,172.17.0.8:3000
Port: solar 3001/TCP
TargetPort: 3001/TCP
Endpoints: 172.17.0.3:3001,172.17.0.8:3001
Session Affinity: None
Events: <none>
建议?
答案
这应该是一个工作配置:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: solar-demo
annotations:
kubernetes.io/ingress.class: "nginx"
spec:
rules:
- host: shmukler.example.com
http:
paths:
- path: /city
backend:
serviceName: solar-demo
servicePort: 3000
- path: /solar
backend:
serviceName: solar-demo
servicePort: 3001
改变了什么:
- 从路径中删除了
*
- 注释中指定的入口
- 删除了重写注释
入口处的path
(当使用nginx
入口时)就像指定nginx location
块一样。 nginx
不在位置块中使用*
字符。
以上是关于重写nginx Ingress的路径的主要内容,如果未能解决你的问题,请参考以下文章
KUBERNETES04_Service服务ClusterIPNodePort方式Ingress域名访问路径重写限流操作
nginx.conf 忽略了 nginx-ingress 配置映射片段
企业运维实战--k8s学习笔记 通过Ingress-nginx实现k8s七层负载均衡Ingress加密认证以及地址重写