# 为ELB Ingress配置URL重定向
Ingress支持将特定的访问请求重定向至指定的路径。配置Ingress重定向规则的YAML示例如下，本示例将访问example.com的请求重定向至指定路径example.com/testa，并返回301状态码。
#### 前提条件
- 已创建一个CCE Standard或CCE Turbo集群，且集群版本满足以下要求：
  - v1.23集群：v1.23.14-r0及以上
  
  - v1.25集群：v1.25.9-r0及以上
  
  - v1.27集群：v1.27.6-r0及以上
  
  - v1.28集群：v1.28.4-r0及以上
  
  - 其他更高版本的集群
   
- 集群中需提前部署可用的工作负载用于对外提供访问。若您无可用工作负载，可参见[创建无状态负载（Deployment）](https://support.huaweicloud.com/usermanual-cce/cce_10_0047.html)、[创建有状态负载（StatefulSet）](https://support.huaweicloud.com/usermanual-cce/cce_10_0048.html)或[创建守护进程集（DaemonSet）](https://support.huaweicloud.com/usermanual-cce/cce_10_0216.html)部署工作负载。
- 为提供对外访问的工作负载配置Service，ELB Ingress支持的Service类型请参见[ELB Ingress支持的Service类型](https://support.huaweicloud.com/usermanual-cce/cce_10_0094.html#cce_10_0094__section3565202819276)。
 
#### 约束与限制
- 该特性仅在使用独享型ELB时支持配置。
- 该特性依赖ELB高级转发策略，开启后将不再根据域名/路径匹配确定优先级，请您根据实际需要[自定义转发策略优先级](https://support.huaweicloud.com/usermanual-cce/cce_10_0939.html)。关于转发策略优先级详情请参见[ELB Ingress转发策略优先级说明](https://support.huaweicloud.com/usermanual-cce/cce_10_0950.html)。
 
#### 配置Ingress重定向至URL规则
您可以使用以下方式配置Ingress重定向至URL规则。
- [通过控制台配置]
  1. 登录[CCE控制台](https://console.huaweicloud.com/cce2.0/?#/cce/cluster/list)，单击集群名称进入集群。
  
  2. 选择左侧导航栏的"服务"，在右侧选择"路由"页签，单击右上角"创建路由"。
  
  3. 设置Ingress参数。 
     ![](https://support.huaweicloud.com/usermanual-cce/public_sys-resources/note_3.0-zh-cn.png)
     本示例中展示配置URL重定向的关键参数，其余参数可按需配置，详情请参见[通过控制台创建ELB Ingress](https://support.huaweicloud.com/usermanual-cce/cce_10_0251.html)。
     表1关键参数说明 
     | 参数     | 配置说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             | 示例                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
     |:---|:---|:---|
     | 名称      | 自定义Ingress名称。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   | ingress-test                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
     | 负载均衡器 | 选择对接的ELB实例或自动创建ELB实例。本例中仅支持选择"独享型"。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             | 独享型ELB                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
     | 监听器配置 | - 前端协议：可选择"HTTP"或"HTTPS"。  - 对外端口：ELB监听器的端口。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           | - 前端协议："HTTP"  - 对外端口：80                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
     | 转发策略配置  | - 域名：实际访问的域名地址，不配置时可通过IP地址访问Ingress。请确保所填写的域名已注册并备案，一旦配置了域名规则后，必须使用域名访问。  - 路径匹配规则：支持前缀匹配、精确匹配、正则匹配，请按需选择。  - 路径：后端应用对外提供访问的路径，此处添加的访问路径要求后端应用内存在相同的路径，否则转发无法生效。  - 目标服务名称：请选择已有Service，页面列表中的查询结果已自动过滤不符合要求的Service。如果没有满足要求的Service请根据[Ingress支持的Service类型](https://support.huaweicloud.com/usermanual-cce/cce_10_0094.html#cce_10_0094__section1674954315446)新建。  - 目标服务访问端口：可选择目标Service的访问端口。    - 执行动作 - 动作：选择"重定向至URL"，当访问请求满足转发策略时，会将请求重定向至指定的URL，并返回指定的状态码。  - URL：以 "http://" 或 "https://" 开头的合法的URL。 说明： HTTP协议的路由，支持重定向到HTTP/HTTPS协议；HTTPS协议的路由，只能重定向到HTTPS协议。   - 返回码：支持返回码包括"301"、"302"、"303"、"307"、"308"。     | - 域名：example.com  - 路径匹配规则：前缀匹配  - 路径：/  - 目标服务名称：nginx  - 目标服务访问端口：80  - 执行动作： - 动作：重定向至URL  - URL：https://example.com/testa  - 返回码：301     |
        
     图1配置重定向至URL规则   
     ![](https://support.huaweicloud.com/usermanual-cce/zh-cn_image_0000002006669353.png "点击放大")
     
     
  
  4. 配置完成后，单击"创建"，然后单击"确定"。
   
- [通过kubectl命令行配置]
  Ingress重定向至URL可通过注解实现，示例如下：
  1. 请参见[通过kubectl连接集群](https://support.huaweicloud.com/usermanual-cce/cce_10_0107.html)，使用kubectl连接集群。
  
  2. 创建名为"**ingress-test.yaml** "的YAML文件，此处文件名可自定义。
     
     ```
     vi ingress-test.yaml
     ```
     以关联已有ELB为例，YAML配置文件如下：
     ```
     apiVersion: networking.k8s.io/v1
     kind: Ingress
     metadata:
       name: test-redirect-url
       namespace: default
       annotations:
         kubernetes.io/elb.id: df76342f-e898-402a-bac8-bde5bf974da8   # ELB的ID
         kubernetes.io/elb.class: performance   # ELB的类型
         kubernetes.io/elb.port: '80'   # ELB的端口
         kubernetes.io/elb.redirect-url: https://example.com/testa        # 重定向URL的信息
         kubernetes.io/elb.redirect-url-code: '301'     # 重定向URL后的返回码
     spec:
       rules:
         - host: "example.com"
           http:
             paths:
               - path: /
                 backend:
                   service:
                     name: test-service  #替换为您的目标服务名称
                     port:
                       number: 80  #替换为您的目标服务端口
                 property:
                   ingress.beta.kubernetes.io/url-match-mode: STARTS_WITH
                 pathType: ImplementationSpecific
       ingressClassName: cce
     ```
     表2关键参数说明 
     | 参数                                | 是否必填 | 参数类型      | 描述                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
     |:---|:---|:---|:---|
     | kubernetes.io/elb.redirect-url     | 是       | string    | 重定向URL信息。 格式说明： - HTTPS协议的Ingress：支持以"https://" 开头的合法的URL，如 https://example.com/。  - HTTP协议的Ingress：支持以 "http://" 或 "https://" 开头的合法的URL，如https://example.com/。   参数说明：对单个Ingress下所有的转发规则均生效，配置删除后自动清理对应的重定向URL规则。 该注解不能和灰度发布的注解一起配置。 |
     | kubernetes.io/elb.redirect-url-code | 否     | string | 重定向URL后的返回码。 格式说明：支持返回码包括"301"、"302"、"303"、"307"、"308"。 参数说明：默认值为"301"。                                                                                                                                                                                                                                                                                                                                                     |
        
     
     
  
  3. 创建Ingress。 
     ```
     kubectl create -f ingress-test.yaml
     ```
     回显类似如下，表示Ingress服务已创建。
     ```
     ingress.networking.k8s.io/ingress-test created
     ```
     
     
  
  4. 查看已创建的Ingress。 
     ```
     kubectl get ingress
     ```
     回显如下，表示Ingress服务创建成功。
     ```
     NAME               CLASS    HOSTS         ADDRESS          PORTS   AGE
     test-redirect-url  cce      example.com   121.**.**.**     80      10s
     ```
     
     
  
  5. 使用curl测试重定向后的能力，其中${ELB_IP}为Ingress访问的IP。 
     ```
     curl -I -H "Host:example.com" ${ELB_IP}
     ```
     最终访问路径会被重定向至example.com/testa。
     ```
     HTTP/1.1 301 Moved Permanently
     Date: Thu, 07 Mar 2024 11:04:31 GMT
     Content-Type: text/html
     Content-Length: 134
     Connection: keep-alive
     Location: https://example.com/testa
     Server: elb
     ```
     
     
   
