配置专用 IP Looker (Google Cloud Core)实例

使用专用 IP 连接设置 Looker (Google Cloud Core)实例后,您可能需要将实例或 Google Cloud 项目配置为使用某些 Looker (Google Cloud Core)功能,或者允许或限制与外部服务或互联网进行通信。

限制向外部网域发送电子邮件

默认情况下,使用专用 IP 配置的 Looker (Google Cloud Core)实例允许将电子邮件递送到外部网域。如需设置 Looker 用户可将电子邮件递送到哪些网域,您可以设置电子邮件网域许可名单

将专用 IP Looker (Google Cloud Core)实例连接到外部服务

使用专用 IP 网络的 Looker (Google Cloud Core)实例可能需要对 Google Cloud 项目进行其他配置,才能连接到 VPC Service Controls 边界之外的服务或资源。以下部分介绍了配置选项。

连接到 Google Cloud 资源或服务

如需连接到其他 Google Cloud 资源或服务,如果资源所在的项目位于 VPC Service Controls 边界之外,您可能需要设置入站和出站流量规则。如需了解如何设置与其他云服务提供商托管的数据源的专用连接,请参阅本页面中的连接到其他云服务提供商托管的数据库

连接到其他云服务提供商托管的数据库

为了能够设置由其他云服务提供商托管的数据库或服务的专用连接,您的 Google Cloud 项目必须配置为将流量路由到这些云服务提供商,以允许进行数据交换。如需详细了解如何连接云环境,请参阅将其他云服务提供商连接到 Google Cloud 的模式文档页面。

连接到本地资源

如需设置与本地数据库的专用连接,请使用 Cloud VPN。您需要在 VPC 中为每个本地数据库配置动态路由。如果您为 Looker (Google Cloud Core)实例所在的项目配置了 DNS 转发,Looker 将能够连接到任何本地资源。

连接到其他互联网服务

要连接到基于互联网的服务,您需要在 VPC 中为每个服务配置一条动态路由。您还可以使用 Cloud NAT 创建出站连接。

授予对专用 IP 实例的公共访问权限

如需进一步控制外部方与您的 Looker (Google Cloud Core)实例进行交互的方式,您可以设置代理服务器,向仅启用专用 IP 地址的实例授予公共互联网访问权限。

须知事项

您必须安装或更新至最新版 Google Cloud CLI,然后才能设置代理服务器。

设置代理服务器

以下示例展示了如何使用命令行为启用了专用 IP 网络连接的现有 Looker (Google Cloud Core)实例设置 NGINX 代理服务器。虽然 NGINX 服务器可以使用公共 IP 或专用 IP(允许 VPN 访问)配置进行实例化,但此示例演示的是公共 IP 配置。

您可以使用任何可配置为反向代理服务器的 Web 服务器。您不必专门设置 NGINX 服务器。

  1. 通过运行以下命令,运行以下命令在子网中创建子网,以及在您的 VPC 网络中启用公共 IP 的 Ubuntu 18 NGINX 虚拟机

    PROJECT="NAME_OF_CLOUD_PROJECT_THAT_CREATES_LOOKER"
    NETWORK="VPC_PEERED_WITH_SERVICE_NETWORKING"
    SUBNETNAME="NAME_SUBNET_WHEN_CREATED_INSTANCE"
    IP_RANGE=ANY_NONCONFLICTING_RANGE
    REGION="REGION
    gcloud compute networks subnets create $SUBNETNAME --network=$NETWORK \
    --range=$IP_RANGE --region=$REGION --project=$PROJECT
    
    ZONE="ZONE_THE_INSTANCE_NEEDS_TO_BE_CREATED_IN"
    INSTANCE_NAME="THE_NAME_FOR_THE_VM_INSTANCE"
    INSTANCE_EXTERNAL_IP=$(gcloud compute instances create $INSTANCE_NAME \
    --project=$PROJECT --zone=$ZONE --network=$NETWORK --subnet=$SUBNETNAME \
    --format="json" | jq '.[].networkInterfaces[].accessConfigs[].natIP')
    
    • PROJECT 是您创建 Looker (Google Cloud Core)实例所属的 Google Cloud 项目的名称。
    • NETWORK 是您为 Looker (Google Cloud Core)实例配置的 VPC 网络的名称。
    • IP_RANGE 设为至少 /22(例如 10.10.0.0/22)。
    • SUBNETNAME 可以是任何名称;不必与 Looker (Google Cloud Core)实例的子网名称相匹配。
    • 可以通过运行 gcloud compute zones list 来确定 ZONE
    • INSTANCE_NAME 可以称为任何名称,指的是您的虚拟机实例的名称。

    运行这两个 gcloud 命令后,请运行以下命令:

    echo $INSTANCE_EXTERNAL_IP
    

    这将生成虚拟机实例的公共 IP 地址。

  2. 运行以下命令,创建防火墙以允许流量发送到您的端口上的端口 80、443 和 22(或者 NGINX 将会监听的其他端口):

    gcloud compute firewall-rules create managementnet-allow-http-https-ssh \
    --direction=INGRESS --priority=1000 --network=$NETWORK --action=ALLOW \
    --rules=tcp:80,tcp:443,tcp:22 --source-ranges=0.0.0.0/0 --project=$PROJECT
    
  3. 创建用于访问公开网址的第三方证书。此示例使用 NGINX's Let's Encrypt 生成 Let's Encrypt 证书,但您可以使用任何加密证书。

    登录 NGINX 虚拟机

    安装 Let's Encrypt 工具:

    sudo apt-get update
    sudo apt-get install certbot python3-certbot-nginx
    

    访问 nginx.config 文件:

    sudo vi /etc/nginx/sites-available/default
    

    nginx.config 文件中,替换现有的服务器配置,以设置服务器和端口 80 以进行监听:

    server {
        listen 80 default_server;
        listen [::]:80 default_server;
        root /var/www/html;
        server_name SERVER_NAME>;
    }
    
    • SERVER_NAME 是 Looker (Google Cloud Core)实例的自定义网域中的 DNS 记录名称

    重新加载 NGINX:

    sudo nginx -t && sudo nginx -s reload
    

    生成证书:

    sudo certbot --nginx -d SERVER_NAME
    
    • SERVER_NAME 是 Looker (Google Cloud Core)实例的自定义网域中的 DNS 记录名称
  4. nginx.config 文件中,将第 3 步中的服务器配置替换为以下服务器配置,以将流量传输到您的 Looker (Google Cloud Core)实例:

    server {
      listen 443 ssl http2;
      listen [::]:443 ssl http2;
      server_name SERVER_NAME
      ssl_certificate /etc/letsencrypt/live/SERVER_NAME/fullchain.pem;
      ssl_certificate_key /etc/letsencrypt/live/SERVER_NAME/privkey.pem;
      include /etc/letsencrypt/options-ssl-nginx.conf;
      ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
    
      location / {
        set $priv_dns "private.lookerapp";
        proxy_pass https://PRIVATE_IP_ADDRESS/$request_uri;
        proxy_set_header Host $server_name;
        proxy_set_header X-Forwarded-Host $host:$server_port;
        proxy_set_header X-Forwarded-Server $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_ssl_protocols TLSv1.3;
        proxy_ssl_verify off;
        proxy_http_version 1.1;
        proxy_pass_request_headers on;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_redirect https://$priv_dns/ https://SERVER_NAME/;
      }
    }
    server {
      if ($host = SERVER_NAME) {
        return 301 https://$host$request_uri;
      }
        listen 80 default_server;
        listen [::]:80 default_server;
        server_name SERVER_NAME;
      return 404;
    }
    
    • PRIVATE_IP_ADDRESS 是分配给您的 Looker (Google Cloud Core)实例的专用 IP 地址,您可以在 Google Cloud 控制台中的详情页面上查看该地址
    • SERVER_NAME 是 Looker (Google Cloud Core)实例的自定义网域中的 DNS 记录名称
  5. 验证 nginx.config 文件并重新加载:

    sudo nginx -t && sudo nginx -s reload
    

    后续步骤