注:

访问 VCN 外部的 OCI OpenSearch 仪表盘和 REST API

简介

OpenSearch 是一个分布式开源搜索和分析套件,用于多个用例,例如实时应用和服务器监视、日志分析和网站搜索。

OpenSearch 还提供高度可扩展的系统,通过集成的可视化工具(OpenSearch 仪表盘)快速访问和响应大量数据,用户可以轻松地浏览数据。

默认情况下,只能在 VCN 内访问 OCI OpenSearch 仪表盘和 API。要访问 OpenSearch 仪表盘,最终用户需要在每次访问 VM 时设置端口转发。这同样也适用于 API。

目标

使用 NGINX 反向代理设置访问 VCN 外部的 OCI OpenSearch 仪表盘和 REST API。

先决条件

体系结构

我们正在遵循反向代理体系结构,在这种体系结构中,反向代理服务器接受来自客户机的请求,将其转发给可以实现该请求的服务器,并返回服务器对客户机的响应。这里我们使用的是 NGINX,一个免费的开源、高性能的 HTTP 服务器和反向代理服务器,如以下体系结构图所示。

体系结构

任务 1:验证 OpenSearch 群集

成功创建 OpenSearch 群集后,您将看到群集详细信息,如下图中所示。

OpenSearch 集群

  1. 从“群集详细信息”页面中,复制将在设置中使用的以下值。

    1. API 端点
    2. OpenSearch 仪表盘 API 端点

    此外,请记下创建集群时提供的用户名和口令。

任务 2:设置反向代理服务器

  1. 在您为 OpenSearch 创建的同一子网中设置计算实例(在本教程中,我们使用基于 Oracle Linux 8 的 VM.Standard.E4.Flex)。如果设置了网络连接,您还可以在另一个子网(VCN 或区域)中创建网络连接。该实例应该可以从 Internet 访问。

    实例详细信息

  2. 创建 VM 后,在安全列表中为所需的 IP 和防火墙打开以下端口(在 VM 中)。

    • 443 - 用于显示板
    • 80 - 用于验证
    • 9200 - 用于 API
    • 22 - 用于 SSH 访问(默认情况下添加)

    控制台连接

  3. 登录 VM 并使用以下命令允许来自 VM 防火墙的端口 80、443 和 9200。

    sudo firewall-cmd --zone=public --add-port=443/tcp --permanent
    sudo firewall-cmd --zone=public --add-port=80/tcp --permanent
    sudo firewall-cmd --zone=public --add-port=9200/tcp --permanent
    sudo firewall-cmd --reload  
    

任务 3:设置 NGINX

  1. 使用以下命令在 VM 中安装 NGINX 反向代理和启动。

    sudo yum install nginx -y
    
  2. 启用和启动 NGINX 服务。

    sudo systemctl enable nginx && sudo systemctl start nginx
    
  3. 默认情况下,Oracle Linux 附带 SELinux Enabled。为了允许 NGINX 访问 Internet,我们需要提供访问权限。

    sudo setsebool -P httpd_can_network_connect on
    
  4. 启用对端口 9200 和 443 的访问。

    sudo semanage port -a -t http_port_t -p tcp 443
    sudo semanage port -a -t http_port_t -p tcp 9200
    
    • 如果获得 ValueError: Port tcp/9200(已定义),请使用以下命令。
    sudo semanage port -m -t http_port_t -p tcp 443
    sudo semanage port -m -t http_port_t -p tcp 9200
    

任务 4:启用 HTTPS 访问

要设置启用了 HTTPS 的 OpenSearch 仪表盘和 API,必须使用证书颁发机构提供的 SSL 证书。

  1. 使用以下 OpenSSL 命令创建 SSL 密钥对。此命令生成 /etc/nginx 目录下的密钥对。

    sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/cert.key -out /etc/nginx/cert.crt
    

任务 5:配置 NGINX 反向代理服务器

我们将使用以下 NGINX 配置进行反向代理设置。

user root;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;
include /usr/share/nginx/modules/*.conf;

events
{
	worker_connections 1024;
}

http
{
	log_format main '$remote_addr - $remote_user [$time_local] "$request" '
	'$status $body_bytes_sent "$http_referer" '
	'"$http_user_agent" "$http_x_forwarded_for"';

	access_log /var/log/nginx/access.log main;

	sendfile on;
	tcp_nopush on;
	tcp_nodelay on;
	keepalive_timeout 65;
	types_hash_max_size 2048;
	include /etc/nginx/mime.types;
	default_type application/octet-stream;

	include /etc/nginx/conf.d/*.conf;

	server
	{
		listen 443;
		server_name $host;
		rewrite ^/$ https://$host/app/home redirect;

        #OpenSearch Dashboard API endpoint without HTTPS in the front
		set $domain_endpoint <OpenSearch Dashboard API endpoint>:5601;

		ssl_certificate /etc/nginx/cert.crt;
		ssl_certificate_key /etc/nginx/cert.key;

		ssl on;
		ssl_session_cache builtin:1000 shared:SSL:10m;
		ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
		ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
		ssl_prefer_server_ciphers on;

		location / {
			proxy_pass https://<OpenSearch Dashboard API endpoint>:5601;
		}

		location /app/login {

			proxy_http_version 1.1;
			proxy_set_header Connection "Keep-Alive";
			proxy_set_header Proxy-Connection "Keep-Alive";
			proxy_set_header Authorization "";
			proxy_set_header Authorization $http_authorization;
			proxy_pass_header Authorization;

			# Forward requests to Dashboards
			proxy_pass https://$domain_endpoint/app/login;

			# Handle redirects to Dashboards
			proxy_redirect https://$domain_endpoint/app/login https://$host/app/login;

			# Update cookie domain and path
			proxy_cookie_domain $domain_endpoint $host;
			proxy_cookie_path ~*^/$ /app/login/;

			# Response buffer settings
			proxy_buffer_size 128k;
			proxy_buffers 4 256k;
			proxy_busy_buffers_size 256k;
		}
	}


	server
	{
		listen 9200;
		server_name $host;

		ssl_certificate /etc/nginx/cert.crt;
		ssl_certificate_key /etc/nginx/cert.key;

		ssl on;
		ssl_session_cache builtin:1000 shared:SSL:10m;
		ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
		ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
		ssl_prefer_server_ciphers on;

		location / {
			proxy_pass https://<API endpoint>:9200;
		}
	}
}

配置中使用的变量

  1. 备份 /etc/nginx/nginx.conf 文件。

  2. 将变量替换为实际值后,将配置保存在 /etc/nginx/nginx.conf 中并重新启动 NGINX 服务器。

    sudo systemctl restart nginx
    

任务 6:验证访问权限

现在,我们应当能够使用实例的公共 IP 访问 OpenSearch 仪表盘和摄取 API(创建 OpenSearch 集群时提供身份证明)。

仪表盘访问

密码提示 口令提示


仪表盘
仪表盘

REST API 访问

使用 OpenSearch API 时,应使用相同的凭证。

API 成功 API 成功消息

API 失败 API 失败消息

确认

作者 - Rithesh Subramanian(OCI 云架构师)

更多学习资源

探索 docs.oracle.com/learn 上的其他实验室,或者访问 Oracle Learning YouTube 频道上的更多免费学习内容。此外,请访问 education.oracle.com/learning-explorer 成为 Oracle Learning Explorer。

有关产品文档,请访问 Oracle 帮助中心