计算
弹性云服务器 ECS
Flexus云服务
裸金属服务器 BMS
弹性伸缩 AS
镜像服务 IMS
专属主机 DeH
函数工作流 FunctionGraph
云手机服务器 CPH
Huawei Cloud EulerOS
网络
虚拟私有云 VPC
弹性公网IP EIP
虚拟专用网络 VPN
弹性负载均衡 ELB
NAT网关 NAT
云专线 DC
VPC终端节点 VPCEP
云连接 CC
企业路由器 ER
企业交换机 ESW
全球加速 GA
安全与合规
安全技术与应用
Web应用防火墙 WAF
企业主机安全 HSS
云防火墙 CFW
安全云脑 SecMaster
DDoS防护 AAD
数据加密服务 DEW
数据库安全服务 DBSS
云堡垒机 CBH
数据安全中心 DSC
云证书管理服务 CCM
边缘安全 EdgeSec
威胁检测服务 MTD
CDN与智能边缘
内容分发网络 CDN
CloudPond云服务
智能边缘云 IEC
迁移
主机迁移服务 SMS
对象存储迁移服务 OMS
云数据迁移 CDM
迁移中心 MGC
大数据
MapReduce服务 MRS
数据湖探索 DLI
表格存储服务 CloudTable
云搜索服务 CSS
数据接入服务 DIS
数据仓库服务 GaussDB(DWS)
数据治理中心 DataArts Studio
数据可视化 DLV
数据湖工厂 DLF
湖仓构建 LakeFormation
企业应用
云桌面 Workspace
应用与数据集成平台 ROMA Connect
云解析服务 DNS
专属云
专属计算集群 DCC
IoT物联网
IoT物联网
设备接入 IoTDA
智能边缘平台 IEF
用户服务
账号中心
费用中心
成本中心
资源中心
企业管理
工单管理
国际站常见问题
ICP备案
我的凭证
支持计划
客户运营能力
合作伙伴支持计划
专业服务
区块链
区块链服务 BCS
Web3节点引擎服务 NES
解决方案
SAP
高性能计算 HPC
视频
视频直播 Live
视频点播 VOD
媒体处理 MPC
实时音视频 SparkRTC
数字内容生产线 MetaStudio
存储
对象存储服务 OBS
云硬盘 EVS
云备份 CBR
存储容灾服务 SDRS
高性能弹性文件服务 SFS Turbo
弹性文件服务 SFS
云硬盘备份 VBS
云服务器备份 CSBS
数据快递服务 DES
专属分布式存储服务 DSS
容器
云容器引擎 CCE
容器镜像服务 SWR
应用服务网格 ASM
华为云UCS
云容器实例 CCI
管理与监管
云监控服务 CES
统一身份认证服务 IAM
资源编排服务 RFS
云审计服务 CTS
标签管理服务 TMS
云日志服务 LTS
配置审计 Config
资源访问管理 RAM
消息通知服务 SMN
应用运维管理 AOM
应用性能管理 APM
组织 Organizations
优化顾问 OA
IAM 身份中心
云运维中心 COC
资源治理中心 RGC
应用身份管理服务 OneAccess
数据库
云数据库 RDS
文档数据库服务 DDS
数据管理服务 DAS
数据复制服务 DRS
云数据库 GeminiDB
云数据库 GaussDB
分布式数据库中间件 DDM
数据库和应用迁移 UGO
云数据库 TaurusDB
人工智能
人脸识别服务 FRS
图引擎服务 GES
图像识别 Image
内容审核 Moderation
文字识别 OCR
AI开发平台ModelArts
图像搜索 ImageSearch
对话机器人服务 CBS
华为HiLens
视频智能分析服务 VIAS
语音交互服务 SIS
应用中间件
分布式缓存服务 DCS
API网关 APIG
微服务引擎 CSE
分布式消息服务Kafka版
分布式消息服务RabbitMQ版
分布式消息服务RocketMQ版
多活高可用服务 MAS
事件网格 EG
企业协同
华为云会议 Meeting
云通信
消息&短信 MSGSMS
云生态
合作伙伴中心
云商店
开发者工具
SDK开发指南
API签名指南
Terraform
华为云命令行工具服务 KooCLI
其他
产品价格详情
系统权限
管理控制台
客户关联华为云合作伙伴须知
消息中心
公共问题
开发与运维
应用管理与运维平台 ServiceStage
软件开发生产线 CodeArts
需求管理 CodeArts Req
部署 CodeArts Deploy
性能测试 CodeArts PerfTest
编译构建 CodeArts Build
流水线 CodeArts Pipeline
制品仓库 CodeArts Artifact
测试计划 CodeArts TestPlan
代码检查 CodeArts Check
代码托管 CodeArts Repo
云应用引擎 CAE
开天aPaaS
云消息服务 KooMessage
云手机服务 KooPhone
云空间服务 KooDrive

公网访问

更新时间:2024-07-04 GMT+08:00

概述

公网访问是指使用外部网络访问负载,您可以给负载绑定共享型ELB实例(ELB必须与负载在同一个VPC内),通过ELB实例访问负载,当前外部访问支持四层和七层负载公网访问。

  • 四层公网访问支持TCP和UDP两种协议,设置完成后可以通过“elb公网ip:elb端口”访问负载。
  • 七层公网访问支持HTTP和HTTPS两种协议访问,设置完成后,可以通过“http://公网域名(或elb 公网ip):elb端口/映射路径”访问负载。

Service是基于四层TCP和UDP协议转发的,Ingress可以基于七层的HTTP和HTTPS协议转发,可以通过域名和路径做到更细粒度的划分,如下图所示。

图1 Ingress-Service

下图是一个通过HTTP协议访问负载的示例。

图2 公网访问

约束与限制

使用弹性公网IP(Elastic IP,简称EIP)前,请先了解EIP的使用限制

配置公网访问-创建工作负载时设置

在云容器实例中,您只需要在创建负载时选择“公网访问”,然后配置如下参数。

  • 安装coredns:coredns插件为您的其他负载提供内部域名解析服务,如果不安装coredns则无法通过“服务名称:负载访问端口”访问负载。
  • ELB实例:选择ELB实例,如没有ELB实例可以单击“创建共享型ELB实例”去创建。
    须知:

    此处创建的ELB需要与负载所在命名空间在同一个VPC内。

    CCI暂时不支持独享型负载均衡,建议您创建共享型ELB实例。

  • ELB协议:即公网访问使用的通信协议,支持HTTP、HTTPS、TCP和UDP协议。
  • Ingress名称:Ingress是用于管理七层协议访问的对象。此处如果不配置,云容器实例会默认负载名称作为Ingress名称。Ingress的详细信息请参见https://support.huaweicloud.com/intl/zh-cn/devg-cci/cci_05_0008.html
  • 公网域名(选择HTTP/HTTPS协议时可配置):通过域名访问负载,公网域名需要您自行购买,并将域名解析指向所选的ELB实例弹性公网IP。
  • 证书(选择HTTPS协议时必填):SSL证书的导入方法请参见SSL证书
  • ELB端口:选择使用的ELB访问的具体协议和端口。
  • 负载端口协议:访问负载的通信协议,可选择TCP或UDP,如果ELB协议选择为HTTP/HTTPS,则负载端口协议为TCP。
  • 负载端口配置:
    • 负载访问端口:负载提供的访问端口。
    • 容器端口:容器监听的端口,负载访问端口映射到容器端口。
  • HTTP路由配置
    • 映射路径:URL访问的路径,必须以“/”开头,如“/api/web”,也可以是根路径“/”
    • 负载访问端口:前面设置的负载访问端口。

如下图所示,假如ELB实例的IP地址为“10.10.10.10”,则通过“http://10.10.10.10:6071/”就可以从公网访问到负载。

图3 配置公网访问参数

配置公网访问-工作负载创建完成后设置

在工作负载创建完成后对Service进行配置,此配置对工作负载状态无影响,且实时生效。具体操作如下:

  1. 登录云容器实例管理控制台,左侧导航栏中选择“网络管理 > 服务(Service)”,在右侧页面单击“添加服务”
  2. “添加服务”页面,访问类型选择“负载均衡 LoadBalancer”
  3. 设置弹性负载均衡访问参数。

    • 服务名称:服务名称即Service的名称,Service是用于管理Pod访问的对象。
    • 命名空间:工作负载所在命名空间。
    • 关联工作负载:要添加Service的工作负载。
    • 负载均衡:选择公网ELB实例,如没有ELB实例可以单击“创建ELB实例”去创建。
      须知:

      此处创建的ELB需要与负载所在命名空间在同一个VPC内。

      CCI暂时不支持独享型负载均衡,建议您创建共享型ELB实例。

    • 负载端口配置
      • 协议:访问负载的通信协议,可选择TCP或UDP。
      • 访问端口:负载提供的访问端口。
      • 容器端口:容器监听的端口,负载访问端口映射到容器端口。

  4. 单击“提交”,工作负载已添加“负载均衡 LoadBalancer”的服务。

添加DNAT访问方式

工作负载创建后,如果想要使用公网访问Pod,除了使用ELB,还可以添加DNAT访问方式。具体操作如下:

  1. 创建一个NAT网关。
  2. 使用kubectl创建DNAT类型的Service,具体创建方式请参考Service,下面是一个DNAT类型的Service示例:

    apiVersion: v1
    kind: Service
    metadata:
      name: nginx
      namespace: default  # 用户命名空间,默认为default
      annotations:
        kubernetes.io/elb.class: dnat       # 类型DNAT
        kubernetes.io/natgateway.id: 4b8cda3d-3543-4ebd-a55e-ca610b3b3c43 # NAT网关ID
    spec:
      loadBalancerIP: 100.85.218.195      # DNAT使用的 EIP
      selector:
        app: nginx
      ports:
      - name: service0
        targetPort: 80     # Pod 暴露的端口
        port: 8080         # DNAT访问端口
        protocol: TCP
      type: LoadBalancer   # Service的类型

  1. 创建成功后,使用kubectl describe <service_name> -n <service_namespace> 可以查看Service更新状态。

创建并更新成功后,就可以使用EIP+Port的方式访问Pod了。

约束与限制

  1. 由于一条DNAT规则只能转发一个后端,因此一条DNAT Service也只能关联一个后端Pod,超过一个时DNAT规则绑定失败。
  2. 一个 NAT 网关只能添加 200 条 DNAT 规则,具体限制参考NAT网关文档。
  3. DNAT Service创建后前端可以查看到信息,但是请不要在前端进行修改设置。
  4. 子网使用非默认路由需要在对应路由表中添加NAT网关的路由。
  5. 如果在SNAT规则使用的网关下配置DNAT Service,请确保DNAT Service使用的EIP与SNAT规则绑定的EIP不同。
  6. NAT网关的使用,具体可参考NAT网关文档。

添加Ingress访问方式

您可以在工作负载创建完成后为其添加Ingress类型的访问,此配置对工作负载状态无影响,且实时生效。具体操作如下:

  1. 登录云容器实例管理控制台,左侧导航栏中选择“网络管理 > 路由(Ingress)”,在右侧页面单击“添加路由”
  2. 设置路由参数。

    • 路由名称:自定义Ingress名称。
    • 命名空间:选择需要添加Ingress的命名空间。
    • 负载均衡:可以将互联网访问流量自动分发到工作负载所在的多个节点上。
    • 对外端口:开放在负载均衡服务地址的端口,可任意指定。
    • 对外协议:支持HTTP和HTTPS。如果选择HTTPS,请选择密钥证书,格式说明请参见证书格式
      说明:
      • 选择HTTPS协议时,才需要创建密钥证书ingress-test-secret.yaml。创建密钥的方法请参见使用Secret
      • 同一个ELB实例的同一个端口配置HTTPS时,一个监听器只支持配置一个密钥证书。如果使用两个不同的密钥证书将两个Ingress添加到同一个ELB下的同一个监听器,ELB侧实际只生效最初的证书。
    • 域名:可选填。实际访问的域名地址,该域名需用户购买,并确保所填域名能解析到所选负载均衡实例的服务地址。一旦配置了域名规则,则必须使用域名访问。
    • 路由配置:
      • 路由匹配规则:当前仅支持前缀路由匹配。

        前缀路由匹配:例如映射URL为/healthz,只要符合此前缀的URL均可访问。例如/healthz/v1,/healthz/v2。

      • 映射URL:需要注册的访问路径。
      • 服务名称:选择需要添加Ingress的服务。
      • 服务端口:容器镜像中容器实际监听端口,需用户确定。

  3. 配置完成后,单击“提交”

    创建完成后,在Ingress列表可查看到已创建成功的Ingress。

如何处理公网无法访问

  1. 公网能正常访问的前提是负载已处于运行中状态,如果您的负载处于未就绪或异常状态,公网访问将无法正常使用。
  2. 从负载开始创建到公网可以正常访问可需要1分钟到3分钟的时间,在此时间内网络路由尚未完成配置,请稍作等待。
  3. 负载创建3分钟以后仍然无法访问。单击创建的负载进入详情页,在详情页单击访问配置下面的“事件”标签,查看访问事件,查看是否有告警事件。如下两种常见的事件。
    • Listener port is repeated:ELB监听器端口重复,是由于之前发布公网访问的负载,删除之后立刻创建使用相同ELB端口的公网访问负载,ELB实际删除端口需要一定的时间,因此首次创建失败,可以选择删除负载重新创建,也可以等待5-10分钟,公网访问可正常使用。
    • Create listener failed:创建ELB监听器失败,创建监听器失败的原因一般是超过配额限度,请选择其他配额充足的ELB实例。
  4. 负载创建3分钟以后仍然无法访问,且无告警事件,可能原因是用户配置的容器端口实际上没有相应进程在监听,目前云容器实例服务无法检测出该类使用异常,需要您排查镜像是否有监听该容器端口。如果容器端口监听正确,此时无法访问的原因可能为ELB实例本身有问题,请排查ELB实例状态。

使用kubectl实现公网访问

公网访问需要配合Service和Ingress两个Kubernetes对象实现,具体请参见ServiceIngress

更新Service

您可以在添加完Service后,更新此Service的端口配置。操作如下:

  1. 登录云容器实例管理控制台,左侧导航栏中选择“网络管理 > 服务(Service)”,在Service页面中,选择对应的命名空间,单击需要更新端口配置的Service后的“更新”。
  2. 更新负载均衡参数:

    • 命名空间:工作负载所在命名空间,更新时此处不可修改。
    • 关联工作负载:要添加Service的工作负载,更新时此处不可修改。
    • 服务名称:服务名称即Service的名称,Service是用于管理Pod访问的对象,更新时此处不可修改。
    • 负载均衡:更新时此处不可修改。
    • 端口配置
      • 协议:访问负载的通信协议,可选择TCP或UDP。
      • 访问端口:负载提供的访问端口。
      • 容器端口:容器监听的端口,负载访问端口映射到容器端口。

  3. 单击“提交”。工作负载已更新Service。

更新Ingress

您可以在添加完Ingress后,更新此Ingress的端口、域名和路由配置。操作如下:

  1. 登录云容器实例管理控制台,左侧导航栏中选择“网络管理 > 路由(Ingress)”,选择对应的命名空间,单击待更新Ingress后的“更新”。
  2. “更新路由”页面,更新如下参数:

    • 对外端口:开放在负载均衡服务地址的端口,可任意指定。
    • 域名:可选填。实际访问的域名地址,该域名需用户购买,并确保所填域名能解析到所选负载均衡实例的服务地址。一旦配置了域名规则,则必须使用域名访问。
    • 路由配置:可单击“添加映射”增加新的路由配置。
      • 路由匹配规则:当前仅支持前缀路由匹配。

        前缀路由匹配:例如映射URL为/healthz,只要符合此前缀的URL均可访问。例如/healthz/v1,/healthz/v2。

      • 映射URL:需要注册的访问路径,例如:/healthz。
      • 服务名称:选择需要更新Ingress的服务。
      • 服务端口:容器镜像中容器实际监听端口,需用户确定。

  3. 单击“提交”,工作负载已更新Ingress。

我们使用cookie来确保您的高速浏览体验。继续浏览本站,即表示您同意我们使用cookie。 详情

文档反馈

文档反馈

意见反馈

0/500

标记内容

同时提交标记内容