更新时间:2025-08-20 GMT+08:00
分享

使用VPCEP实现跨VPC访问Kafka

Kafka客户端和Kafka实例在同一区域的不同VPC中,由于VPC之间逻辑隔离,Kafka客户端和Kafka实例不能直接通信。您可以通过以下任意一个方式实现跨VPC访问:

  • 创建VPC对等连接,将两个VPC的网络打通,实现跨VPC访问。具体步骤请参考对等连接
  • 利用VPC终端节点在不同VPC间建立跨VPC的连接通道,实现Kafka客户端通过内网访问Kafka实例。

本章节主要介绍通过VPC终端节点实现跨VPC访问的方法。

VPC终端节点由“终端节点服务”和“终端节点”两种资源实例组成。

  • 终端节点服务:将Kafka实例配置为VPC终端节点支持的服务,可以被终端节点连接和访问。
  • 终端节点:用于在VPC和终端节点服务之间建立便捷、安全、私密的连接通道。
图1 跨VPC访问Kafka实例原理图

客户端使用VPCEP跨VPC访问Kafka时,使用的是明文连接还是密文连接?

使用明文连接还是密文连接,取决于“跨VPC访问协议”。跨VPC访问协议是在创建Kafka实例时设置的,实例创建成功后,不支持修改。

跨VPC访问协议的取值如下:

  • PLAINTEXT:表示客户端访问Kafka实例时,无需认证,数据通过明文传输。
  • SASL_SSL:表示客户端访问Kafka实例时,使用SASL认证,数据通过SSL证书加密传输。
  • SASL_PLAINTEXT:表示客户端访问Kafka实例时,使用SASL认证,数据通过明文传输。

步骤一:创建终端节点服务

  1. 登录Kafka控制台
  2. 在管理控制台左上角单击,选择Kafka实例所在的区域。
  3. 单击Kafka实例名称,进入实例详情页面。
  4. 在“概览”页面的“高级配置”区域,获取Kafka实例的网卡地址(listeners IP)和对应的Port ID。

    图2 Kafka实例的网卡地址(listeners IP)和对应的Port ID

  5. 在“概览”页面的“网络”区域,查看Kafka实例所在的VPC名称。

    图3 查看Kafka实例所在的VPC名称

  6. 单击VPC名称,进入VPC基本信息页签,获取VPC ID。

    图4 获取VPC ID

  7. 调用VPC终端节点的API创建终端节点服务。参考表1设置请求参数,其他参数根据实际情况设置。API详情请参考创建终端节点服务

    POST https://{endpoint}/v1/{project_id}/vpc-endpoint-services
    表1 创建终端节点服务参数说明

    参数名称

    说明

    port_id

    终端节点服务后端资源的ID。

    输入4中获取的其中一个Port ID。

    vpc_id

    终端节点服务对应后端资源所在的VPC的ID。

    输入6中获取的VPC ID。

    server_type

    资源类型。

    输入“VM”。

    client_port

    终端节点访问的端口。

    输入“9011”。

    server_port

    终端节点服务的端口。

    输入“9011”。

    protocol

    端口映射协议。

    输入“TCP”。

    approval_enabled

    是否需要审批。

    输入“false”,表示不需要审批,创建的终端节点连接直接为accepted状态。

    service_type

    终端节点服务类型。

    输入“interface”。

    endpoint

    获取VPC终端节点的终端节点,区域必须与Kafka实例保持一致。

    project_id

    获取VPC终端节点的项目ID,区域必须与Kafka实例保持一致。

    记录响应信息中的“service_name”参数值,此参数表示终端节点服务的名称。

  8. 参考7,为4中其他Port ID创建终端节点服务,并记录终端节点服务的名称。

(可选)步骤二:添加白名单

VPCEP允许跨账号的终端节点连接终端节点服务,通过设置终端节点服务的白名单实现。

Kafka客户端和Kafka实例属于不同账号时,将Kafka客户端所在账号的ID添加到终端节点服务的白名单中,完成跨账号终端节点的访问授权,具体操作步骤请参考添加白名单

步骤三:购买终端节点

  1. 在管理控制台左上角单击,选择“网络 > VPC终端节点”,进入终端节点页面。
  2. 单击“购买终端节点”,进入“购买终端节点”页面。
  3. 参考表2设置参数,其他参数保持默认,如果想要了解更多的参数信息,请参考购买终端节点

    图5 终端节点参数设置

    表2 创建终端节点参数说明

    参数名称

    说明

    区域

    终端节点所在区域。与Kafka实例保持一致。

    服务类别

    • 云服务:当您要连接的终端节点服务为云服务时,需要选择“云服务”。
    • 按名称查找服务:当您要连接的终端节点服务为用户私有服务时,需要选择“按名称查找服务”。

    选择“按名称查找服务”。

    服务名称

    输入7中记录的终端节点服务名称,单击“验证”。显示“已找到服务”后,继续后续操作。

    (可选)创建内网域名

    如果您想以域名方式访问终端节点,请勾选“创建内网域名”。终端节点创建完成后,便能通过内网域名直接访问终端节点。

    虚拟私有云

    终端节点所属的虚拟私有云。选择Kafka客户端所属的VPC。

    子网

    终端节点所属的子网。选择Kafka客户端所属的子网。

    IPv4地址

    终端节点的IPv4地址。选择“自动分配IPv4地址”。

  4. 单击“立即购买”,进入规格确认页面。
  5. 确认无误后,提交请求。
  6. 购买成功后,返回终端节点页面,查看终端节点状态是否为“已接受”,“已接受”表示终端节点已成功连接至终端节点服务。

    图6 查看终端节点状态

  7. 单击终端节点ID,在“基本信息”页签,查看并记录节点IP。您可以使用该IP访问终端节点,进行跨VPC资源通信。

    如果您想通过域名访问终端节点,进行跨VPC资源通信,在“基本信息”页签查看并记录内网域名。

    复制内网域名时,不要复制最后一个点。正确的域名格式为“vpcep-5xxx7-e302-4ab4-bc6c-54xxxe52.xx-xx-xx.xxx.com”。

    图7 查看节点IP

  8. 参考1~7,为8中创建的终端节点服务购买终端节点,查看并记录节点IP。

    如果您想通过域名访问终端节点,请记录内网域名。

步骤四:修改advertised.listeners IP

  1. 在管理控制台左上角单击,选择“应用中间件 > 分布式消息服务Kafka版”,进入Kafka总览页面。
  2. 在左侧导航栏单击“Kafka实例”,进入Kafka实例列表页面。
  3. 单击Kafka实例名称,进入实例详情页面。
  4. 在“概览”页面的“高级配置”区域,单击“修改”,将“跨VPC访问”的“advertised.listeners IP/域名”修改为78中记录的节点IP。节点IP必须与Port ID一一对应,否则会导致网络不通。修改完后,单击“保存”。

    如果您想通过域名访问终端节点,在“概览”页面的“高级配置”区域,单击“修改”。在“advertised.listeners IP/域名”列,单击,切换到域名模式。将“advertised.listeners IP/域名”修改为78中记录的内网域名。内网域名必须与Port ID一一对应,否则会导致网络不通。
    图8 修改advertised.listeners IP

步骤五:验证接口连通性

参考使用客户端连接Kafka(明文接入)或者使用客户端连接Kafka(密文接入),测试是否可以生产和消费消息。

测试接口连通性时,注意以下几点:

  • 连接Kafka实例的地址为“advertised.listeners IP:9011”,以图8为例,连接Kafka实例的地址为“192.168.0.71:9011,192.168.0.11:9011,192.168.0.21:9011”。

    如果使用域名访问终端节点,连接Kafka实例的地址为“域名:9011”,例如“vpcep-5xxx7-e302-4ab4-bc6c-54xxxe52.xx-xx-xx.xxx.com:9011”。

  • 在Kafka实例安全组的入方向规则中放通9011端口,以及198.19.128.0/17网段的地址。
  • 如果Kafka实例的子网配置了网络ACL功能,需要在网络ACL的入方向规则中放通198.19.128.0/17网段的地址,以及VPC终端节点涉及的子网。

198.19.128.0/17是为VPC终端节点分配的网段,使用VPC终端节点需要放通此网段。

相关文档