NGINX入口auth-url返回404,但端点存在

时间:2019-07-01 22:05:37

标签: kubernetes docker-for-windows nginx-ingress

添加注释:

#include <iostream>
#include <string>

// interface
struct ParameterBase {
    virtual ~ParameterBase() {};
};

struct Base {
    virtual void f(ParameterBase *pb) = 0;
    virtual ~Base() {};
};

// specific
struct ParameterDerived : public ParameterBase {
    std::string name;
    ParameterDerived(const std::string &name) : name(name) {}
    ParameterDerived& operator=(const ParameterDerived& rhs) { name = rhs.name; }
    ~ParameterDerived() {};
};

struct Derived : public Base {
    Derived(){}
    Derived& operator=(const Derived &rhs) {}
    virtual ~Derived(){}

    void f(ParameterBase *pb) {
        ParameterDerived *pd = dynamic_cast<ParameterDerived*>(pb);
        if (pd) {
            std::cout << "Derived object with derived parameter " << pd->name << std::endl;
        } // else {throw std::exception("wrong parameter type");}
    }
};

int main() {
    Derived object;
    ParameterDerived param("foo");
    object.f(&param);
}

...对我的入口规则而言,入口控制器发出了500响应(入口在没有入口控制器的情况下起作用)。

该服务存在,我可以通过SSH进入入口控制器并对其进行CURL处理,得到响应:

annotations: nginx.ingress.kubernetes.io/auth-url: http://my-auth-service.my-api.svc.cluster.local:8080 产生200条响应。

我检查了入口控制器日志,但说服务返回了curl http://my-auth-service.my-api.svc.cluster.local:8080。如果我可以使用CURL到相同的URL,为什么会返回404

404

我不确定要检查什么以确定问题。

2 个答案:

答案 0 :(得分:1)

FWIW,对于以后的读者-我遇到了同样的问题,在查看我的身份验证服务日志后,发现nginx入口的请求正在将/ _external-auth-xxxxxx路径附加到请求URL。

在源代码中,这里是入口控制器执行操作的地方:

https://github.com/kubernetes/ingress-nginx/blob/master/internal/ingress/controller/template/template.go#L428

以及如何在我自己的身份验证服务中使用I'm handling it(Elixir / Phoenix路由):

get "/_external-auth*encoded_nginx_auth_url", TokenController, :index

答案 1 :(得分:0)

以下是您应检查的选项:

  1. 全局外部身份验证

根据此documentation

  

默认情况下,控制器会将所有请求重定向到现有的   如果在服务器上设置了global-auth-url,则提供身份验证的服务   NGINX ConfigMap。如果您要为此禁用此行为   入口,您可以在NGINX中使用enable-global-auth:“ false”   ConfigMap。 nginx.ingress.kubernetes.io/enable-global-auth:表示   是否应对此应用GlobalExternalAuth配置   入口规则。默认值设置为“ true”。

  1. 服务器名称指示

在nginx中检查您的proxy_ssl_server_name设置。它指示HTTPS是否使用SNI,默认情况下将其设置为false。

请告诉我是否有帮助。