为 Managed Service for Apache Kafka 配置网络

客户端可以从 Google Cloud项目中的任何 Virtual Private Cloud (VPC) 网络连接到 Managed Service for Apache Kafka 集群。

本页介绍了如何在 Managed Service for Apache Kafka 中配置网络、如何启用 Kafka 客户端与集群之间的连接,以及如何启用跨项目连接。

概览

创建集群时,该服务会将其放置在由 Google Cloud管理的 VPC 网络中。此网络称为租户网络。 每个 Managed Service for Apache Kafka 集群都有自己的隔离租户网络。如需使客户端应用能够与集群通信,您需要将 VPC 网络中的子网连接到租户网络。

下图显示了两个 Google Cloud 项目,即 project-1project-2。Managed Service for Apache Kafka 集群位于 project-1

具有三个已连接子网的 Managed Service for Apache Kafka 集群

以下子网已连接到集群:

  • subnet-1,位于 project-1 中的 VPC 网络 vpc-1 中。
  • subnet-2,位于 project-1 中的 VPC 网络 vpc-2 中。
  • subnet-3,位于 project-2 中的 VPC 网络 vpc-3 中。

将子网连接到集群

首次创建 Managed Service for Apache Kafka 集群时,您必须至少指定一个子网。之后,您可以更新集群以添加或移除子网。

连接的子网可以属于与集群相同的 Google Cloud 项目,也可以属于其他项目。连接的子网必须与集群位于同一区域,但同一 VPC 中任何区域的客户端都可以连接到该子网中的 IP 地址。每个 VPC 网络最多只能有一个子网连接到集群。

如需查看连接到集群的子网,请参阅查看集群的子网

集群 DNS 条目

将子网连接到集群时,该服务会在子网网络中为集群的引导地址和代理创建 DNS 条目。Kafka 客户端使用引导地址来定位代理并建立连接。

DNS 名称在所有连接的子网中都相同,但它们在每个子网中对应的 IP 地址不同。由于 DNS 名称是一致的,因此所有 Kafka 客户端应用都可以使用相同的初始启动地址。如需获取集群的引导地址,请参阅查看集群的引导地址

如需查看连接到 Managed Service for Apache Kafka 的客户端应用示例,请参阅以下教程:

子网大小调整

向集群添加子网时,该子网必须有足够的可用 IP 地址。每个子网都需要为每个 Kafka 代理分配一个 IP 地址,并为引导地址分配一个 IP 地址。Managed Service for Apache Kafka 的最小集群大小为三个代理,因此每个子网至少需要四个可用 IP 地址(包括引导地址)。

如果集群的 vCPU 数量超过 45 个,则每 15 个 vCPU 对应一个代理。在这种情况下,请按如下方式计算每个子网的 IP 地址数量下限:

  1. 将 vCPU 数量除以 15。
  2. 向上舍入到最接近的整数。
  3. 加 1 是为了考虑引导地址。

例如,一个具有 60 个 vCPU 的集群至少需要 (60/15 + 1) = 5 个可用 IP 地址。

Google 可能会在未来更改代理与 vCPU 的比率。为应对日后可能发生的任何变化,我们建议您分配的 IP 地址数量是上一步中计算出的数量的 3 倍。

规划子网大小时,请根据您预计未来集群可扩缩到的最大规模进行计算。

如果您计划使用 Kafka Connect,还应考虑 Connect 集群的子网要求。如需了解详情,请参阅工作器子网

以非公开方式使用的公共 IP 范围

您可以将集群连接到使用非 RFC 1918 地址空间的子网。此类 IP 地址范围称为“以非公开方式使用的公共 IP” (PUPI) 范围。

无需进行额外配置即可连接到 PUPI 子网。PUPI 子网必须使用有效 IPv4 范围,且不得使用禁止的 IPv4 子网范围

跨项目连接客户端和集群

如果您在不同的 Google Cloud 项目中有 Kafka 客户端,可以通过以下方式将它们连接到集群:

接下来的部分将介绍这些选项。

跨项目连接集群

您可以将其他项目中的子网连接到您的集群。如需启用跨项目访问权限,您必须向与集群关联的 Google 代管式服务账号授予权限。对于您希望 Kafka 客户端访问集群的每个项目,相应服务账号必须具有该项目上的 Managed Kafka Service Agent IAM 角色。此角色可让集群访问Google Cloud 资源,以便创建网络资源和 DNS 条目。

示例:如果 project-1 包含集群,并且您希望 project-2 中的客户端访问该集群,请向 project-1 的 Managed Kafka 服务账号授予 project-2 的 Managed Kafka 服务代理角色。然后,按照将子网连接到集群中所述,将 project-2 中的子网连接到集群。

如需授予必要的角色,请执行以下步骤:

控制台

  1. 确定您希望 Kafka 客户端访问 Managed Service for Apache Kafka 集群的 Google Cloud 项目。

  2. 对于每个项目,在 Google Cloud 控制台中,前往相应项目的 IAM 页面:

    前往 IAM 页面

  3. 点击 授予访问权限

  4. 新的主账号字段中,输入以下内容:

    service-CLUSTER_PROJECT_NUMBER@gcp-sa-managedkafka.iam.gserviceaccount.com
    

    CLUSTER_PROJECT_NUMBER 替换为包含 Managed Service for Apache Kafka 集群的项目的项目编号

  5. 点击添加角色

  6. 搜索角色字段中,输入 Managed Kafka Service Agent。 服务代理名称会显示在搜索结果中。

  7. 在搜索结果中,选择 Managed Kafka Service Agent

  8. 点击应用

  9. 点击保存

gcloud

  1. 确定您希望 Kafka 客户端访问 Managed Service for Apache Kafka 集群的 Google Cloud 项目。

  2. 针对每个项目运行 gcloud projects add-iam-policy-binding 命令:

    gcloud projects add-iam-policy-binding CLIENT_PROJECT_ID \
        --member=serviceAccount:service-CLUSTER_PROJECT_NUMBER@gcp-sa-managedkafka.iam.gserviceaccount.com \
        --role=roles/managedkafka.serviceAgent
    

    替换以下内容:

    • CLIENT_PROJECT_ID:要连接的 VPC 网络所属项目的名称
    • CLUSTER_PROJECT_NUMBER:包含 Managed Service for Apache Kafka 集群的项目的项目编号

使用共享 VPC 连接项目

借助共享 VPC,组织可将多个项目中的资源连接到一个公用 VPC 网络。如需将共享 VPC 与 Managed Service for Apache Kafka 搭配使用,请执行以下步骤:

  1. 创建 Managed Service for Apache Kafka 集群。

  2. 预配共享 VPC

  3. 按照上一部分中的说明,向受管 Kafka 服务账号授予共享 VPC 宿主项目中的所需角色。

  4. 将 Managed Service for Apache Kafka 集群连接到共享 VPC 网络中的子网。

共享 VPC 宿主项目或服务项目中的客户端可以连接到集群。

如需了解何时在网络架构中使用共享 VPC,请参阅 VPC 设计的最佳实践和参考架构

集群的网络架构

本部分详细介绍了 Managed Service for Apache Kafka 中使用的网络架构。

  • Kafka 集群跨越租户网络和一个或多个使用方网络。

  • 在租户网络中,集群具有单个引导 IP 地址和网址。此引导地址对应于连接到集群中所有代理的负载均衡器。每个代理都可以单独充当引导服务器,但为了确保可靠性,我们建议您使用引导地址。

  • 在每个使用方网络中,该服务会为引导地址创建一个 Private Service Connect 端点,并为每个代理创建一个端点。

  • 对于集群所连接的各个 VPC 网络,引导地址的网址是相同的。IP 地址是消费方网络的本地地址。

  • 客户端使用 DNS 名称连接到 Kafka 代理。这些名称会自动注册到 Kafka 集群所连接的每个 VPC 网络中。引导地址及其端口号可作为集群的属性使用。

  • 客户端使用引导地址来检索代理网址。这些网址会解析为每个 VPC 网络的本地 IP 地址。您可以在 Cloud DNS 中找到实际的代理 IP 地址和网址。

下图展示了 Managed Service for Apache Kafka 集群网络的一个示例架构。

Managed Service for Apache Kafka 网络

  • 在此示例中,集群有 3 个代理,并且位于租户 VPC 中。

  • broker 通过默认 Kafka 端口 (9092) 与客户端通信,并具有唯一的 IP 地址。在此示例中,这三个代理的 IP 地址分别为 10.128.10.2、10.128.10.3 和 10.128.10.4。

  • 所有三个代理都连接到引导负载均衡器。这可确保高可用性和区域容错能力,因为引导地址不局限于单个代理或可用区。

排查 VPC 网络配置问题

如果该服务无法配置使用方 VPC 网络以访问 Managed Service for Apache Kafka 集群,则会记录类似于以下内容的消息:

Managed Service for Apache Kafka failed to set up networking in VPC subnet
to the cluster project.

如果您的 Kafka 客户端无法连接到 Managed Service for Apache Kafka 集群,请执行以下问题排查步骤:

  • 在消费者 VPC 网络的父项目中启用 Compute Engine 和 Cloud DNS API。

  • 如果 Managed Service for Apache Kafka 集群和消费者 VPC 网络位于不同的项目中,请配置所需的权限。请参阅跨项目连接集群

  • 确保没有组织政策限制条件阻止服务在消费者的 VPC 网络项目中创建必要的资源。

  • 确保客户端使用的是正确的引导地址

  • 确保 Kafka 客户端在配置为可访问 Managed Service for Apache Kafka 集群的 VPC 网络中运行。

  • 如果您在计算机或笔记本电脑上运行 Kafka 客户端,则可以设置一个 Compute Engine 实例作为代理,以访问 Managed Service for Apache Kafka 集群。如需了解详情,请参阅设置客户端机器

后续步骤