如何修复Ingress 404默认后端 [英] How to fix ingress 404 default backend

查看:1347
本文介绍了如何修复Ingress 404默认后端的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

几个月前,我开始使用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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆