2. process::firewall::install(move(rules));如果有参数--firewall_rules则会添加规则
对应的代码如下:
-
// Initialize firewall rules. -
if (flags.firewall_rules.isSome()) { -
vector<Owned<FirewallRule>> rules; -
-
const Firewall firewall = flags.firewall_rules.get(); -
-
if (firewall.has_disabled_endpoints()) { -
-
-
foreach (const string& path, firewall.disabled_endpoints().paths()) { -
-
-
-
rules.emplace_back(new DisabledEndpointsFirewallRule(paths)); -
-
-
process::firewall::install(move(rules)); -
|
对应的命令行参数如下:
这个参数的主要作用为,并不是Mesos的每一个API都想暴露出来,disabled_endpoints里面就是不能访问的API。
上面的install的代码会做下面的事情
最终会放到环境变量firewallRules里面。
那这些firewall是什么事情起作用的呢?
在3rdparty/libprocess/src/process.cpp里面有函数
-
synchronized (firewall_mutex) { -
// Don't use a const reference, since it cannot be guaranteed -
// that the rules don't keep an internal state. -
foreach (Owned<firewall::FirewallRule>& rule, firewallRules) { -
Option<Response> rejection = rule->apply(socket, *request); -
if (rejection.isSome()) { -
VLOG(1) << "Returning '"<< rejection.get().status << "' for '" -
<< request->url.path << "' (firewall rule forbids request)"; -
-
// TODO(arojas): Get rid of the duplicated code to return an -
-
-
// Get the HttpProxy pid for this socket. -
PID<HttpProxy> proxy = socket_manager->proxy(socket); -
-
// Enqueue the response with the HttpProxy so that it respects -
// the order of requests to account for HTTP/1.1 pipelining. -
-
-
-
-
-
-
-
-
-
-
-
|