atk*_*yla 6 nginx kubernetes kubernetes-ingress nginx-ingress
我尝试以下配置时有效 <NodeIP>:30080
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: app-deployment
spec:
replicas: 3
template:
metadata:
labels:
name: app-node
spec:
containers:
- name: app
image: myregistry.net/repo/app:latest
imagePullPolicy: Always
ports:
- containerPort: 8080
env:
- name: NODE_ENV
value: production
---
apiVersion: v1
kind: Service
metadata:
name: app-service
spec:
selector:
name: app-node
ports:
- protocol: TCP
port: 80
targetPort: 8080
nodePort: 30080
type: NodePort
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用Ingress:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: nginx-ingress
spec:
rules:
- host: myhost.com
http:
paths:
- path: /app
backend:
serviceName: app-service
servicePort: 80
Run Code Online (Sandbox Code Playgroud)
myhost.com可与nginx简介屏幕配合使用,但myhost.com/app提供404 Not Found。我的设置中的问题在哪里?
更新:
- path: /
backend:
serviceName: app-service
servicePort: 80
Run Code Online (Sandbox Code Playgroud)
如果我执行根路径,则可以,但是为什么/app不行呢?
bra*_*ett 10
您的入口定义会创建规则,以代理从{path}到的流量{backend.serviceName}{path}。对于您的情况,我认为它不起作用的原因是/app被代理,app-service:80/app但您打算从/根本上为流量提供服务。尝试将此注释添加到您的入口资源中:nginx.ingress.kubernetes.io/rewrite-target: /
来源:https : //github.com/kubernetes/ingress-nginx/tree/master/docs/examples/rewrite
正如 Brandon-Barnett 所指定的,问题来自路径,但在阅读他共享的链接后,我意识到必须指定更具体的重写规则才能使其工作。就我而言
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /$2
name: rewrite
namespace: default
spec:
ingressClassName: nginx
rules:
- host: rewrite.bar.com
http:
paths:
- path: /something(/|$)(.*)
pathType: Prefix
backend:
service:
name: http-svc
port:
number: 80
Run Code Online (Sandbox Code Playgroud)
诀窍是在注释处使用 /$2 ,在路径处使用 (/|$)(.*) 。所以这个重写所做的是,它选择了 Something/ 之后的所有内容,并用它替换 $2,所以:
| 归档时间: |
|
| 查看次数: |
6428 次 |
| 最近记录: |