更新时间:2023-12-21 gmt 08:00

公网访问-凯发k8国际娱乐官网入口

概述

公网访问是指使用外部网络访问负载,您可以给负载绑定共享型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的。

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

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

  • 服务名称:服务名称即service的名称,service是用于管理pod访问的对象。service的详细信息请参见。
  • 安装coredns:coredns插件为您的其他负载提供内部域名解析服务,如果不安装coredns则无法通过“服务名称:负载访问端口”访问负载。
  • elb实例:选择elb实例,如没有elb实例可以单击“创建共享型elb实例”去创建。

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

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

  • elb协议:即公网访问使用的通信协议,支持http、https、tcp和udp协议。
  • ingress名称:ingress是用于管理七层协议访问的对象。此处如果不配置,云容器实例会默认负载名称作为ingress名称。ingress的详细信息请参见。
  • 公网域名(选择http/https协议时可配置):通过域名访问负载,公网域名需要您自行购买,并将域名解析指向所选的elb实例弹性公网ip。
  • 证书(选择https协议时必填):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,具体创建方式请参考,下面是一个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 -n 可以查看service更新状态。

创建并更新成功后,就可以使用eip port的方式访问pod了。

约束与限制

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

添加ingress访问方式

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

  1. 登录云容器实例管理控制台,左侧导航栏中选择“网络管理 > 路由(ingress)”,在右侧页面单击“添加路由”
  2. 设置路由参数。
    • 路由名称:自定义ingress名称。
    • 命名空间:选择需要添加ingress的命名空间。
    • 负载均衡:可以将互联网访问流量自动分发到工作负载所在的多个节点上。
    • 对外端口:开放在负载均衡服务地址的端口,可任意指定。
    • 对外协议:支持http和https。若选择https,请选择密钥证书,格式说明请参见。
      • 选择https协议时,才需要创建密钥证书ingress-test-secret.yaml。创建密钥的方法请参见。
      • 同一个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对象实现,具体请参见和。

更新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。
分享:
网站地图