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

通过控制台创建ELB Ingress

前提条件

约束与限制

  • 建议其他资源不要使用Ingress自动创建的ELB实例,否则在删除Ingress时,ELB实例会被占用,导致资源残留。
  • 添加Ingress后请在CCE页面对所选ELB实例进行配置升级和维护,不可在ELB页面对配置进行更改,否则可能导致Ingress服务异常。
  • Ingress转发策略中注册的URL需与后端应用提供访问的URL一致,否则将返回404错误。
  • IPVS模式集群下,Ingress和Service使用相同ELB实例时,无法在集群内的节点和容器中访问Ingress,因为kube-proxy会在ipvs-0的网桥上挂载LB类型的Service地址,Ingress对接的ELB的流量会被ipvs-0网桥劫持。建议Ingress和Service使用不同ELB实例。
  • 独享型ELB规格必须支持应用型(HTTP/HTTPS),且网络类型必须支持私网(有私有IP地址)。
  • 同集群使用多个Ingress对接同一个ELB端口时,监听器的配置项(例如监听器关联的证书、监听器HTTP2属性等)均以首次创建监听器的Ingress配置为准。

添加ELB Ingress

本节以nginx作为工作负载并添加ELB Ingress为例进行说明。

  1. 登录CCE控制台,单击集群名称进入集群。
  2. 选择左侧导航栏的“服务”,在右侧选择“路由”页签,单击右上角“创建路由”
  3. 设置Ingress参数。

    • 名称:自定义Ingress名称,例如ingress-demo。
    • 对接Nginx:此选项只有在安装了NGINX Ingress控制器插件后才会显示。如显示了“对接Nginx”,则说明您安装了nginx-ingress插件,创建ELB Ingress时不能打开该项开关,如果打开则是使用Nginx Ingress Controller,具体请参见通过控制台创建Nginx Ingress
    • 负载均衡器:选择弹性负载均衡的类型、创建方式。

      ELB类型可选择“独享型”“共享型”。独享型ELB规格需要支持应用型(HTTP/HTTPS),且网络类型必须支持私网。

      创建方式可选择“选择已有”“自动创建”。不同创建方式的配置详情请参见表1
      表1 ELB配置

      创建方式

      配置

      选择已有

      仅支持选择与集群在同一个VPC下的ELB实例。如果没有可选的ELB实例,请单击“创建负载均衡器”跳转到ELB控制台创建。

      自动创建

      • 实例名称:请填写ELB名称。
      • 可用区(仅独享型ELB支持):可以选择在多个可用区创建负载均衡实例,提高服务的可用性。如果业务需要考虑容灾能力,建议选择多个可用区。
      • 前端子网(仅独享型ELB支持):用于分配ELB实例对外服务的IP地址。
      • 后端子网(仅独享型ELB支持):用于与后端服务建立连接的IP地址。
      • 网络型规格/应用型规格/规格(仅独享型ELB支持):
        • 固定规格:适用于业务用量较为稳定的场景,按固定规格折算收取每小时使用的容量费用。
      • 弹性公网IP:选择“自动创建”时,可配置公网带宽的计费方式及带宽大小。
    • 监听器配置:Ingress为负载均衡器配置监听器,监听器对负载均衡器上的请求进行监听,并分发流量。配置完成后ELB实例侧将会创建对应的监听器,名称默认为k8s_<协议类型>_<端口号>,例如“k8s_HTTP_80”。
      • 前端协议:支持HTTP和HTTPS。
      • 对外端口:开放在负载均衡服务地址的端口,可任意指定。
      • 证书来源:支持TLS密钥和ELB服务器证书。
      • 服务器证书:负载均衡器创建HTTPS协议监听时需要绑定证书,以支持HTTPS数据传输加密认证。
        • TLS密钥:创建密钥证书的方法请参见创建密钥
        • ELB服务器证书:使用在ELB服务中创建的证书。

        同一个ELB实例的同一个端口配置HTTPS时,一个监听器只支持配置一个密钥证书。若使用两个不同的密钥证书将两个Ingress添加到同一个ELB下的同一个监听器,ELB侧实际只生效最先添加的证书。

      • SNI:SNI(Server Name Indication)是TLS的扩展协议,在该协议下允许同一个IP地址和端口号下对外提供多个基于TLS的访问域名,且不同的域名可以使用不同的安全证书。开启SNI后,允许客户端在发起TLS握手请求时就提交请求的域名信息。负载均衡收到TLS请求后,会根据请求的域名去查找证书:若找到域名对应的证书,则返回该证书认证鉴权;否则,返回缺省证书(服务器证书)认证鉴权。
        • 当选择HTTPS协议时,才支持配置“SNI”选项。
        • 该功能仅支持1.15.11及以上版本的集群。
        • 用于SNI的证书需要指定域名,每个证书只能指定一个域名。支持泛域名证书。
        • 对接到同一个ELB端口的ingress,请勿配置域名相同但证书不同的SNI,否则将会被覆盖。
      • 安全策略:安全策略包含HTTPS可选的TLS协议版本和配套的加密算法套件。

        关于安全策略的详细说明,请参见ELB用户指南。

        • 选择HTTPS协议时,才支持配置“安全策略”选项。
        • 该功能仅支持1.17.9及以上版本的集群。
    • 转发策略配置:请求的访问地址与转发规则匹配时(转发规则由域名、URL组成,例如:10.117.117.117:80/helloworld),此请求将被转发到对应的目标Service处理。单击按钮可添加多条转发策略。
      • 域名:实际访问的域名地址。请确保所填写的域名已注册并备案,一旦配置了域名规则后,必须使用域名访问。
      • URL匹配规则:
        • 前缀匹配:例如映射URL为/healthz,只要符合此前缀的URL均可访问。例如/healthz/v1,/healthz/v2。
        • 精确匹配:表示只有URL完全匹配时,访问才能生效。例如映射URL为/healthz,则必须为此URL才能访问。
        • 正则匹配:按正则表达式方式匹配URL。例如正则表达式为/[A-Za-z0-9_.-]+/test。只要符合此规则的URL均可访问,例如/abcA9/test,/v1-Ab/test。正则匹配规则支持POSIX与Perl两种标准。
      • URL:需要注册的访问路径,例如:/healthz。

        此处添加的访问路径要求后端应用内存在相同的路径,否则转发无法生效。

        例如,Nginx应用默认的Web访问路径为“/usr/share/nginx/html”,在为Ingress转发策略添加“/test”路径时,需要应用的Web访问路径下也包含相同路径,即“/usr/share/nginx/html/test”,否则将返回404。

      • 目标服务名称:请选择已有Service或新建Service。页面列表中的查询结果已自动过滤不符合要求的Service。
      • 目标服务访问端口:可选择目标Service的访问端口。
      • 负载均衡配置:
        • 分配策略:可选择加权轮询算法、加权最少连接或源IP算法。
          • 加权轮询算法:根据后端服务器的权重,按顺序依次将请求分发给不同的服务器。它用相应的权重表示服务器的处理性能,按照权重的高低以及轮询方式将请求分配给各服务器,相同权重的服务器处理相同数目的连接数。常用于短连接服务,例如HTTP等服务。
          • 加权最少连接:最少连接是通过当前活跃的连接数来估计服务器负载情况的一种动态调度算法。加权最少连接就是在最少连接数的基础上,根据服务器的不同处理能力,给每个服务器分配不同的权重,使其能够接受相应权值数的服务请求。常用于长连接服务,例如数据库连接等服务。
          • 源IP算法:将请求的源IP地址进行Hash运算,得到一个具体的数值,同时对后端服务器进行编号,按照运算结果将请求分发到对应编号的服务器上。这可以使得对不同源IP的访问进行负载分发,同时使得同一个客户端IP的请求始终被派发至某特定的服务器。该方式适合负载均衡无cookie功能的TCP协议。
        • 会话保持类型:默认不启用。支持以下类型:
          • 负载均衡器cookie:同时需填写“会话保持时间”,范围为1-1440分钟。
          • 分配策略使用源IP算法时,不支持设置会话保持。
          • 1.21 以下集群的独享型负载均衡无法使用会话保持能力,如果需要使用会话保持能力,推荐使用共享型负载均衡。
        • 健康检查:设置负载均衡的健康检查配置,启用时支持以下配置。

          参数

          说明

          协议

          当目标服务端口配置协议为TCP时,支持TCP/HTTP协议。

          • 检查路径(仅HTTP健康检查协议支持):指定健康检查的URL地址。检查路径只能以/开头,长度范围为1-80。

          端口

          健康检查默认使用业务端口(Service的NodePort或容器端口)作为健康检查的端口;您也可以重新指定端口用于健康检查,重新指定端口会为服务增加一个名为cce-healthz的服务端口配置。

          • 节点端口:使用共享型负载均衡或不关联ENI实例时,节点端口作为健康检查的检查端口;如不指定将随机一个端口。取值范围为30000-32767。
          • 容器端口:使用独享型负载均衡关联ENI实例时,容器端口作为健康检查的检查端口。取值范围为1-65535。

          检查周期(秒)

          每次健康检查响应的最大间隔时间,取值范围为1-50。

          超时时间(秒)

          每次健康检查响应的最大超时时间,取值范围为1-50。

          最大重试次数

          健康检查最大的重试次数,取值范围为1-10。

      • 操作:可单击“删除”按钮删除该配置。
    • 注解:Ingress有一些CCE定制的高级功能,通过注解annotations实现。在使用kubectl创建时,会用到注解,具体请参见添加Ingress-自动创建ELB添加Ingress-对接已有ELB

  4. 配置完成后,单击“确定”。创建完成后,在Ingress列表可查看到已添加的Ingress。

    在ELB控制台可查看通过CCE自动创建的ELB,名称默认为“cce-lb-ingress.UID”。单击ELB名称进入详情页,在“监听器”页签下即可查看Ingress对应的路由设置,包括URL、监听器端口以及对应的后端服务器组端口。

    Ingress创建后请在CCE页面对所选ELB实例进行配置升级和维护,不要在ELB控制台对ELB实例进行维护,否则可能导致Ingress服务异常。

  5. 访问工作负载(例如名称为defaultbackend)的“/healthz”接口。

    1. 获取工作负载“/healthz”接口的访问地址。访问地址由负载均衡实例IP、对外端口、映射URL组成,例如:10.**.**.**:80/healthz。
    2. 在浏览器中输入“/healthz”接口的访问地址,如:http://10.**.**.**:80/healthz,即可成功访问工作负载,如图1
      图1 访问defaultbackend“/healthz”接口