网络连通性

更新时间:
复制为 MD 格式

实时计算Flink版默认不具备访问公网的能力,本文为您介绍如何进行公网访问、跨VPC访问、域名解析以及网络连通性测试等相关的常见问题。

如何排除网络问题?

由于实时计算Flink版部署在专有网络VPC下,在开通Flink工作空间时选择了专有网络后,您将无法再更改。如果源端或目标端任意一个与目标Flink工作空间不在同一VPC下,会导致源端和目标端网络不通,数据无法读写。因此,如果您遇到数据无法读写的情况,可以按照以下步骤排查是否为网络问题:

  1. 检查上下游服务与Flink工作空间之间网络是否连通。您可以在Flink控制台测试网络连通性,具体请参见如何进行网络探测?

    实时计算Flink版默认仅支持访问相同地域、相同VPC下的服务。如果有访问跨VPC资源或者通过公网访问的需求:

  2. 检查上下游服务中是否已配置了白名单,具体操作请参见如何设置白名单?

  3. 如果还存在网络超时的报错,也可能是连接超时导致的。需要在DDLWITH参数中调大connect.timeout参数的取值,该参数的默认值是30秒。

如何进行网络探测?

实时计算Flink版支持网络探测能力,您可以在Flink开发控制台进行网络探测,具体步骤如下:

  1. 登录实时计算控制台

  2. 单击目标工作空间操作列下的控制台。

  3. 单击顶部导航栏右侧的网络探测图标。

    image

  4. 通过输入Endpoint或者IP地址的方式检测Flink作业运行的环境与您的上下游系统是否连通。

    重要

    输入Endpoint时,请删除后面的:<port>,并将port放到网络探测的Port栏输入。

    image.png

    报错connect timed out时,请确认访问的域名是否为公网或其他VPC。实时计算Flink版默认仅支持访问相同VPC下的服务。如果有访问跨VPC资源或者通过公网访问的需求,请参见如何访问跨VPC的其他服务?如何访问公网?

如何获取HologresEndpoint地址?

  1. 登录Hologres管理控制台,在实例列表页面,单击目标实例。

  2. 实例详情页面的网络信息区域可以获取对应的Endpoint地址。

    您可以根据网络的情况获取对应的Endpoint地址。

    网络类型

    使用场景

    指定VPC(推荐)

    与指定的VPC连通的私有网络。

    • 同一VPC(推荐):Hologres实例和实时计算Flink版工作空间在同一VPC下可直接连通。

    • 不同VPC:Hologres实例和实时计算Flink版工作空间在不同的VPC下,要访问跨VPC资源则需要进行网络设置,具体操作请参见VPC服务

    公网

    公共网络,无网络访问限制的场景,相较于内网在延迟方面存在不确定性。

    您需要通过NAT网关实现VPC网络与公网互通,具体操作请参见配置公网访问

  3. (可选)在Flink控制台测试网络连通性,具体操作可参见如何进行网络探测?

    • 网络探测成功:获取的Endpoint地址正确。

    • 网络探测失败:请确认Hologres实例和实时计算Flink版工作空间是否跨VPC或者需要公网访问,根据情况完成对应的配置后才能正常访问,具体请参见VPC服务配置公网访问

如何访问公网?

公网访问相较于内网在延迟方面存在不确定性。如果业务场景对网络延迟和稳定性要求较高,建议优先选择内网访问。

阿里云提供的NAT网关可以实现VPC网络与公网互通,以满足实时计算Flink版需要访问公网数据源的需求,具体操作详情请参见公网数据源

如何查看公网带宽情况?

在使用公网读取或写入作业,作业各项指标都正常且作业没有反压的情况下,可以通过公网带宽来排查是否是有瓶颈问题。操作步骤如下:

  1. 在实时计算Flink版控制台的工作空间详情中获取专有网络ID

  2. 在专有网络控制台,单击目标专有网络ID。

  3. 资源管理里,单击公网NAT网关数字。

    说明

    如果公网NAT网关数字为0,需要您创建公网NAT网关,具体操作详情请参见公网 NAT 网关

  4. 单击公网NAT网关实例ID。

  5. 绑定的弹性公网页签,单击实例名称。

  6. 公网访问 > 弹性公网IP页面,单击监控运维查看公网带宽信息。

如何访问跨VPC的其他服务?

若其他服务处于规划前期或可替换时,建议直接购买与实时计算Flink版相同VPC的服务;或者释放当前Flink工作空间,重新开通一个与其他服务相同VPC的工作空间。

您可以根据实际的业务情况选择合适的方式访问跨VPC,具体方案选择请参见VPC服务

如何设置白名单?

通常,实时计算Flink版上下游服务默认拒绝外部设备的访问。因此,您需要在目标服务的白名单中添加Flink工作空间配置的虚拟交换机的网段。操作步骤详情如下:

  1. 登录实时计算控制台

  2. 在目标工作空间右侧操作列,选择更多 > 工作空间详情

  3. 工作空间详情对话框,查看工作空间虚拟交换机的网段信息。网段

  4. 在您的目标上下游服务白名单中,添加Flink工作空间虚拟交换机的网段

    例如,您要为云数据库RDS MySQL版数据库设置白名单,您可以参见设置IP白名单

    说明
    • 如果您后续新增了虚拟交换机,也需要将新增虚拟交换机的网段添加至目标服务设备的白名单中。

    • 如果您的虚拟交换机和上下游服务不在同一可用区,添加虚拟交换机网段至白名单后,网络可以连通。

如何解析Flink作业所依赖服务的域名?

如果Flink作业依赖的上下游服务使用域名访问,迁移至实时计算Flink版后可能出现域名无法解析的问题。根据是否已有自建DNS,按以下方案选择解析方式。

场景一:无自建DNS

  • 域名-IP映射不超过50

    使用实时计算Flink版的域名管理功能配置VPC内网DNS。具体操作请参见管理域名

  • 域名-IP映射超过50

    使用云解析DNS内网域名解析服务配置VPC内网DNS,并将Flink工作空间绑定的VPC添加至生效范围。

场景二:已有自建DNS且能正常解析域名

根据Flink工作空间绑定的VPC与自建DNS服务之间的网络连通情况,选择对应方案。

VPC与自建DNS网络连通
  • 方案一:使用云解析DNS转发(推荐)

    通过云解析DNS转发管理功能,将解析请求转发至自建DNS。配置时注意以下事项:

    • 创建出站终端节点时,出站VPC选择Flink工作空间所绑定的VPC。创建转发规则时,生效范围同样选择该VPC。

    • 出站终端节点创建成功后,记录所有出站流量源IP地址。在自建DNS所在网络的安全组中,将这些IP地址添加至入方向白名单,端口开放53。

  1. 方案二:通过作业模板配置DNS(仅限非JDK 11引擎)

    如果引擎版本不包含jdk-11,还可以在作业模板中配置DNS。假设自建DNS IP192.168.0.1,操作步骤如下:

    1. 登录实时计算控制台

    2. 单击目标工作空间操作列下的控制台

    3. 配置管理页面作业默认配置页签其他配置文本框,添加如下代码。

      env.java.opts: >-
        -Dsun.net.spi.nameservice.provider.1=default
        -Dsun.net.spi.nameservice.provider.2=dns,sun
        -Dsun.net.spi.nameservice.nameservers=192.168.0.1
      说明
      • 此方式仅适用于非JDK 11引擎,引擎版本包含jdk-11时无法生效。

      • 如果自建DNS有多个IP,IP之间使用英文逗号(,)分隔。

    4. 单击保存更改

    5. 在实时计算开发控制台新建作业并运行。

      • 如果仍报UnknownHostException错误,表示域名无法解析,请联系技术支持。

      • 配置自建DNS域名解析后出现作业频繁failover,且报错信息为JobManager heartbeat timeout,请参见报错:JobManager heartbeat timeout

VPC与自建DNS网络不通
  • 同一VPC:排查安全组、网络ACL等访问控制策略,定位连接不通的原因。

  • 不同VPC:通过以下产品打通跨VPC网络:

  • 自建DNS为公网DNS:需打通公网网络,包括但不限于开通Flink公网访问、在自建DNS访问白名单中添加VPC网段等。

报错:JobManager heartbeat timeout

  • 报错详情

    在配置了自建DNS域名解析后,出现作业频繁failover, 且报错信息为JobManager heartbeat timeout。

  • 报错原因

    可能是由于自建DNS的连接延迟大造成的。

  • 解决方案

    您需要在该作业中关闭对于TM的域名解析,即配置jobmanager.retrieve-taskmanager-hostname: false,该配置并不会影响作业通过域名连接外部服务。配置方法请参见如何配置自定义的作业运行参数?

为什么FlinkKafka之间的网络是连通的,但是依然会有timeout expired while fetching topic metadata的报错?

FlinkKafka之间的网络连通并不意味着能读取数据,只有Kafka Brokerbootstrap过程中返回的集群metadata中描述的Endpoint, 才可以连通FlinkKafka,并读取到Kafka的数据,详情请参见Flink-cannot-connect-to-Kafka。检查办法为:

  1. 使用zkCli.sh或者zookeeper-shell.sh工具登录Kafka使用的Zookeeper。

  2. 执行ls /brokers/ids命令列出所有的Kafka Broker ID。

  3. 使用get /brokers/ids/{your_broker_id}命令查看Broker metadata信息。

    Endpoint信息显示在listener_security_protocol_map中。

  4. 确认Flink是否可以连通该Endpoint。

    如果该Endpoint中使用了域名,请为Flink配置对应的域名解析服务。域名解析方法详情请参见如何解析Flink作业所依赖服务的域名?