如何使用Nginx实现CDSW的跨网段访问

时间:2022-05-06
本文章向大家介绍如何使用Nginx实现CDSW的跨网段访问,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。 Fayson的github:https://github.com/fayson/cdhproject 提示:代码块部分可以左右滑动查看噢

1.文档编写目的


在企业安装了CDSW后,由于服务安装在生产网络,考虑到集群的安全企业不允许将生产环境的网络直接放通给办公网或外网访问,如果需要在办公网或是外网访问则需要通过反向代理的方式来实现,本篇文章主要介绍如何使用Nginx反向代理CDSW服务。具体实现流程:

1.客户端发送请求(cdsw1.fayson.com)通过DNS1解析成Nginx Server的IP地址。

2.Nginx Server接收到客户端请求将cdsw1.fayson.com请求转发至CDSW服务。

  • 内容概述

1.DNS服务安装及配置

2.Nginx配置及版本要求

3.CDSW访问验证

4.总结

  • 测试环境

1.CDSW1.2.2基于图中的DNS2服务运行正常

2.CM和CDH版本为5.13.1

3.CDSW和CDH集群操作系统为RedHat7.2

4.Nginx服务器为RedHat6.4

5.Nginx版本为1.8.6

2.安装DNS服务并配置泛域名解析


该DNS服务主要用于解析Nginx服务IP地址,由于CDSW使用了泛域名,使用了多个域名如:

livelog.cdsw1.fayson.com
consoles.cdsw1.fayson.com
tty-{xxx}.cdsw1.fayson.com

(可左右滑动)

注意里面的域名有动态生成的,为了方便上面列出的域名解析到Nginx服务,选择安装DNS服务用于解析Nginx服务。

具体DNS服务配置这里就不详细讲述了,可以参考Fayson前面的文章《如何在Windows Server2008搭建DNS服务并配置泛域名解析》,《如何在Windows Server2012搭建DNS服务并配置泛域名解析》和《如何利用Dnsmasq构建小型集群的本地DNS服务器》这里Fayson选择使用DNSmasq搭建DNS服务。

1.如下是Fayon的/etc/dnsmasq.conf配置片段信息:

conf-dir=/etc/dnsmasq.d
resolv-file=/etc/resolv.Dnsmasq.conf
strict-order
listen-address=99.6.xxx.xxx
addn-hosts=/etc/hosts
address=/cdsw1.fayson.com/99.6.xxx.xxx
address=/cdsw1/99.6.xxx.xxx

(可左右滑动)

注意:这里安装的DNS服务,并不是配置在Nginx服务服务上,而是用于配置在你的客户端。即第一章的DNS1服务。

2.在访问Nginx的客户端配置DNS

在客户端CMD命令行测试域名是否能正常解析到Nginx服务

3.Nginx版本要求


由于CDSW使用了WebSocket服务,所以在Nginx版本上有一定的要求,需要Nginx版本大于1.3(含)具体可以参考官网说明:

https://www.nginx.com/blog/websocket-nginx/

本次测试选用的Nginx版本为Nginx1.8.6

关于Nginx的安装,这里就不再做说明了,大家可以参考Fayson前面的文章《如何使用Nginx实现Impala负载均衡》里面讲述了Nginx的安装及启停。

4.Nginx配置


1.修改nginx.conf文件,在http内添加如下内容

http {
    include       mime.types;
    include       reverse-proxy.conf;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    resolver 99.13.31.205;
    ...
}

(可左右滑动)

如上图标注部分,增加include和resolver配置。

include配置项的reverse-proxy.conf文件主要配置访问CDSW服务的反向代理。

resolver配置项,主要是为了防止“no resolver defined to resolve”,因为CDSW服务中使用了泛域名解析,在proxy_pass直接设置访问地址则不会出现这个问题。

2.编写reverse-proxy.conf配置文件,内容如下

server {
   listen 80;
   server_name cdsw1.fayson.com;
   location / {
     proxy_cookie_path / /;
     proxy_pass http://cdsw1.fayson.com;
   }
}
#配置反向代理
server {
   listen 80;
   server_name consoles.cdsw1.fayson.com;
   location / {
     add_header 'Access-Control-Allow-Origin' 'http://cdsw1.fayson.com';
     add_header 'Access-Control-Allow-Credentials' 'true';
     add_header 'Access-Control-Allow-Methods' 'GET';
     proxy_pass http://consoles.cdsw1.fayson.com/;
   }
}
server {
   listen 80;
   server_name livelog.cdsw1.fayson.com;
   location / {
     proxy_http_version 1.1;
     proxy_set_header Upgrade $http_upgrade;
     proxy_set_header Connection "upgrade";
     proxy_pass http://livelog.cdsw1.fayson.com;
     proxy_redirect off;
   }
}
#配置WebSocket的反向代理
server {
   listen 80;
   server_name *.cdsw1.fayson.com;
   location ~* /*/ws {
     proxy_http_version 1.1;
     proxy_set_header Upgrade $http_upgrade;
     proxy_set_header Connection "upgrade";
     proxy_pass http://$host;
     proxy_redirect off;
   }
   location / {
     add_header 'Access-Control-Allow-Origin' 'http://cdsw1.fayson.com';
     add_header 'Access-Control-Allow-Credentials' 'true';
     add_header 'Access-Control-Allow-Methods' 'GET';
     proxy_pass http://$host;
   }
}
server {
   listen 80;
   server_name cdh.fayson.com;
   location / {
      proxy_pass http://99.13.31.205:7180;
   }
}
server {
   listen 80;
   server_name ads.tableau.cmbchina.cn;
   location / {
      proxy_pass http://99.6.136.193;
   }
}

(可左右滑动)

3.完成上面的配置后,使用如下命令验证配置文件是否正确,并重新加载配置

nginx -t 
nginx -s reload

(可左右滑动)

nginx–s reload 命令在不重启服务的情况下重新加载Nginx的配置。

5.访问CDSW服务验证是否配置成功


1.在客户端浏览器输入http://cdsw1.fayson.com,输入用户名和密码登录

2.启动一个Session并运行代码

3.打开会话终端

4.创建工程

5.删除工程

6.总结


  • 在配置DNS的时候需要注意,Nginx的反向代理域名和CDSW访问的域名是一致的,因为CDSW服务中有部分连接使用的是CDSW Master的HostName,所以我们使用相同的域名做反向代理后避免了跨域访问Session丢失导致访问权限问题。
  • CDSW使用WebSocket服务,Nginx版本必须大于1.3,否则WebSocket反向代理会异常。

7.常见问题


在访问Nginx时在error.log中有如下异常:

2018/01/17 17:08:21 [error] 11065#0: *2952 tty-u5wgknkxfa2315i1.cdsw1.fayson.com could not be resolved
 (110: Operation timed out), client: 99.7.42.25, server: *.cdsw1.fayson.com, request: "GET /5kg4v7tey3
1x4x7y/ HTTP/1.1", host: "tty-u5wgknkxfa2315i1.cdsw1.fayson.com", referrer: "http://cdsw1.itc.cmbchina
.cn/admin/demo/engines/u5wgknkxfa2315i1"

(可左右滑动)

解决方法:

需要在nginx.conf配置的http中增加DNS配置:resolver 99.13.31.205;

提示:代码块部分可以左右滑动查看噢 为天地立心,为生民立命,为往圣继绝学,为万世开太平。 温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。

推荐关注Hadoop实操,第一时间,分享更多Hadoop干货,欢迎转发和分享。

原创文章,欢迎转载,转载请注明:转载自微信公众号Hadoop实操