注意:

存取 VCN 外部的 OCI OpenSearch 儀表板和 REST API

簡介

OpenSearch 是一個分散式的開源搜尋與分析套件,用於多種使用案例,例如即時應用程式與伺服器監控、日誌分析及網站搜尋。

OpenSearch 還提供可高度擴展的系統,可藉由整合的視覺化工具 OpenSearch 儀表板快速存取和回應大量資料,讓使用者輕鬆探索資料。

依照預設,OCI OpenSearch 儀表板和 API 只能在 VCN 內存取。若要存取 OpenSearch 儀表板,一般使用者每次都必須設定 VM 並設定連接埠轉送,才能存取它。同樣適用於 API。

目標

使用 NGINX 反向代理主機設定存取 VCN 以外的 OCI OpenSearch 儀表板和 REST API。

必要條件

架構

我們遵循反向代理伺服器架構,反向代理伺服器會接受來自用戶端的要求,將它轉送至可以滿足要求的伺服器,並傳回伺服器對用戶端的回應。以下是使用 NGINX,這是免費、開放原始碼、高效能的 HTTP 伺服器和反向代理伺服器,如以下架構圖所示。

架構

作業 1:驗證 OpenSearch 叢集

順利建立 OpenSearch 叢集之後,您將看到叢集詳細資訊,如下圖所示。

OpenSearch 叢集

  1. 從「叢集明細」頁面中,複製下列要用於設定的值。

    1. API 端點
    2. OpenSearch Dashboard API 端點

    此外,請注意建立叢集時提供的「使用者名稱」和「密碼」。

作業 2:設定反向代理主機伺服器

  1. 設定運算執行處理 (在本教學課程中,我們在您為 OpenSearch 建立的相同子網路中,使用以 Oracle Linux 8 為基礎的 VM.Standard.E4.Flex)。如果已設定網路連線,您也可以在另一個子網路、VCN 或區域中建立此網路。執行處理應該可從網際網路存取。

    執行處理詳細資訊

  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。為了允許 NGINX 存取網際網路,我們需要提供存取權。

    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 存取

若要設定 OpenSearch 儀表板和啟用 HTTPS 的 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 檔案總管。

如需產品文件,請造訪 Oracle Help Center