YARN-9130. Add Bind_HOST configuration for Yarn Web Proxy. Contributed by Rong Tang.
This commit is contained in:
parent
499c70eda5
commit
5df9fb16b9
@ -2302,13 +2302,17 @@ public static boolean isAclEnabled(Configuration conf) {
|
||||
|
||||
/** Keytab for Proxy.*/
|
||||
public static final String PROXY_KEYTAB = PROXY_PREFIX + "keytab";
|
||||
|
||||
|
||||
/** The address for the web proxy.*/
|
||||
public static final String PROXY_ADDRESS =
|
||||
PROXY_PREFIX + "address";
|
||||
public static final int DEFAULT_PROXY_PORT = 9099;
|
||||
public static final String DEFAULT_PROXY_ADDRESS =
|
||||
"0.0.0.0:" + DEFAULT_PROXY_PORT;
|
||||
|
||||
/** Binding address for the web proxy. */
|
||||
public static final String PROXY_BIND_HOST =
|
||||
PROXY_PREFIX + "bind-host";
|
||||
|
||||
/**
|
||||
* YARN Service Level Authorization
|
||||
|
@ -2157,6 +2157,15 @@
|
||||
<value/>
|
||||
</property>
|
||||
|
||||
<property>
|
||||
<description>The actual address the web proxy will bind to. If this optional
|
||||
address is set, it overrides only the hostname portion of yarn.web-proxy.address.
|
||||
This is useful for making the web proxy server listen on all interfaces by setting
|
||||
it to 0.0.0.0 </description>
|
||||
<name>yarn.web-proxy.bind-host</name>
|
||||
<value/>
|
||||
</property>
|
||||
|
||||
<!-- Applications' Configuration -->
|
||||
|
||||
<property>
|
||||
|
@ -74,16 +74,26 @@ protected void serviceInit(Configuration conf) throws Exception {
|
||||
fetcher = new AppReportFetcher(conf);
|
||||
bindAddress = conf.get(YarnConfiguration.PROXY_ADDRESS);
|
||||
if(bindAddress == null || bindAddress.isEmpty()) {
|
||||
throw new YarnRuntimeException(YarnConfiguration.PROXY_ADDRESS +
|
||||
throw new YarnRuntimeException(YarnConfiguration.PROXY_ADDRESS +
|
||||
" is not set so the proxy will not run.");
|
||||
}
|
||||
LOG.info("Instantiating Proxy at " + bindAddress);
|
||||
|
||||
String[] parts = StringUtils.split(bindAddress, ':');
|
||||
port = 0;
|
||||
if (parts.length == 2) {
|
||||
bindAddress = parts[0];
|
||||
port = Integer.parseInt(parts[1]);
|
||||
}
|
||||
|
||||
String bindHost = conf.getTrimmed(YarnConfiguration.PROXY_BIND_HOST, null);
|
||||
if (bindHost != null) {
|
||||
LOG.debug("{} is set, will be used to run proxy.",
|
||||
YarnConfiguration.PROXY_BIND_HOST);
|
||||
bindAddress = bindHost;
|
||||
}
|
||||
|
||||
LOG.info("Instantiating Proxy at {}:{}", bindAddress, port);
|
||||
|
||||
acl = new AccessControlList(conf.get(YarnConfiguration.YARN_ADMIN_ACL,
|
||||
YarnConfiguration.DEFAULT_YARN_ADMIN_ACL));
|
||||
super.serviceInit(conf);
|
||||
|
@ -38,7 +38,7 @@
|
||||
|
||||
/**
|
||||
* ProxyServer will sit in between the end user and AppMaster
|
||||
* web interfaces.
|
||||
* web interfaces.
|
||||
*/
|
||||
public class WebAppProxyServer extends CompositeService {
|
||||
|
||||
@ -103,9 +103,11 @@ protected void doSecureLogin(Configuration conf) throws IOException {
|
||||
* @return InetSocketAddress
|
||||
*/
|
||||
public static InetSocketAddress getBindAddress(Configuration conf) {
|
||||
return conf.getSocketAddr(YarnConfiguration.PROXY_ADDRESS,
|
||||
YarnConfiguration.DEFAULT_PROXY_ADDRESS,
|
||||
YarnConfiguration.DEFAULT_PROXY_PORT);
|
||||
return conf.getSocketAddr(
|
||||
YarnConfiguration.PROXY_BIND_HOST,
|
||||
YarnConfiguration.PROXY_ADDRESS,
|
||||
YarnConfiguration.DEFAULT_PROXY_ADDRESS,
|
||||
YarnConfiguration.DEFAULT_PROXY_PORT);
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
|
@ -23,7 +23,6 @@
|
||||
import org.apache.hadoop.service.Service;
|
||||
import org.apache.hadoop.service.Service.STATE;
|
||||
import org.apache.hadoop.yarn.conf.YarnConfiguration;
|
||||
import org.apache.hadoop.yarn.server.webproxy.WebAppProxyServer;
|
||||
import org.junit.After;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Before;
|
||||
@ -33,14 +32,15 @@
|
||||
|
||||
public class TestWebAppProxyServer {
|
||||
private WebAppProxyServer webAppProxy = null;
|
||||
private final String proxyAddress = "0.0.0.0:8888";
|
||||
private final String port = "8888";
|
||||
private final String proxyAddress = "localhost:" + port;
|
||||
private YarnConfiguration conf = null;
|
||||
|
||||
@Before
|
||||
public void setUp() throws Exception {
|
||||
YarnConfiguration conf = new YarnConfiguration();
|
||||
conf = new YarnConfiguration();
|
||||
conf.set(YarnConfiguration.PROXY_ADDRESS, proxyAddress);
|
||||
webAppProxy = new WebAppProxyServer();
|
||||
webAppProxy.init(conf);
|
||||
}
|
||||
|
||||
@After
|
||||
@ -50,19 +50,38 @@ public void tearDown() throws Exception {
|
||||
|
||||
@Test
|
||||
public void testStart() {
|
||||
webAppProxy.init(conf);
|
||||
assertEquals(STATE.INITED, webAppProxy.getServiceState());
|
||||
webAppProxy.start();
|
||||
for (Service service : webAppProxy.getServices()) {
|
||||
if (service instanceof WebAppProxy) {
|
||||
assertEquals(((WebAppProxy) service).getBindAddress(), proxyAddress);
|
||||
assertEquals(proxyAddress, ((WebAppProxy) service).getBindAddress());
|
||||
}
|
||||
}
|
||||
assertEquals(STATE.STARTED, webAppProxy.getServiceState());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testStartWithBindHost() {
|
||||
String bindHost = "0.0.0.0";
|
||||
conf.set(YarnConfiguration.PROXY_BIND_HOST, bindHost);
|
||||
webAppProxy.init(conf);
|
||||
|
||||
assertEquals(STATE.INITED, webAppProxy.getServiceState());
|
||||
webAppProxy.start();
|
||||
for (Service service : webAppProxy.getServices()) {
|
||||
if (service instanceof WebAppProxy) {
|
||||
assertEquals(bindHost + ":" + port,
|
||||
((WebAppProxy) service).getBindAddress());
|
||||
}
|
||||
}
|
||||
assertEquals(STATE.STARTED, webAppProxy.getServiceState());
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testBindAddress() {
|
||||
YarnConfiguration conf = new YarnConfiguration();
|
||||
conf = new YarnConfiguration();
|
||||
|
||||
InetSocketAddress defaultBindAddress = WebAppProxyServer.getBindAddress(conf);
|
||||
Assert.assertEquals("Web Proxy default bind address port is incorrect",
|
||||
|
Loading…
Reference in New Issue
Block a user