将专用 IP 网络与 Looker (Google Cloud Core) 搭配使用

将 Looker (Google Cloud Core) 实例设置为仅使用专用 IP 或同时使用专用 IP 和公共 IP 后,您可能需要将网络配置为使用某些 Looker (Google Cloud Core) 功能,或者允许或限制与外部服务或互联网的通信。

将电子邮件递送范围限制为外部网域

默认情况下,仅使用专用 IP 或同时使用专用 IP 和公共 IP 的 Looker (Google Cloud Core) 实例允许将电子邮件递送至外部网域。若要限制 Looker 用户可以向哪些网域发送电子邮件递送,您可以设置电子邮件网域许可名单

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

仅使用专用 IP 或同时使用专用 IP 和公共 IP 的 Looker (Google Cloud Core) 实例可能需要额外配置,才能连接到实例 VPC 网络之外的服务或资源。以下部分介绍了其他配置选项。

使用专用服务访问通道连接到其他 VPC

如需使用内部 IP 连接到由 Google 或第三方托管的其他 VPC 中的服务,您可以使用 专用服务访问通道

在 Looker (Google Cloud Core) 实例创建期间,您创建了一个专用服务访问通道连接,以将您的 VPC 连接到 Looker (Google Cloud Core) 服务。您还可以更新现有专用服务访问通道连接的 IP 分配,而不中断流量。

如需设置专用服务访问通道连接,请执行以下操作:

  1. 在 VPC 网络中分配内部 IP 范围
  2. 使用分配的 IP 范围在您的 VPC 网络与服务提供方网络之间设置专用连接。此专用连接在您的 VPC 与另一个网络之间建立 VPC 网络对等互连连接。

专用连接在您的 VPC 网络与服务提供方之间采用一对一关系。如果单个服务提供方提供多种服务,您只需要用一个专用连接访问提供方的所有服务。

连接到本地资源或第三方服务

您可以使用以下两个选项之一,将仅使用专用 IP 或同时使用专用和公共 IP 的 Looker (Google Cloud Core) 实例连接到本地资源或第三方服务:

无论采用哪种方法,您都需要执行以下操作:

  • 在 Looker (Google Cloud Core) VPC 中为每个本地资源配置动态路由
  • 在 Looker (Google Cloud Core) VPC 中部署的所有 Cloud Router 路由器上设置 Looker (Google Cloud Core) 专用服务访问子网自定义路由通告
  • 更新本地防火墙,以允许通过 Looker (Google Cloud Core) 子网的流量传入。
  • 配置 DNS 转发,使 Looker (Google Cloud Core) 可以连接到任何本地资源。

Cloud Interconnect 和 Cloud Router

以下网络图展示了 Cloud Interconnect 和 Cloud Router 如何与 Looker (Google Cloud Core) 服务进行交互,以连接到本地网络:

  1. 专用服务访问通道使用 VPC 对等互连,通过内部 IP 地址将 Looker (Google Cloud Core) 服务与 VPC 连接。
  2. Cloud Router 路由器使用边界网关协议 (BGP) 通告专用 IP 前缀,并根据从对等方收到的 BGP 通告对动态路由进行编程。Cloud Interconnect 用于连接到本地网络。

Cloud VPN 和 Cloud Router

如需查看有关如何创建专用和公共 IP Looker (Google Cloud Core) 实例并使用高可用性 VPN 和 Cloud Router 将其连接到本地数据库的演示,请参阅通过混合网络连接 Looker Cloud Codelab。

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

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

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

如需允许 VPC 外部的各方与仅启用了专用 IP 的 Looker (Google Cloud Core) 实例进行交互,您可以设置代理服务器和自定义网域。本部分的其余内容说明了如何设置代理服务器。

准备工作

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

设置代理服务器

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

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

  1. 打开 Cloud Shell。

    转到 Cloud Shell

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

    • 设置变量:

      PROJECT="PROJECT"
      NETWORK="NETWORK"
      SUBNETNAME="SUBNETNAME"
      IP_RANGE=IP_RANGE
      REGION="REGION"
      ZONE="ZONE"
      INSTANCE_NAME="INSTANCE_NAME"
      

      替换以下内容:

      • PROJECT:您在其中创建了 Looker (Google Cloud Core) 实例的 Google Cloud 项目的 ID。
      • NETWORK:您为 Looker (Google Cloud Core) 实例配置的 VPC 网络的名称。
      • SUBNETNAME:可以是您在此过程中创建的新子网,也可以是 VPC 网络中的任何子网;不必与您的 Looker (Google Cloud Core) 实例的子网名称匹配。
      • IP_RANGE:任何非冲突的范围。至少使用 /22(例如 10.10.0.0/22)。
      • REGION:要在其中创建代理服务器的区域。
      • ZONE:要在其中创建代理服务器的地区。可通过运行 gcloud compute zones list 来确定可用可用区。
      • INSTANCE_NAME:代理服务器的名称。
    • 创建子网(或者,如果您使用自动模式创建 VPC 网络,则可以使用创建 VPC 网络时创建的子网):

      gcloud compute networks subnets create $SUBNETNAME --network=$NETWORK \
      --range=$IP_RANGE --region=$REGION --project=$PROJECT
      
    • 创建代理实例:

      INSTANCE_EXTERNAL_IP=$(gcloud compute instances create $INSTANCE_NAME \
      --project=$PROJECT --zone=$ZONE --network=$NETWORK --subnet=$SUBNETNAME \
      --format="json" | jq '.[].networkInterfaces[].accessConfigs[].natIP')
      
    • 创建代理实例后,运行以下命令以生成代理实例的公共 IP 地址:

      echo $INSTANCE_EXTERNAL_IP
      

      请记下外部 IP,以备后续步骤使用。

  3. 通过运行以下命令创建防火墙,以允许流量进入端口 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
    
  4. 使用您希望用于 Looker (Google Cloud Core) 实例的网域创建公共 DNS 记录,并指向 NGINX 虚拟机的公共 IP 地址(虚拟机创建后输出)。您也可以在 Google Cloud 控制台中设置自定义网域的过程中创建此记录。

  5. 创建用于访问该公共网址的第三方证书。此示例使用 NGINX 的 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 替换为 DNS 记录名称。

    • 重新加载 NGINX:

      sudo nginx -t && sudo nginx -s reload
      
    • 生成证书:

      sudo certbot --nginx -d SERVER_NAME
      

      SERVER_NAME 替换为 DNS 记录名称。

  6. nginx.config 文件中,将第 5 步中的服务器配置替换为以下服务器配置,以将流量传递到 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:DNS 记录名称。
  7. 验证 nginx.config 文件并重新加载:

    sudo nginx -t && sudo nginx -s reload
    
  8. 验证配置,流量正在路由到 Looker (Google Cloud Core) 实例,并且您已设置自定义网域后,您可以在 OAuth 客户端的已获授权的重定向 URI 部分输入实例的自定义网域。然后,您可以导航至实例网址查看实例,添加用户将 Looker (Google Cloud Core) 连接到您的数据库,然后继续实例设置

    后续步骤