# 通过控制台创建ELB Ingress
#### 前提条件
- Ingress为后端工作负载提供网络访问，因此集群中需提前部署可用的工作负载。若您无可用工作负载，可参考[创建工作负载](https://support.huaweicloud.com/usermanual-cce-autopilot/cce_11_0673.html)部署工作负载。
- 为上述工作负载配置Service。
 
#### 注意事项
- 建议其他资源不要使用Ingress自动创建的ELB实例，否则在删除Ingress时，ELB实例会被占用，导致资源残留。
- 添加Ingress后请在CCE页面对所选ELB实例进行配置升级和维护，不可在ELB页面对配置进行更改，否则可能导致Ingress服务异常。
- Ingress转发策略中注册的URL需与后端应用提供访问的URL一致，否则将返回404错误。
- 独享型ELB规格必须支持应用型（HTTP/HTTPS），且网络类型必须支持私网（有私有IP地址）。
- 同集群使用多个Ingress对接同一个ELB端口时，监听器的配置项（例如监听器关联的证书、监听器HTTP2属性等）均以第一个Ingress配置为准。
 
#### 添加ELB Ingress
本节以nginx作为工作负载并添加ELB Ingress为例进行说明。
1. 登录[CCE控制台](https://console.huaweicloud.com/cce2.0/?#/cce/cluster/list)，单击集群名称进入集群。
2. 选择左侧导航栏的"服务"，在右侧选择"路由"页签，单击右上角"创建路由"。
3. 设置Ingress参数。 
   - **名称：**自定义Ingress名称，例如ingress-demo。
   
   - **命名空间**：ELB Ingress所在命名空间。
   
   - **负载均衡器：** 选择弹性负载均衡的类型、创建方式。
     ELB类型仅支持"独享型"。独享型ELB支持应用型（HTTP/HTTPS），且网络类型必须支持私网。
     创建方式可选择"选择已有"或"自动创建"。不同创建方式的配置详情请参见[表1]。
      表1ELB配置 
     | 创建方式   | 配置                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
     |:---|:---|
     | 选择已有   | 仅支持选择与集群在同一个VPC下的ELB实例。如果没有可选的ELB实例，请单击"创建负载均衡器"跳转到[ELB控制台](https://console.huaweicloud.com/vpc/#/elb/list/grid)创建。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
     | 自动创建 | - 实例名称：请填写ELB名称。  - 企业项目：该参数仅对开通企业项目的企业客户账号显示。企业项目是一种云资源管理方式，企业项目管理服务提供统一的云资源按项目管理，以及项目内的资源管理、成员管理。  - 可用区：可以选择在多个可用区创建负载均衡实例，提高服务的可用性。如果业务需要考虑容灾能力，建议选择多个可用区。  - 前端子网：用于分配ELB实例对外服务的IP地址。  - 后端子网：用于与后端服务建立连接的IP地址。  - 网络型规格/应用型规格/规格： - 弹性规格：适用于业务用量波动较大的场景，按实际使用量收取每小时使用的容量费用。  - 固定规格：适用于业务用量较为稳定的场景，按固定规格折算收取每小时使用的容量费用。    - 弹性公网IP：选择"自动创建"时，可配置公网带宽的计费方式及带宽大小。  - 资源标签：通过为资源添加标签，可以对资源进行自定义标记，实现资源的分类。您可以在TMS中创建"预定义标签"，预定义标签对所有支持标签功能的服务资源可见，通过使用预定义标签可以提升标签创建和迁移效率。v1.27.5-r0、v1.28.3-r0及以上版本集群支持。   |
        
     
   
   - **监听器配置：** Ingress为负载均衡器配置监听器，监听器对负载均衡器上的请求进行监听，并分发流量。配置完成后ELB实例侧将会创建对应的监听器，名称默认为k8s_\<协议类型\>_\<端口号\>，例如"k8s_HTTP_80"。
     - 前端协议：ELB监听器的前端协议，是客户端与负载均衡监听器建立流量分发连接所使用的协议。
     
     - 对外端口：开放在负载均衡服务地址的端口，可任意指定。
     
     - 访问控制：
       - 继承ELB已有配置：CCE不对ELB侧已有的访问控制进行修改。
       
       - 允许所有IP访问：不设置访问控制。
       
       - 白名单：仅所选IP地址组可以访问ELB地址。
       
       - 黑名单：所选IP地址组无法访问ELB地址。
        
     
     - 证书来源：支持TLS密钥和ELB服务器证书。
       - TLS密钥：创建密钥证书的方法请参见[创建密钥](https://support.huaweicloud.com/usermanual-cce-autopilot/cce_11_0153.html)。
       
       - ELB服务器证书：使用在ELB服务中创建的证书。
        
     
     - SSL解析方式：证书来源选择"ELB服务器证书"时支持该配置。在v1.28.10-r0、v1.31.10-r0、v1.32.6-r0及以上版本的集群支持。
       - 单向认证：仅进行服务器端认证。如需认证客户端身份，请选择双向认证。
       
       - 双向认证：双向认证需要负载均衡实例与访问用户互相提供身份认证，从而允许通过认证的用户访问负载均衡实例，后端服务器无需额外配置双向认证。
        
     
     - CA证书：SSL解析方式选择"双向认证"时需要添加CA证书，用于认证客户端身份。CA证书又称客户端CA公钥证书，用于验证客户端证书的签发者；在开启HTTPS双向认证功能时，只有当客户端能够出具指定CA签发的证书时，HTTPS连接才能成功。
     
     - 服务器证书：负载均衡器创建HTTPS协议监听时需要绑定证书，以支持HTTPS数据传输加密认证。
       ![](https://support.huaweicloud.com/usermanual-cce-autopilot/public_sys-resources/note_3.0-zh-cn.png)
       同一个ELB实例的同一个端口配置HTTPS时，一个监听器只支持配置一个密钥证书。若使用两个不同的密钥证书将两个Ingress添加到同一个ELB下的同一个监听器，ELB侧实际只生效最先添加的证书。
       
     
     - SNI：SNI（Server Name Indication）是TLS的扩展协议，在该协议下允许同一个IP地址和端口号下对外提供多个基于TLS的访问域名，且不同的域名可以使用不同的安全证书。开启SNI后，允许客户端在发起TLS握手请求时就提交请求的域名信息。负载均衡收到TLS请求后，会根据请求的域名去查找证书：若找到域名对应的证书，则返回该证书认证鉴权；否则，返回缺省证书（服务器证书）认证鉴权。
       ![](https://support.huaweicloud.com/usermanual-cce-autopilot/public_sys-resources/note_3.0-zh-cn.png)
       - 当选择HTTPS协议时，才支持配置"SNI"选项。
       
       
       
       - 用于SNI的证书需要指定域名，每个证书只能指定一个域名。支持泛域名证书。
         
     
     - 安全策略：安全策略包含HTTPS可选的TLS协议版本和配套的加密算法套件。 关于安全策略的详细说明，请参见[安全策略](https://support.huaweicloud.com/usermanual-elb/elb_ug_jt_0022.html)。
       ![](https://support.huaweicloud.com/usermanual-cce-autopilot/public_sys-resources/note_3.0-zh-cn.png)
       选择HTTPS协议时，才支持配置"安全策略"选项。
       
     
     - 后端协议： 当[监听器配置]为HTTP协议时，仅可选择"HTTP"。
       当[监听器配置]为HTTPS协议时，可选择"HTTP"、"HTTPS"或"GRPC"。选择GRPC协议时需开启HTTP/2，系统将自动为您添加**kubernetes.io/elb.http2-enable:true**注解。
       
     
     - 高级配置：
       
       | 配置                | 说明                                                                                                                                                                                                                                                                               | 使用限制                                                                              |
       |:---|:---|:---|
       | 获取监听器端口号             | 开启后可以将ELB实例的监听端口从报文的HTTP头中带到后端云服务器。                                                                                                                                                                                                                                            | 独享型ELB实例支持配置。                                                                   |
       | 获取客户端请求端口号         | 开启后可以将客户端的源端口从报文的HTTP头中带到后端云服务器。                                                                                                                                                                                                                                                 | 独享型ELB实例支持配置。                                                                  |
       | 重写X-Forwarded-Host | 开启后将以客户端请求头的Host重写X-Forwarded-Host传递到后端云服务器。                                                                                                                                                                                                                                   | 独享型ELB实例支持配置。                                                                   |
       | 空闲超时时间              | 客户端连接空闲超时时间。在超过空闲超时时间一直没有请求， 负载均衡会暂时中断当前连接，直到下一次请求时重新建立新的连接。                                                                                                                                                                                                                       | -                                                                              |
       | 请求超时时间             | 等待客户端请求超时时间。包括两种情况： - 读取整个客户端请求头的超时时长，如果客户端未在超时时长内发送完整个请求头，则请求将被中断。  - 两个连续body体的数据包到达LB的时间间隔，超出请求超时时间将会断开连接。   | 仅支持协议为HTTP/HTTPS的监听器。                                                           |
       | 响应超时时间              | 等待后端服务器响应超时时间。请求转发后端服务器后，在等待超过响应超时时间没有响应，负载均衡将终止等待，并返回 HTTP504错误码。                                                                                                                                                                                                            | 仅支持协议为HTTP/HTTPS的监听器。                                                            |
       | 开启HTTP2             | 客户端与LB之间的HTTPS请求的HTTP2功能的开启状态。 开启后，可提升客户端与LB间的访问性能，但LB与后端服务器间仍采用HTTP1.X协议。                                                                                                                                                                                                      | 当[监听器配置]为HTTPS协议时支持配置。 |
          
       
      
   
   - **转发策略配置：** 请求的访问地址与转发规则匹配时（转发规则由域名、对外端口、URL组成，例如：10.117.117.117:80/helloworld），此请求将被转发到对应的目标Service处理。单击![](https://support.huaweicloud.com/usermanual-cce-autopilot/zh-cn_image_0000001760378693.png "点击放大")按钮可添加多条转发策略。
     - 域名：实际访问的域名地址，不配置时可通过IP地址访问Ingress。请确保所填写的域名已注册并备案，一旦配置了域名规则后，必须使用域名访问。
     
     - 路径匹配规则：
       - 前缀匹配：例如映射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两种标准。
        
     
     - 路径：需要注册的访问路径，例如：/healthz。
       ![](https://support.huaweicloud.com/usermanual-cce-autopilot/public_sys-resources/note_3.0-zh-cn.png)
       此处添加的访问路径要求后端应用内存在相同的路径，否则转发无法生效。
       例如，Nginx应用默认的Web访问路径为"/usr/share/nginx/html"，在为Ingress转发策略添加"/test"路径时，需要应用的Web访问路径下也包含相同路径，即"/usr/share/nginx/html/test"，否则将返回404。
       
     
     - 目标服务名称：请选择已有Service，页面列表中的查询结果已自动过滤不符合要求的Service。
     
     - 目标服务访问端口：可选择目标Service的访问端口。
     
     - 负载均衡配置：
       - 分配策略：可选择加权轮询算法、加权最少连接或源IP算法。
         ![](https://support.huaweicloud.com/usermanual-cce-autopilot/public_sys-resources/note_3.0-zh-cn.png)
         - 加权轮询算法：根据后端服务器的权重，按顺序依次将请求分发给不同的服务器。它用相应的权重表示服务器的处理性能，按照权重的高低以及轮询方式将请求分配给各服务器，相同权重的服务器处理相同数目的连接数。常用于短连接服务，例如HTTP等服务。
         
         - 加权最少连接：最少连接是通过当前活跃的连接数来估计服务器负载情况的一种动态调度算法。加权最少连接就是在最少连接数的基础上，根据服务器的不同处理能力，给每个服务器分配不同的权重，使其能够接受相应权值数的服务请求。常用于长连接服务，例如数据库连接等服务。
         
         - 源IP算法：将请求的源IP地址进行Hash运算，得到一个具体的数值，同时对后端服务器进行编号，按照运算结果将请求分发到对应编号的服务器上。这可以使得对不同源IP的访问进行负载分发，同时使得同一个客户端IP的请求始终被派发至某特定的服务器。该方式适合负载均衡无cookie功能的TCP协议。
           
       
       - 会话保持类型：默认不启用。支持以下类型：
         - 负载均衡器cookie：同时需填写"会话保持时间"，范围为1-1440分钟。
         
         
         ![](https://support.huaweicloud.com/usermanual-cce-autopilot/public_sys-resources/note_3.0-zh-cn.png)
         当[分配策略]使用源IP算法时，不支持设置会话保持。
         
       
       - 健康检查：设置负载均衡的健康检查配置，启用时支持以下配置。
         
         | 参数      | 说明                                                                                                                                                                                                                                                                                                                                   |
         |:---|:---|
         | 协议       | 支持TCP/HTTP/GRPC协议。仅独享型ELB支持选择GRPC协议。当前GRPC功能仅在部分区域开放，请以控制台呈现为准。 - 检查路径（仅HTTP/GRPC健康检查协议支持）：指定健康检查的URL地址。检查路径只能以/开头，长度范围为1-80。                  |
         | 端口        | 健康检查默认使用业务端口（Service的容器端口）作为健康检查的端口；您也可以重新指定端口用于健康检查，重新指定端口会为服务增加一个名为cce-healthz的服务端口配置。 - 容器端口：使用独享型负载均衡关联ENI实例时，容器端口作为健康检查的检查端口。取值范围为1-65535。   |
         | 检查周期（秒）    | 每次健康检查响应的最大间隔时间，取值范围为1-50。                                                                                                                                                                                                                                                                                                            |
         | 超时时间（秒） | 每次健康检查响应的最大超时时间，取值范围为1-50。                                                                                                                                                                                                                                                                                                            |
         | 最大重试次数    | 健康检查最大的重试次数，取值范围为1-10。                                                                                                                                                                                                                                                                                                                |
            
         
        
     
     - 操作：可单击"删除"按钮删除该配置。
      
   
   - **注解** ：Ingress有一些CCE定制的高级功能，通过注解annotations实现。在使用kubectl创建时，会用到注解，具体请参见[添加Ingress-自动创建ELB](https://support.huaweicloud.com/usermanual-cce-autopilot/cce_11_0252.html#cce_11_0252__zh-cn_topic_0000001243981049_section3675115714214)和[添加Ingress-对接已有ELB](https://support.huaweicloud.com/usermanual-cce-autopilot/cce_11_0252.html#cce_11_0252__zh-cn_topic_0000001243981049_section32300431736)。
   
   
   
   
4. 配置完成后，单击"确定"。创建完成后，在Ingress列表可查看到已添加的Ingress。 
   在ELB控制台可查看通过CCE自动创建的ELB，名称默认为"cce-lb-ingress.UID"。单击ELB名称进入详情页，在"监听器"页签下即可查看Ingress对应的路由设置，包括URL、监听器端口以及对应的后端服务器组端口。
   ![](https://support.huaweicloud.com/usermanual-cce-autopilot/public_sys-resources/notice_3.0-zh-cn.png)
   Ingress创建后请在CCE页面对所选ELB实例进行配置升级和维护，不要在ELB控制台对ELB实例进行维护，否则可能导致Ingress服务异常。
   图1ELB路由设置   
   ![](https://support.huaweicloud.com/usermanual-cce-autopilot/zh-cn_image_0000001910112928.png "点击放大")
   
   
5. 访问工作负载（例如名称为defaultbackend）的"/healthz"接口。 
   1. 获取工作负载"/healthz"接口的访问地址。访问地址由负载均衡实例IP、对外端口、映射URL组成，例如：10.\*\*.\*\*.\*\*:80/healthz。
   
   2. 在浏览器中输入"/healthz"接口的访问地址，如：http://10.\*\*.\*\*.\*\*:80/healthz，即可成功访问工作负载，如[图2]。
      图2访问defaultbackend"/healthz"接口   
      ![](https://support.huaweicloud.com/usermanual-cce-autopilot/zh-cn_image_0000001712379624.png "点击放大") 
   
   
   
   
 
#### 相关操作
由于社区Ingress结构体中没有property属性，用户使用client-go调用创建ingress的api接口时，创建的Ingress中没有property属性。为了与社区的client-go兼容，CCE提供了相关解决方案，具体请参见[Ingress中的property字段如何实现与社区client-go兼容？](https://support.huaweicloud.com/cce_faq/cce_faq_00234.html)。
