添加注释:
#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(¶m);
}
...对我的入口规则而言,入口控制器发出了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
我不确定要检查什么以确定问题。
答案 0 :(得分:1)
FWIW,对于以后的读者-我遇到了同样的问题,在查看我的身份验证服务日志后,发现nginx入口的请求正在将/ _external-auth-xxxxxx路径附加到请求URL。
在源代码中,这里是入口控制器执行操作的地方:
以及如何在我自己的身份验证服务中使用I'm handling it(Elixir / Phoenix路由):
get "/_external-auth*encoded_nginx_auth_url", TokenController, :index
答案 1 :(得分:0)
以下是您应检查的选项:
根据此documentation:
默认情况下,控制器会将所有请求重定向到现有的 如果在服务器上设置了global-auth-url,则提供身份验证的服务 NGINX ConfigMap。如果您要为此禁用此行为 入口,您可以在NGINX中使用enable-global-auth:“ false” ConfigMap。 nginx.ingress.kubernetes.io/enable-global-auth:表示 是否应对此应用GlobalExternalAuth配置 入口规则。默认值设置为“ true”。
在nginx中检查您的proxy_ssl_server_name
设置。它指示HTTPS是否使用SNI,默认情况下将其设置为false。
请告诉我是否有帮助。