客户端可以从 Google Cloud 项目中的任何虚拟私有云 (VPC) 网络连接到 Google Cloud Managed Service for Apache Kafka 集群。您还可以通过公共互联网启用来自受信任 IP 范围的访问权限。
本页介绍了如何在 Managed Service for Apache Kafka 中配置网络、如何启用 Kafka 客户端与集群之间的连接,以及如何跨不同项目以私密方式连接客户端和集群。
VPC 网络是物理网络的虚拟版本,在 Google Cloud内实现。它为虚拟机实例、容器工作负载和其他资源提供安全、私密的网络连接。 如需了解详情,请参阅 VPC 网络概览。
概览
创建集群时,该服务会将集群代理和网络端点放置在 Google 管理的项目中的 VPC 网络中。此项目称为租户项目,相应网络称为租户网络。相比之下,您的资源、客户端应用和客户端 VPC 网络位于您自己的项目(称为使用方项目)中。每个 Managed Service for Apache Kafka 集群都有自己的隔离租户网络。
VPC 网络可划分为多个称为子网的分区。每个子网都会定义云网络中特定区域的 IP 地址范围。为了让客户端应用与集群通信,您可以将 VPC 网络中的子网连接到租户网络,也可以选择启用公共集群访问权限,以便通过公共互联网进行连接。
下图显示了两个 Google Cloud 项目,即 project-1 和 project-2。Managed Service for Apache Kafka 集群位于 project-1。

以下子网已连接到集群:
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 集群时,您必须至少指定一个子网。之后,您可以更新集群以添加或移除子网。
连接的子网可以与集群属于同一使用方项目,也可以属于其他使用方项目。连接的 VPC 网络中任意区域的客户端应用都可以连接到集群。如需详细了解子网位置和数量,请参阅限制。
如需详细了解如何查看已连接的子网,请参阅查看集群。
集群 DNS 条目
将子网连接到集群时,该服务会在子网网络中为集群的引导地址和代理创建 DNS 条目。Kafka 客户端使用引导地址来定位代理并建立连接。当引导服务器将客户端重定向到特定代理时,它会使用代理网址,而不是 IP 地址。
引导网址和代理网址在集群的整个生命周期内都是固定的,但不同集群的网址格式可能不同。如需获取集群的引导地址,请参阅查看集群的引导地址。
DNS 名称在所有连接的子网中都相同,但它们在每个子网中对应的 IP 地址不同。由于 DNS 名称是一致的,因此所有 Kafka 客户端应用都可以使用相同的初始启动地址。
如需查看连接到 Managed Service for Apache Kafka 的客户端应用示例,请参阅以下教程:
子网大小调整
向集群添加子网时,该子网必须有足够的可用 IP 地址。每个子网都需要一个 IP 地址用于每个 Kafka 代理,还需要一个 IP 地址用于引导地址。Managed Service for Apache Kafka 的最小集群规模为三个代理,因此每个子网至少需要四个可用 IP 地址(包括引导地址)。
如果集群的 vCPU 数量超过 45 个,则每 15 个 vCPU 对应一个代理。在这种情况下,请按以下方式计算每个子网的 IP 地址数量下限:
- 将 vCPU 数量除以 15。
- 向上舍入到最接近的整数。
- 加 1 是为了考虑引导地址。
例如,一个具有 60 个 vCPU 的集群至少需要 (60/15 + 1) = 5 个可用 IP 地址。
Google 可能会更改代理与 vCPU 的比率。为适应任何变化,我们建议您分配的 IP 地址数量是上一步中计算出的数量的三倍。
规划子网大小时,请根据您预计集群可扩缩到的最大大小进行计算。
如果您计划使用 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 中的子网连接到集群。
如需授予必要的角色,请执行以下步骤:
控制台
确定您希望 Kafka 客户端访问 Managed Service for Apache Kafka 集群的 Google Cloud 项目。
对于每个项目,在 Google Cloud 控制台中,前往相应项目的 IAM 页面:
点击 授予访问权限。
在新的主账号字段中,输入以下内容:
service-CLUSTER_PROJECT_NUMBER@gcp-sa-managedkafka.iam.gserviceaccount.com将 CLUSTER_PROJECT_NUMBER 替换为包含 Managed Service for Apache Kafka 集群的项目的项目编号。
点击添加角色。
在搜索角色字段中,输入
Managed Kafka Service Agent。 服务代理名称会显示在搜索结果中。在搜索结果中,选择 Managed Kafka Service Agent。
点击应用。
点击保存。
gcloud
确定您希望 Kafka 客户端访问 Managed Service for Apache Kafka 集群的 Google Cloud 项目。
针对每个项目运行
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 搭配使用,请执行以下步骤:
创建 Managed Service for Apache Kafka 集群。
按照上一部分中的说明,向 Managed Kafka 服务账号授予共享 VPC 宿主项目中的所需角色。
将 Managed Service for Apache Kafka 集群连接到共享 VPC 网络中的子网。
共享 VPC 宿主项目或服务项目中的客户端可以连接到集群。
如需了解何时在网络架构中使用共享 VPC,请参阅 VPC 设计的最佳实践和参考架构。
将客户端连接到公共集群
如果您的 VPC 网络外部有客户端应用,您可以为集群启用公开访问权限。公共集群仍需要连接的子网。不过,您无需通过它发送流量。
启用公共集群功能后,该服务会为集群的代理和引导程序端点预配外部 IPv4 地址。该服务还会使集群 DNS 条目可公开解析为这些公共 IP 地址。这意味着外部客户端可以使用相同的初始启动地址来查找代理并建立连接。此实现使用水平分割 DNS。包含已连接子网的 VPC 网络中的客户端会继续解析专用端点,而其他网络中的客户端会解析公共端点。启用公共集群功能不会在您的消费项目中创建其他资源。
启用公共集群功能后,您必须提供一个或多个允许的来源 IP 范围。如需详细了解允许的范围大小和限制,请参阅公共集群或限制。
您可以通过更新集群来添加或移除允许的来源 IP 范围。Managed Service for Apache Kafka 使用 Cloud Next Generation Firewall来限制对公共集群的访问。移除允许的来源 IP 范围仅适用于新连接(请参阅对现有流量的影响)。
该服务采取了多项预防措施,以帮助确保公共集群的安全性。所有连接在传输过程中都使用 TLS 加密,并且所有连接都需要进行身份验证。您必须使用具有 SASL 的 IAM 身份或具有 mTLS 的客户端证书进行身份验证。 不允许匿名访问。如需了解详情,请参阅 Kafka 代理的身份验证类型。
安全管理员可以通过自定义组织政策限制条件来禁止项目中的公开集群。如需详细了解组织政策,请参阅创建自定义限制条件。
配置来自外部网络的出站流量防火墙
在某些情况下,您可能需要确定代理和引导程序的外部 IPv4 地址。如需了解如何检索这些值,请参阅公共集群详细信息。
该服务通过以下方式提供此信息:
与集群关联的外部 IPv4 地址可在 Managed Service for Apache Kafka API、
gcloud和 Terraform 中找到。该服务维护一个或多个发现 DNS 记录。这些是 DNS
A记录,其中包含与您的集群关联的所有外部 IPv4 地址。您可以在基于 FQDN 的防火墙(例如 Cloud NGFW)中使用这些记录,当端点列表发生变化时,这些防火墙会自动更新规则。发现端点列表可在 API、gcloud和 Terraform 中找到。
使用与集群关联的公共 IP 地址时,请考虑以下事项:
与您的集群关联的公共 IPv4 地址列表可能会发生变化或扩大。因此,请自动执行使用此信息的方式,或者定义一个流程,以便在扩容集群时考虑新的发现 DNS 记录。以下情况可能会导致更改:
您扩缩集群。扩容可能会在添加新代理时添加一个或多个外部 IPv4 地址。如需了解 vCPU 数量如何影响代理数量,请参阅子网大小调整。
您关闭并重新开启公共集群功能。此操作会为集群分配一组新的外部 IPv4 地址。
每个发现 DNS 记录最多包含 30 个 IP 地址。这符合 FQDN 防火墙强制执行的常见限制。如果集群包含 29 个或更少的代理,则会有一条包含 30 个外部 IPv4 地址(包括引导记录)的发现 DNS 记录。该服务每增加 30 个代理,就会添加一条发现 DNS 记录。如需了解 vCPU 数量如何影响代理数量,请参阅子网大小调整。
请勿将 Kafka 客户端配置为连接到发现 DNS 记录,而应将客户端配置为连接到引导地址。如需了解详情,请参阅限制。
如果您使用此信息来配置出站防火墙,请允许连接到 TCP 端口
9092(SASL) 和9192(mTLS)。
集群的网络架构
本部分详细介绍了 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 集群网络的一个示例架构。
*
在此示例中,集群有 3 个代理,并且集群位于租户 VPC 中。
broker 通过默认 Kafka 端口 (9092) 与客户端通信,并具有唯一的 IP 地址。在此示例中,这三个代理的 IP 地址分别为 10.128.10.2、10.128.10.3 和 10.128.10.4。
所有三个代理都连接到引导负载均衡器。这样可确保高可用性和区域容错能力,因为引导地址不局限于单个代理或可用区。
限制
以下限制适用于 VPC 连接和公共集群:
子网区域。连接的子网必须与集群位于同一区域。
子网数量。您可以将最少一个、最多十个子网连接到集群。
每个网络的子网数。每个 VPC 网络最多只能将一个子网连接到集群。
子网大小。每个连接的子网都需要至少一个 IP 地址(用于每个代理)以及一个 IP 地址(用于引导地址)。至少需要 4 个可用 IP 地址。如需了解详情,请参阅子网大小调整。
公共集群的已连接子网。如需启用公开访问权限,您的集群仍必须至少有一个已连接的子网,不过您无需通过该子网发送流量。
允许的来源 IP 范围。公共集群的每个允许的来源 IP 范围都必须以 IPv4 CIDR 表示法指定。每个 CIDR 子网大小必须介于
/16和/32之间。CIDR 范围不得重叠。不支持 IPv6 地址。您最多可以指定 500 个允许的来源 IP 范围。发现记录 DNS 解析。发现 DNS 记录仅用于配置基于 FQDN 的出站流量防火墙。请勿将 Kafka 客户端配置为连接到这些发现记录;而是将客户端配置为连接到引导地址。
问题排查
如需了解如何排查网络问题,请参阅网络错误。
接下来怎么做?
如需详细了解如何创建集群,请参阅创建 Managed Service for Apache Kafka 集群。
如需详细了解如何更新集群,请参阅更新 Managed Service for Apache Kafka 集群。
如需详细了解如何查看集群的子网和活跃代理,请参阅查看集群。
如需详细了解如何发布和使用消息,请参阅发布和使用消息。