# 使用DNAT实现公网访问Kafka
您可以通过以下任意一个方式实现公网访问：
- 在Kafka实例控制台开启公网访问，使用弹性IP地址连接Kafka实例，具体请参考[配置Kafka实例的公网访问](https://support.huaweicloud.com/usermanual-kafka/kafka-ug-0319001.html)。
- 使用DNAT通过端口映射方式，将弹性IP地址映射到Kafka实例指定端口，实现Kafka实例对公网提供服务。
本章节主要介绍使用DNAT实现公网访问Kafka。
#### 前提条件
已购买弹性公网IP，弹性公网IP的数量与Kafka实例中代理个数相同。购买弹性IP地址的操作指导请参考[申请弹性公网IP](https://support.huaweicloud.com/usermanual-eip/eip_0008.html)。
#### 步骤一：获取Kafka实例的信息
1. 登录[Kafka控制台](https://console.huaweicloud.com/dms/?engine=kafka&locale=zh-cn#/queue/manager/newKafkaList)。
2. 在管理控制台左上角单击![](https://support.huaweicloud.com/usermanual-kafka/zh-cn_image_0143929918.png)，选择Kafka实例所在的区域。
3. 单击Kafka实例名称，进入实例详情页面。
4. 在"概览"页面的"连接信息"区域，获取并记录Kafka实例的内网连接地址。在"网络"区域，获取并记录Kafka实例所在的虚拟私有云和子网。
   
   图1Kafka实例信息   
   ![](https://support.huaweicloud.com/usermanual-kafka/zh-cn_image_0000002585610595.png "点击放大")
   
   
 
#### 步骤二：购买公网NAT网关
1. 在管理控制台左上角单击![](https://support.huaweicloud.com/usermanual-kafka/zh-cn_image_0000001143589128.png)，选择"网络 \> NAT网关"，进入"公网NAT网关"页面。
2. 单击"购买公网NAT网关"，进入"购买公网NAT网关"页面。
3. 参考[表1]设置参数，其他参数请根据实际情况填写，如果想要了解更多的参数信息，请参考[购买公网NAT网关](https://support.huaweicloud.com/usermanual-natgateway/zh-cn_topic_0150270259.html)。
   
   图2购买公网NAT网关   
   ![](https://support.huaweicloud.com/usermanual-kafka/zh-cn_image_0000001885845620.png "点击放大")
    表1创建公网NAT网关参数说明 
   | 参数名称   | 说明                                                                         |
   |:---|:---|
   | 区域    | 公网NAT网关所在的区域。与Kafka实例保持一致。                                                 |
   | 名称    | 您自定义的公网NAT网关名称。最大支持64个字符，仅支持中文、数字、字母、_（下划线）、-（中划线）、.（点号）。                |
   | 虚拟私有云 | 公网NAT网关所属的VPC。选择[获取Kafka实例的信息]中记录的虚拟私有云。 |
   | 子网     | 公网NAT网关所属VPC中的子网。选择[获取Kafka实例的信息]中记录的子网。   |
   | 企业项目  | 公网NAT网关归属的企业项目。根据实际情况选择。                                                 |
      
   
   
4. 单击"立即购买"，进入规格确认页面。
5. 确认规格无误后，如果"计费模式"选择"包年/包月"，单击"去支付"。根据界面提示信息，支付费用。如果"计费模式"选择"按需付费"，单击"提交"。
 
#### 步骤三：添加DNAT规则
1. 在"公网NAT网关"页面，在新购买的公网NAT网关后，单击"设置规则"，进入公网NAT网关详情页。
2. 在"DNAT规则"页签，单击"添加DNAT规则"，弹出"添加DNAT规则"对话框。
   
   图3公网NAT网关详情页   
   ![](https://support.huaweicloud.com/usermanual-kafka/zh-cn_image_0000001931979105.png "点击放大")
   
   
3. 参考[表2]设置参数，如果想要了解更多的参数信息，请参考[添加DNAT规则](https://support.huaweicloud.com/usermanual-natgateway/zh-cn_topic_0127489530.html)。
   
   图4添加DNAT规则   
   ![](https://support.huaweicloud.com/usermanual-kafka/zh-cn_image_0000001935377185.png "点击放大")
    表2添加DNAT规则 
   | 参数名称    | 说明                                                                         |
   |:---|:---|
   | 使用场景 | 选择"虚拟私有云"，表示虚拟私有云中的云主机将通过DNAT的方式共享弹性公网IP，为公网提供服务。                          |
   | 端口类型    | 选择"具体端口"，公网NAT网关会将以指定协议和端口访问该弹性公网IP的请求转发到目标云主机实例的指定端口上。                    |
   | 支持协议   | 选择"TCP"。                                                                   |
   | 公网IP类型 | 用来提供互联网访问的公网IP的类型。 选择"弹性公网IP"，在下拉框中选择已购买的弹性公网IP。 |
   | 公网端口   | 弹性公网IP的端口，输入"9011"。                                                          |
   | 实例类型   | 对外部公网提供服务的实例类型，选择"自定义"。                                                    |
   | 私网IP | 输入[获取Kafka实例的信息]中记录的Kafka实例的一个内网连接地址。     |
   | 私网端口    | 私网IP的端口，输入"9011"。                                                          |
      
   
   
4. 单击"确定"，完成DNAT规则的添加。
   
   DNAT规则添加成功后，在DNAT规则列表中查看此规则的状态，若"状态"为"运行中"，表示创建成功。
   
   
5. 为[获取Kafka实例的信息]中记录的其他内网连接地址创建DNAT规则，**每个DNAT规则需要设置不同的弹性公网IP** 。
   
   创建DNAT规则的具体步骤参考[2]\~[4]。
   
   
6. DNAT规则全部创建成功后，在"DNAT规则"页签，查看已创建的DNAT规则，并记录私网IP对应的弹性公网IP。
   
   图5DNAT规则列表   
   ![](https://support.huaweicloud.com/usermanual-kafka/zh-cn_image_0000001886087728.png "点击放大")
   
   
 
#### 步骤四：将弹性公网IP地址映射到内网IP地址的9011端口
1. 在管理控制台左上角单击![](https://support.huaweicloud.com/usermanual-kafka/zh-cn_image_0000002324751014.png)，选择"应用中间件 \> 分布式消息服务Kafka版"，进入Kafka总览页面。
2. 在左侧导航栏单击"Kafka实例"，进入Kafka实例列表页面。
3. 单击Kafka实例名称，进入实例详情页面。
4. 在"概览"页面的"高级配置"区域，单击"修改"。
5. 将"advertised.listeners IP/域名"改为DNAT规则中的弹性公网IP，内网连接地址和弹性公网IP的对应关系与[添加DNAT规则]中记录的对应关系保持一致，单击"保存"。
   
   图6修改advertised.listeners IP（使用DNAT访问）   
   ![](https://support.huaweicloud.com/usermanual-kafka/zh-cn_image_0000002757171627.png "点击放大")
   
   
 
#### 步骤五：验证接口连通性
参考[使用客户端连接Kafka（明文接入）](https://support.huaweicloud.com/usermanual-kafka/kafka-ug-180604020.html)或者[使用客户端连接Kafka（密文接入）](https://support.huaweicloud.com/usermanual-kafka/kafka-ug-180801001.html)，测试是否可以生产和消费消息。
测试接口连通性时，注意以下几点：
- 连接Kafka实例的地址为"advertised.listeners IP:9011"，以[图6]为例，连接Kafka实例的地址为"21.xxx.xxx.52:9011,21.xxx.xxx.16:9011,21.xxx.xxx.227:9011"。
- 在Kafka实例安全组的入方向规则中放通**9011**端口。
- 连接Kafka实例的客户端已开启公网访问功能。
 
