Nginx代理无法传递给kubernetes中的kibana

时间:2018-10-04 18:00:50

标签: nginx kubernetes kibana

我正在尝试使用具有基本身份验证功能的Nginx代理传递给Kibana Pod。

致力于测试(这是另一个k8s集群,但是非常相似,使用相同的名称空间,kube-dns,pod中的env匹配项,并且彼此可见) 上下文:我通过头盔在AWS的k8s部署了该服务器,nginx具有Kubernetes LB服务类型(基本上是AWS的ELB,其cname在route53)。

如果我将nginx pod指向kibana-app.kube-system.svc.cluster.local:5601,我从nginx看到了kibana pod上的请求,但是在尝试转到server.basePath时返回404:/ api / v1 / proxy / namespaces / kube-system / services / kibana-app /

我可以通过从“ kubectl cluster-info”获取网址,然后检查日志来访问kibana-app pod,请求如下:

"method":"get","statusCode":200,"req":{"url":"/app/kibana"
"x-forwarded-uri":"/api/v1/proxy/namespaces/kube-system/services/kibana-logging/app/kibana

在尝试从nginx到达Kibana路径时(执行基本身份验证之后)找不到问题

    server {
    listen       80;
    server_name  localhost;

    access_log  /var/log/nginx/host.access.log;

    location / {
        auth_basic "simple auth";
        auth_basic_user_file /var/kibana_config/htpasswd;
        try_files KIBANA @kibana-app;
    }

    location @kibanaapp {
        return 301 http://kiban-app-url-from-route53/server.basePath;
    }

    location /api {
            proxy_pass https://api.awszone.mydomain/api;
        proxy_set_header Authorization "Basic ";
    }
}

还尝试移动proxy_pass语句,删除返回值,并仅从kibana的Pod监听的位置进行一次proxy_pass,但要么不起作用,请求就永远不会到达pod,或者当请求到达kibana-app pod时,它会返回404。

有什么想法吗?

谢谢!

更新:

我快到了,现在我可以看到“ kibana正在加载屏幕”,但从未完成加载包,json和东西,nginx pod日志:

获取/api/v1/proxy/namespaces/kube-system/services/kibana-logging/bundles/commons.style.css

在kibana pod上返回404的相同请求:

“ statusCode”:404,“ req”:{“ url”:“ / app / kibana / v1 / proxy / namespaces / kube-system / services / kibana-logging / bundles / commons.bundle.js?v = 10146“,”方法“:”获取“,”标题“:{”主机“:” kibana.app.env.com“,”引荐“:” http://kibana.app.env.com/api“引荐”:“ http://kibana.app.env.com/api “},” res“:{” statusCode“:404,” responseTime“:2,” contentLength“:9},” message“:” GET / app / kibana / v1 / proxy / namespaces / kube-system / services / kibana-logging / bundles / commons.bundle.js?v = 10146

我的nginx conf:

server {
    listen 80;
    server_name localhost;
    access_log  /var/log/nginx/host.access.log;

    location / {
        auth_basic "simple auth";
        auth_basic_user_file /var/kibana_config/htpasswd;
        try_files KIBANA @kibana-app;
    }

    location @kibana-app {
        return 301 kibana.app.env.com/server.basePath;
    }

    location /api {
        proxy_pass http://kibana-logging.kube-system.svc.cluster.local:5601;
        proxy_set_header HOST $host;
        proxy_set_header Referer $http_referer;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Authorization "simple auth ";
    }

}

“ kibana.app.env.com”只是kubernetes在route53上创建的FQDN,作为ELB的CNAME,并击中了nginx / kibana Pod所在的节点。那是我在浏览器上使用的URL,它应该到达nginx,请我提供基本授权,然后带我到server.basePath的kibana pod:/ api / v1 / proxy / namespaces / kube-system / services / kibana-logging请,问我是否不清楚的问题,对不起,我不能只复制/粘贴所有内容。

2 个答案:

答案 0 :(得分:0)

不确定在其他群集上如何运行。因此,您提到的基本路径:/api/v1/proxy/namespaces/kube-system/services/kibana-app/看起来像是kube-apiserver基本路径,这就是使用kubectl proxy的代理安装程序用来与集群中的应用程序和服务进行通信的路径。 / p>

如果您真的想从nginx与集群内的Kibana进行对话,则必须将kibana-app.kube-system.svc.cluster.local:5601端点添加到您的nginx后端。

答案 1 :(得分:0)

最后,它正在工作:

    server {
        listen 80;
        server_name localhost;
        access_log  /var/log/nginx/host.access.log;

        location / {
            auth_basic "simple auth";
            auth_basic_user_file /var/kibana_config/htpasswd;
            try_files KIBANA @kibana-app;
        }

        location @kibana-app {
            return 301 /api/v1/proxy/namespaces/kube-system/services/kibana-logging/;
        }

        location /api/v1/proxy/namespaces/kube-system/services/kibana-logging/ {
            proxy_set_header Authorization "simple auth ";
            proxy_pass http://kibana-logging.kube-system.svc.cluster.local:5601/;
            proxy_set_header HOST $host;
            proxy_set_header Referer $http_referer;
            proxy_set_header X-Forwarded-For $remote_addr;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection 'upgrade';
            proxy_cache_bypass $http_upgrade;
        }
}

转到在AWS上K8作为ELB创建的URL(kibana-app.env.com)重定向到/ api / v1 / proxy / namespaces / kube-system / services / kibana-logging /,并将proxy_pass传递到kibana pod :http://kibana-logging.kube-system.svc.cluster.local:5601