使用 Private Service Connect 通过 GKE 发布和使用服务

1. 简介

借助 Private Service Connect,服务提供方能以私密方式向服务使用方提供服务。Private Service Connect 具有以下优势:

  • 服务提供方 VPC 网络可以支持多个服务使用方。
  • 每个使用方会连接到其定义的内部 IP 地址。Private Service Connect 会执行网络地址转换 (NAT),以将请求路由到服务提供方。

45b90d50690dd111

图 2. Private Service Connect 使用端点和服务连接,使服务使用方能够将流量从使用方的 VPC 网络发送到服务提供方 VPC 网络中的服务(点击可放大)。

学习内容

  • Private Service Connect 的优势
  • 服务使用方的关键概念
  • 服务提供方的主要概念
  • 创建提供方环境
  • 通过服务连接公开服务(提供方环境)
  • 创建使用方环境
  • 在使用方网络中创建转发规则
  • 验证使用方访问权限
  • 启用政策访问权限控制
  • 使用出站防火墙规则阻止对使用方转发规则的访问

所需条件

  • 了解如何部署 GKE 集群和服务
  • 了解内部负载平衡器
  • 能够在两个项目中创建 VPC
  • 能够创建 GKE 集群

2. Private Service Connect 的优势

与使用 VPC 对等互连相比,使用 PSC 有以下几项优势:

更好地控制专用 IP 空间

  • 作为服务使用方,您可以控制用于连接到要访问的托管式服务的专用 IP 地址。
  • 作为服务使用方,您无需担心为 VPC 中使用的后端服务预留专用 IP 地址范围。您只需从自己的子网中选择一个 IP 地址即可连接到提供方服务。
  • 作为服务提供方,您可以选择部署多租户模型,其中 VPC 包含为多个使用方 VPC 提供服务的服务。子网范围重叠的使用方不会再造成问题。
  • 作为服务提供商,您可以将服务扩展到所需数量的虚拟机实例,而无需联系使用方获取更多 IP 地址。

提高安全性和隔离性

  • 作为服务使用方,只有您可以发起与服务提供方的通信。这种单向连接大大简化了防火墙配置,但是还可以降低来自服务提供方的流氓流量的风险。
  • 作为服务提供方,您无需根据使用方 VPC 中的子网范围更改防火墙规则。您只需为为服务配置的 NAT IP 地址范围创建防火墙规则即可。

可伸缩性更高

  • PSC 支持数千个使用方,可实现高度可扩展的设计,同时可让服务提供方提供扩缩能力极强的多租户或单租户服务。
  • 作为使用 Private Service Connect 的服务使用方,您可以根据需要在 VPC 中创建资源。其规模不受提供方 VPC 中创建的此类资源数量的影响。

3. 服务使用方的主要概念

您可以通过 Private Service Connect 端点来使用 VPC 网络之外的服务。服务使用方创建连接到目标服务的 Private Service Connect 端点。

Endpoints

您可以使用 Private Service Connect 端点连接到目标服务。端点在您的 VPC 网络中具有内部 IP 地址,并且基于转发规则资源。

您向端点发送流量,端点将其转发到 VPC 网络之外的目标。

目标

Private Service Connect 端点具有一个目标,即您要连接的服务:

  • 一个 API 软件包
  • 所有 API:大多数 Google API
  • VPC-SC:VPC Service Controls 支持的 API
  • 其他 VPC 网络中的已发布服务。此服务可以由您自己的组织或第三方管理。

已发布的服务

要将端点连接到服务提供方的服务,您需要使用该服务的服务连接。服务连接 URI 采用以下格式:projects/SERVICE_PROJECT/regions/REGION/serviceAttachments/SERVICE_NAME

4. 面向服务提供方的主要概念

如需向使用方提供某项服务,您可以创建一个或多个专用子网,用于使用方 IP 地址的网络地址转换 (NAT)。然后创建引用这些子网的服务连接

Private Service Connect 子网

为了公开服务,服务提供方首先创建一个或多个子网具有专用 Private Service Connect。

从使用方 VPC 网络发送请求时,系统会使用来源 NAT (SNAT) 将使用方的来源 IP 地址转换为从某个 Private Service Connect 子网中选择的 IP 地址。

如要保留使用方连接 IP 地址信息,请参阅查看使用方连接信息

这些子网不能用于虚拟机实例或转发规则等资源。子网仅用于为传入使用方连接的 SNAT 提供 IP 地址。

对于每 63 个使用方虚拟机,Private Service Connect 子网必须包含至少一个 IP 地址,以便为每个使用方虚拟机分配 1024 个源元组以进行网络地址转换。

Private Service Connect 子网的最小大小为 /24。

服务连接

服务提供方通过服务连接公开其服务。

  • 为了公开服务,服务提供方会创建一个服务连接来引用服务的负载平衡器转发规则。
  • 为了访问服务,服务使用方会创建一个指向该服务连接的端点。

连接偏好设置

创建服务时,您可以选择提供该服务的方式。共有两种选择:

  • 自动接受所有项目的连接 - 任何服务使用方都可以配置端点并自动连接到服务。
  • 接受所选项目的连接 - 服务使用方配置端点以连接到服务,服务提供方会接受或拒绝连接请求。

要求和限制

  • 需遵守 Private Service Connect 的限制。
  • 您可以在 GKE 1.21.4-gke.300 及更高版本中创建服务连接。
  • 您不能在多个服务连接配置中使用同一个子网。
  • 您必须创建使用内部 TCP/UDP 负载均衡器的 GKE 服务。

5. 测试环境

使用方网络包含一个静态 IP 地址(用于向服务提供方发起请求),以及映射到提供方的服务连接(已发布的服务)的目标服务连接。

1ce5607c0c56d77d.jpeg

现在,我们来了解一下生产者网络。请注意,生产者网络没有到使用者网络的映射,相反,生产者网络包含使用者用于服务的服务连接(发布的服务)。生产者的服务连接由 GKE Ingress L4 ILB(已发布的服务)公开,用于与 GKE Pod 进行通信,相关应用

当从使用方 VPC 网络发送请求时,系统会使用 NAT 子网,使用方的来源 IP 地址会通过来源 NAT (SNAT) 转换为从某个 Private Service Connect 子网中选择的 IP 地址。

这些子网不能用于虚拟机实例或转发规则等资源。子网仅用于为传入使用方连接的 SNAT 提供 IP 地址。

如需详细了解适用于 GKE Private Service Connect 的 L4ILB,并获取对用于制作本实验的内容的直接访问,请参考 以下内容

自定进度的环境设置

  1. 登录 Google Cloud 控制台,然后创建一个新项目或重复使用现有项目。如果您还没有 Gmail 或 Google Workspace 账号,则必须创建一个

96a9c957bc475304

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

  • 项目名称是此项目参与者的显示名称。它是 Google API 尚未使用的字符串,您可以随时对其进行更新。
  • 项目 ID 在所有 Google Cloud 项目中必须是唯一的,并且不可变(一经设置便无法更改)。Cloud Console 会自动生成一个唯一字符串;通常情况下,您无需关注该字符串。在大多数 Codelab 中,您都需要引用项目 ID(它通常标识为 PROJECT_ID),因此如果您不喜欢某个 ID,请再生成一个随机 ID,还可以尝试自己创建一个,并确认是否可用。然后,项目创建后,ID 会处于“冻结”状态。
  • 第三个值是一些 API 使用的项目编号。如需详细了解所有这三个值,请参阅文档
  1. 接下来,您需要在 Cloud Console 中启用结算功能,才能使用 Cloud 资源/API。运行此 Codelab 应该不会产生太多的费用(如果有费用的话)。要关闭资源以避免产生超出本教程范围的费用,请按照此 Codelab 末尾提供的任何“清理”说明操作。Google Cloud 的新用户符合参与 $300 USD 免费试用计划的条件。

启动 Cloud Shell

虽然可以通过笔记本电脑对 Google Cloud 进行远程操作,但在此 Codelab 中,您将使用 Google Cloud Shell,这是一个在云端运行的命令行环境。

在 GCP 控制台中,点击右上角工具栏上的 Cloud Shell 图标:

bce75f34b2c53987.png

预配和连接到环境应该只需要片刻时间。完成后,您应该会看到如下内容:

f6ef2b5f13479f3a.png

这个虚拟机已加载了您需要的所有开发工具。它提供了一个持久的 5GB 主目录,并且在 Google Cloud 中运行,大大增强了网络性能和身份验证功能。只需一个浏览器,即可完成本实验中的所有工作。

6. 准备工作

Codelab 需要两个项目,但对 PSC 而言并不是必需的。请记下这些参考来支持单个或多个项目。

单个项目 - 更新项目以支持提供方和使用方网络

在 Cloud Shell 中,确保已设置项目 ID

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
prodproject=YOUR-PROJECT-NAME
consumerproject=YOUR-PROJECT-NAME
echo $prodproject
echo $consumerproject

多个项目 - 更新项目以支持提供方网络

在 Cloud Shell 中,确保已设置项目 ID

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
prodproject=YOUR-PROJECT-NAME
echo $prodproject

请注意以下着色代码惯例

f251ebb137e37136.png

7. 创建提供方 VPC 网络

afe738fc869f0d6e.png

VPC 网络

通过 Cloud Shell

gcloud compute networks create gke-producer-l4-vpc --project=$prodproject --subnet-mode=custom 

创建 GKE 集群子网

通过 Cloud Shell

gcloud compute networks subnets create node-subnet1 --project=$prodproject --range=192.168.10.0/24 --network=gke-producer-l4-vpc --region=us-central1 --secondary-range=pod=10.10.10.0/24,service=10.10.20.0/24 --enable-private-ip-google-access

创建 GKE 集群

通过 Cloud Shell

gcloud container clusters create gke-psc-l4 \
    --release-channel=rapid \
    --enable-ip-alias \
    --zone=us-central1-a \
    --network gke-producer-l4-vpc \
    --num-nodes 1 \
    --subnetwork node-subnet1 \
    --cluster-secondary-range-name pod \
    --services-secondary-range-name service

为 Private Service Connect 创建子网(NAT 子网)

您必须创建一个或多个专用子网,才能与 Private Service Connect 搭配使用。如果您使用 Google Cloud 控制台发布服务,则可以在此过程中创建子网。

如需了解 Private Service Connect 子网,请参阅 Private Service Connect 子网

通过 Cloud Shell

gcloud beta compute networks subnets create gke-nat-subnet \
    --project $prodproject \
    --network gke-producer-l4-vpc \
    --region us-central1 \
    --range 100.100.10.0/24 \
    --purpose PRIVATE_SERVICE_CONNECT

8. 部署工作负载和服务

以下清单描述了运行示例 Web 应用容器映像的 Deployment。从 Cloud Shell 将清单另存为 my-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: psc-ilb
spec:
  replicas: 3
  selector:
    matchLabels:
      app: psc-ilb
  template:
    metadata:
      labels:
        app: psc-ilb
    spec:
      containers:
      - name: whereami
        image: gcr.io/google-samples/whereami:v1.2.1
        ports:
          - name: http
            containerPort: 8080
        readinessProbe:
          httpGet:
            path: /healthz
            port: 8080
            scheme: HTTP
          initialDelaySeconds: 5
          timeoutSeconds: 1

从 Cloud Shell 将清单应用到您的集群

kubectl apply -f my-deployment.yaml

创建服务

以下清单描述了一项在 TCP 端口 8080 上创建内部 TCP/UDP 负载平衡器的服务。在 Cloud Shell 中将清单另存为 my-service.yaml

apiVersion: v1
kind: Service
metadata:
  name: gke-l4-psc
  annotations:
    networking.gke.io/load-balancer-type: "Internal"
spec:
  type: LoadBalancer
  selector:
    app: psc-ilb
  ports:
  - port: 80
    targetPort: 8080
    protocol: TCP

从 Cloud Shell 将清单应用到您的集群

kubectl apply -f my-service.yaml

创建 ServiceAttachment

以下清单描述了一个 ServiceAttachment,它向服务使用方公开您创建的服务。在 Cloud Shell 中将清单另存为 my-psc.yaml

apiVersion: networking.gke.io/v1beta1
kind: ServiceAttachment
metadata:
 name: emoji-sa
 namespace: default
spec:
 connectionPreference: ACCEPT_AUTOMATIC
 natSubnets:
 - gke-nat-subnet
 proxyProtocol: false
 resourceRef:
   kind: Service
   name: gke-l4-psc

从 Cloud Shell 将清单应用到您的集群

kubectl apply -f my-psc.yaml

ServiceAttachment 具有以下字段:

  • connectionPreference:用于确定客户连接到服务的方式的连接偏好设置。您可以使用 ACCEPT_AUTOMATIC 自动进行项目审批,也可以使用 ACCEPT_MANUAL. 的明确项目审批。如需了解详情,请参阅使用 Private Service Connect 发布服务
  • natSubnets:用于服务连接的子网资源名称列表。
  • proxyProtocol:设置为 true 时,请求中包含使用方来源 IP 和 Private Service Connect 连接 ID。这是可选字段,如果未提供,则默认为 false。
  • consumerAllowList::允许连接到 consumerAllowList: 的使用方项目列表。只有当 connectionPreferenceACCEPT_MANUAL. 时,才能使用此字段。如需详细了解此字段和其他选项,请参阅使用 Private Service Connect 发布服务

提供方验证

查看服务连接详情

您可以在 Cloud Shell 中使用以下命令查看 ServiceAttachment 的详细信息

kubectl describe serviceattachment emoji-sa

查看 GKE L4 ILB

从 Cloud 控制台导航到“网络服务”→“负载均衡”→“前端”

确定与之前定义的节点子网 192.168.10.0/24 一致的前端 IP 地址,请注意下面的屏幕截图,您的 IP 地址可能会有所不同。

ed7a25ed4774977b.png

查看已发布的服务

从 Cloud 控制台中,导航到“网络服务”→“Private Service Connect”→“已发布的服务”

请根据本实验中使用的网络确定相应服务,具体请参见下面的屏幕截图,gke-producer-l4-vpc,,您的“Service”和“Target”值可能有所不同

5a00836ee514b918

点击服务名称,转到以下屏幕,请注意“基本信息”中填充的服务连接详情。此外,请注意“关联的项目”为空,因为使用方尚未向该服务注册。ACCEPTREJECT 将保持灰显状态,因为 Connection preference 已设置为 "ACCEPT_AUTOMATicalLY"'。您随时可以通过修改服务连接 yaml (my-psc.yaml) 将此选项更改为 "ACCEPT_MANUAL"

497f5f43920018c0

e246063a23771273.png

9. 创建使用方 VPC 网络

1f3c90f1e139e906

在下面的部分中,使用方 VPC 在单独的项目中配置。使用方与提供方网络之间的通信通过使用方网络中定义的服务连接完成。

Codelab 需要两个项目,但对 PSC 而言并不是必需的。请记下这些参考来支持单个或多个项目。

单个项目 - 更新项目以支持提供方和使用方网络

在 Cloud Shell 中,确保已设置项目 ID

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
consumerproject=YOUR-PROJECT-NAME
prodproject=YOUR-PROJECT-NAME
echo $prodproject
echo $consumerproject

多个项目 - 更新项目以支持使用者网络

在 Cloud Shell 中,确保已设置项目 ID

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
consumerproject=YOUR-PROJECT-NAME
echo $consumerproject

VPC 网络

通过 Cloud Shell

gcloud compute networks create vpc-demo-consumer --project=$consumerproject --subnet-mode=custom

为 PSC 创建子网

通过 Cloud Shell

gcloud compute networks subnets create consumer-subnet --project=$consumerproject  --range=10.0.60.0/24 --network=vpc-demo-consumer --region=us-central1

为虚拟机实例创建子网

通过 Cloud Shell

gcloud compute networks subnets create consumer-subnet-vm --project=$consumerproject  --range=10.0.70.0/24 --network=vpc-demo-consumer --region=us-central1

创建静态 IP 地址以访问发布的服务

通过 Cloud Shell

gcloud compute addresses create vpc-consumer-psc --region=us-central1 --subnet=consumer-subnet --addresses 10.0.60.100

创建防火墙规则

要允许 IAP 连接到您的虚拟机实例,请创建以下防火墙规则:

  • 适用于您希望可以使用 IAP 访问的所有虚拟机实例。
  • 允许来自 IP 范围 35.235.240.0/20 的入站流量。此范围包含 IAP 用于 TCP 转发的所有 IP 地址

通过 Cloud Shell

gcloud compute firewall-rules create psclab-iap-consumer --network vpc-demo-consumer --allow tcp:22 --source-ranges=35.235.240.0/20 --enable-logging

创建出站流量防火墙规则来监控流向提供方服务连接的使用方 PSC 流量(虽然这对 PSC 而言不是必需的)

gcloud compute --project=$consumerproject firewall-rules create vpc-consumer-psc --direction=EGRESS --priority=1000 --network=vpc-demo-consumer --action=ALLOW --rules=all --destination-ranges=10.0.60.0/24 --enable-logging

10. 创建使用方测试实例 1

通过 Cloud Shell

gcloud compute instances create consumer-instance-1 --zone=us-central1-a --machine-type=e2-micro --private-network-ip=10.0.70.10 --no-address --subnet=consumer-subnet-vm --tags=google1 --image-family=debian-10 --image-project=debian-cloud

11. 创建使用方测试实例 2

通过 Cloud Shell

gcloud compute instances create consumer-instance-2 --zone=us-central1-a --machine-type=e2-micro --private-network-ip=10.0.70.20 --no-address --subnet=consumer-subnet-vm --tags=google2 --image-family=debian-10 --image-project=debian-cloud

12. 创建服务连接

在上一步中,您已将提供方服务连接字符串复制到安全的位置,现在我们将存储的值插入“target-service-attachment”字段。

7abaccc4e24f1ef7.png

通过 Cloud Shell

gcloud compute forwarding-rules create vpc-consumer-psc-fr --region=us-central1 --network=vpc-demo-consumer --address=vpc-consumer-psc --target-service-attachment=yoursavedproducerserviceattachment

13. 验证 - 消费者

我们将使用 C网址 和防火墙日志以验证使用方与提供方通信。

在使用方的项目中,静态 IP 地址用于发起与提供方的通信。系统会通过执行以下语法验证静态 IP 地址到使用方转发规则的这种映射。

1f3c90f1e139e906

在使用方 VPC 中,使用 shell 识别转发规则和静态 IP

gcloud compute forwarding-rules describe vpc-consumer-psc-fr --region us-central1

在下面的输出中,我们将在后续步骤中使用 10.0.60.100 到达提供方

IPAddress: 10.0.60.100
creationTimestamp: '2021-09-30T21:13:54.124-07:00'
id: '3564572805904938477'
kind: compute#forwardingRule
labelFingerprint: 42WmSpB8rSM=
name: vpc-consumer-psc-fr
network: https://www.googleapis.com/compute/v1/projects/deepakmichaelstage/global/networks/vpc-demo-consumer
networkTier: PREMIUM
pscConnectionId: '36583161500548196'
pscConnectionStatus: ACCEPTED

查看关联的服务

在 Cloud 控制台中,依次前往“网络服务”→“Private Service Connect”→“已连接的端点”查看新创建的端点

206bc00297aaa260

登录 consumer-instance-1 并测试对 Producer Publish Service 的访问权限

在 Cloud Shell 中,通过点击 +

81f3210b29faebd3.png

在 Cloud Shell 中执行以下操作:

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectname=YOUR-PROJECT-NAME
echo $projectname

gcloud compute ssh --zone "us-central1-a" "consumer-instance-1" --project "$projectname"

登录 consumer-instance-1 实例后,对转发规则 IP 地址 10.0.60.100 执行 curl 命令

在 Cloud Shell 中执行以下操作:

user@consumer-instance-1:~$ curl 10.0.60.100

输出示例

user@consumer-instance-1:~$ curl 10.0.60.100
{
  "cluster_name": "gke-psc-l4",
  "host_header": "10.0.60.100",
  "node_name": "gke-gke-psc-l4-default-pool-f2c6e301-vnlz.c.prodprojectid.internal",
  "pod_name": "psc-ilb-588887dfdb-w7tbr",
  "pod_name_emoji": "🤷",
  "project_id": "prodorijectid",
  "timestamp": "2021-10-01T17:43:37",
  "zone": "us-central1-a"

登录 consumer-instance-2 并测试对 Producer Publish Service 的访问权限

在 Cloud Shell 中,通过点击 +

81f3210b29faebd3.png

在 Cloud Shell 中执行以下操作:

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectname=YOUR-PROJECT-NAME
echo $projectname

gcloud compute ssh --zone "us-central1-a" "consumer-instance-2" --project "$projectname"

在 Cloud Shell 中执行以下操作:

user@consumer-instance-2:~$ curl 10.0.60.100

输出示例

deepakmichael@consumer-instance-2:~$ curl 10.0.60.100
{
  "cluster_name": "gke-psc-l4",
  "host_header": "10.0.60.100",
  "node_name": "gke-gke-psc-l4-default-pool-f2c6e301-vnlz.c.prodproject.internal",
  "pod_name": "psc-ilb-588887dfdb-4jdql",
  "pod_name_emoji": "🧑🏿",
  "project_id": "prodproject",
  "timestamp": "2021-10-01T17:49:51",
  "zone": "us-central1-a"

14. 防火墙日志记录 - 分配的验证

使用日志浏览器验证防火墙规则“vpc-consumner-psc”正在捕获虚拟机实例与静态 IP 之间的流

  1. 在 Cloud 控制台中,确定 Operations Logging → 日志浏览器
  2. 在“查询”字段中,将下面的条目更新为 yourconsumerproject,然后选择“运行查询”

logName:(projects/yourconsumerprojectID/logs/compute.googleapis.com%2Ffirewall) AND jsonPayload.rule_details.reference:("network:vpc-demo-consumer/firewall:vpc-consumer-psc")

  1. 查询结果按所提供的屏幕截图提供以下内容

23e427b3060473

  1. 展开日志 (jsonPayload → Connection),并确定下面提供的输出。请注意 dest_ip:10.0.60.100 是用于访问提供方服务的 STATIC TCP IP,src_ip: 10.0.70.10 或 10.0.70.20 是虚拟机实例 IP 地址。允许处置。

2669743fd1f1cb0d.png

15. 验证 - 提供方

afe738fc869f0d6e.png

在 Producers 项目中,验证服务连接是否已成功连接。导航到网络服务 → Private Service Connect → 已发布的服务

89ded87a63888f60

点击该服务会显示已连接的使用方项目和状态,如下图所示

15966d47423ebc5f

16. 限制对已发布的服务的访问权限

1f3c90f1e139e906

到目前为止,我们已确认这两个实例都有权访问已发布的服务,接下来我们就创建一条出站防火墙规则来拒绝 consumer-instance-2 访问已发布的服务。

默认情况下,GCP 允许所有出站流量,但拒绝所有入站流量。在以下步骤中,我们将根据先前定义的网络标记“google2”创建防火墙规则在创建 consumer-instance-2 时用于拒绝对已发布服务的访问。

7fa2cda1dfec33a

在 Cloud Shell 中点击“+ 执行以下防火墙规则”,打开新的 Cloud Shell 标签页

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectname=YOUR-PROJECT-NAME
echo $projectname

gcloud compute --project=$projectname firewall-rules create psc-endpoint-deny-egress --direction=EGRESS --priority=999 --network=vpc-demo-consumer --action=DENY --rules=all --destination-ranges=10.0.60.100/32 --target-tags=google2 --enable-logging

现在,我们测试一下 consumer-instance-2 能否访问已发布的服务。如果会话超时,您需要打开一个新的 Cloud Shell 并登录虚拟机,如下所述。

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectname=YOUR-PROJECT-NAME
echo $projectname

gcloud compute ssh --zone "us-central1-a" "consumer-instance-2" --project "$projectname"

在 Cloud Shell 中执行以下操作:

user@consumer-instance-2:~$ curl 10.0.60.100

输出示例

user@consumer-instance-2:~$ curl 10.0.60.100
curl: (7) Failed to connect to 10.0.60.100 port 80: Connection timed out

防火墙日志记录 - 拒绝验证

使用日志浏览器验证防火墙规则“psc-endpoint-deny-egress”正在捕获虚拟机实例与静态 IP 之间的流

  1. 在 Cloud 控制台中,确定 Operations Logging → 日志浏览器
  2. 在“Query”(查询)字段中,使用 yourconsumerproject 更新以下条目,然后选择“Run Query”(运行查询)

logName:(projects/yourconsumerprojectID/logs/compute.googleapis.com%2Ffirewall) AND jsonPayload.rule_details.reference:("network:vpc-demo-consumer/firewall:psc-endpoint-deny-egress")

  1. 查询结果按所提供的屏幕截图提供以下内容

83b4fc7348ac93cd.png

  1. 展开日志并确定下方提供的输出。注意 dest_ip:10.0.60.100 是 STATIC TCP IP,src_ip: 10.0.70.10 或 10.0.70.20 是虚拟机实例 IP 地址。拒绝处置。

a344f75f67590655.png

17. 清理步骤

提供方网络清理步骤

afe738fc869f0d6e.png

通过 Producer 项目终端中的单个 Cloud Shell 删除实验组件

gcloud container clusters delete gke-psc-l4 --region us-central1-a --quiet

gcloud compute networks subnets delete gke-nat-subnet --region=us-central1 --quiet

gcloud compute networks subnets delete node-subnet1 --region=us-central1 --quiet

gcloud compute networks delete gke-producer-l4-vpc --quiet

1f3c90f1e139e906

使用方网络清理步骤

通过使用方项目终端中的单个 Cloud Shell 删除实验组件

gcloud compute instances delete consumer-instance-1 --zone=us-central1-a --quiet

gcloud compute instances delete consumer-instance-2 --zone=us-central1-a --quiet

gcloud compute forwarding-rules delete vpc-consumer-psc-fr --region=us-central1 --quiet

gcloud compute addresses delete vpc-consumer-psc --region=us-central1 --quiet

gcloud compute firewall-rules delete psclab-iap-consumer --quiet

gcloud compute networks subnets delete consumer-subnet --region=us-central1 --quiet

gcloud compute networks subnets delete consumer-subnet-vm --region=us-central1 --quiet

gcloud compute firewall-rules delete vpc-consumer-psc --quiet

gcloud compute firewall-rules delete psc-endpoint-deny-egress --quiet

gcloud compute networks delete vpc-demo-consumer --quiet

18. 恭喜!

恭喜您完成此 Codelab。

所学内容

  • Private Service Connect 的优势
  • 服务使用方的关键概念
  • 服务提供方的主要概念
  • 创建提供方环境
  • 通过服务连接公开服务(提供方环境)
  • 创建使用方环境
  • 在使用方网络中创建转发规则
  • 验证使用方访问权限
  • 启用政策访问权限控制
  • 使用出站防火墙规则阻止了对使用方转发规则的访问