将专用 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 自定义网域的访问权限。配置类型取决于实例流量的来源。如需查看配置选项摘要以及每个选项的文档链接,请参阅 Looker (Google Cloud Core) 专用 IP 实例的自定义网域网络选项文档页面。

将专用 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) 实例并使用 Cloud 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 代理服务器。虽然 NGINX 服务器可以使用公共 IP 或专用 IP(允许 VPN 访问)配置进行实例化,但此示例演示的是公共 IP 配置。

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

  1. 创建自定义网域。当您在此过程的稍后部分设置 DNS 记录时,系统会将自定义网域映射到代理服务器的外部 IP。
  2. 打开 Cloud Shell。

    转到 Cloud Shell

  3. 运行以下命令,在 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,以备后面的过程使用。

  4. 通过运行以下命令创建防火墙,以允许流量传输到端口 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
    
  5. 使用您在此过程开始时为 Looker (Google Cloud Core) 实例设置的自定义网域创建一条公共 DNS 记录,并指向在创建虚拟机后输出的 NGINX 虚拟机的公共 IP 地址。

  6. 创建用于访问公开网址的第三方证书。本示例使用 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 记录名称。

  7. nginx.config 文件中,将上一步中的服务器配置替换为以下服务器配置,以将流量传递给 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 控制台中该实例的详细信息页面上查看该 IP 地址
    • SERVER_NAME:DNS 记录名称。
  8. 验证 nginx.config 文件并重新加载:

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

后续步骤