如何修复Ingress 404默认后端 [英] How to fix ingress 404 default backend
问题描述
几个月前,我开始使用Kubernetes,实际上我将自己的microServices迁移到了牧场主群集(RKE).一切正常,我的部署也不错,服务也不错.我想使用入口.
I started to use Kubernetes few month ago and I actually migrate my microServices to my rancher cluster (RKE). Everything works good, my deployments are good and services too. I would like use ingress.
一切看起来都不错,服务是通过入口找到的,而pod是通过服务找到的.但是,当我尝试访问该网站时,我从入口控制器收到404错误页面.
Everything looks good, services are find by ingress and pods are find by services. However when I try to go to the website, I have a 404 error page from ingress controller.
您可以看到我的两个路径的配置:一个是nginx,另一个是在grafana上. 有人知道我该如何解决它,并使用ingress来做我的反向代理?
You can see my configuration for juste two paths : one nginx and on grafana. Someone knows how can i fix it and use ingress to do my reverse proxy ?
非常感谢您的帮助.
我尝试使用没有结果的重写目标,并且不建议使用add-base-url.
I trie to use rewrite-target without result and add-base-url is deprecated.
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
field.cattle.io/creatorId: user-cg5r7
field.cattle.io/ingressState: '{"bXktaW5ncmVzcy9kZWZhdWx0L3d3dy5zY29sLWVhLm92aC8vbmdpbngvNDI=":""}'
field.cattle.io/publicEndpoints: '[{"addresses":["51.68.226.21"],"port":80,"protocol":"HTTP","serviceName":"default:nginx-services","ingressName":"default:my-ingress","hostname":"www.scol-ea.ovh","path":"/nginx","allNodes":true}]'
creationTimestamp: "2019-08-31T10:54:25Z"
generation: 2
labels:
cattle.io/creator: or antoine
name: my-ingress
namespace: default
resourceVersion: "106239"
selfLink: /apis/extensions/v1beta1/namespaces/default/ingresses/my-ingress
uid: b27b7b20-cbdd-11e9-b16b-fa163ea73397
spec:
rules:
- host: www.scol-ea.ovh
http:
paths:
- backend:
serviceName: nginx-sample
servicePort: 80
path: /nginx
- backend:
serviceName: prometheus-grafana
servicePort: http
path : /grafana
------------------------
apiVersion: v1
kind: Service
metadata:
annotations:
field.cattle.io/targetWorkloadIds: '["deployment:default:nginx-sample"]'
workload.cattle.io/targetWorkloadIdNoop: "true"
workload.cattle.io/workloadPortBased: "true"
creationTimestamp: "2019-08-31T10:03:47Z"
labels:
cattle.io/creator: norman
name: nginx-sample
namespace: default
ownerReferences:
- apiVersion: apps/v1beta2
controller: true
kind: deployment
name: nginx-sample
uid: 57af9603-cb2a-11e9-b16b-fa163ea73397
resourceVersion: "102071"
selfLink: /api/v1/namespaces/default/services/nginx-sample
uid: 9fffe98c-cbd6-11e9-b16b-fa163ea73397
spec:
clusterIP: 10.43.183.187
ports:
- name: 80tcp02
port: 80
protocol: TCP
targetPort: 80
selector:
workload.user.cattle.io/workloadselector: deployment-default-nginx-sample
sessionAffinity: None
type: ClusterIP
----------------------------
apiVersion: v1
kind: Service
metadata:
creationTimestamp: "2019-08-30T13:44:00Z"
labels:
app: prometheus-grafana
chart: grafana-0.0.31
heritage: Tiller
io.cattle.field/appId: prometheus
release: prometheus
name: prometheus-grafana
namespace: default
resourceVersion: "2536"
selfLink: /api/v1/namespaces/default/services/prometheus-grafana
uid: 38ebd878-cb2c-11e9-b16b-fa163ea73397
spec:
clusterIP: 10.43.142.143
ports:
- name: http
port: 80
protocol: TCP
targetPort: 3000
selector:
app: prometheus-grafana
sessionAffinity: None
type: ClusterIP
推荐答案
如果您在kubernetes中使用nginx作为部署代理,并且遇到了问题,那么以下配置可以解决重定向问题.
If you are using nginx as deployment proxy in the kubernetes and facing the issue then the below configuration can resolve the redirection issue.
您可以在grafan.ini文件中包含以下变量,也可以将其公开为env变量,如下所示,
Either you can include the below variables in the grafan.ini file or can expose as env variables as shown below,
GF_SERVER_DOMAIN=abc.google.com
GF_SERVER_ROOT_URL=%(protocol)s://%(domain)s:/grafana
因此Grafana部署将如下图所示.
So the Grafana deployment will look like the below one.
apiVersion: apps/v1
kind: Deployment
metadata:
name: grafana
namespace: monitoring
spec:
replicas: 1
selector:
matchLabels:
app: grafana
spec:
containers:
- name: grafana
image: grafana/grafana:latest
env:
- name: GF_SERVER_DOMAIN
value: "abc.google.com"
- name: GF_SERVER_ROOT_URL
value: "%(protocol)s://%(domain)s:/grafana"
ports:
- name: grafana
containerPort: 3000
resources:
limits:
memory: "2Gi"
cpu: "1000m"
requests:
memory: "1Gi"
cpu: "500m"
volumeMounts:
- mountPath: /var/lib/grafana
name: grafana-storage-volume
- mountPath: /etc/grafana/provisioning/datasources
name: grafana-datasources
readOnly: false
并且您必须如下更新nginx服务器位置块,
And you have to update the nginx server location block as below,
location /grafana {
proxy_pass http://grafana.monitoring.svc.cluster.local:3000;
rewrite ^/grafana/(.*) /$1 break;
proxy_set_header Host $host;
}
这篇关于如何修复Ingress 404默认后端的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!