# 通过Kubectl命令行创建Nginx Ingress
#### 操作场景
本节以Nginx工作负载为例，说明kubectl命令添加Nginx Ingress的方法。
#### 前提条件
- 集群必须已安装NGINX Ingress 控制器，具体操作可参考[安装插件](https://support.huaweicloud.com/usermanual-cce-autopilot/cce_11_0034.html#cce_11_0034__zh-cn_topic_0000001199341160_section1152424015224)。
- Ingress为后端工作负载提供网络访问，因此集群中需提前部署可用的工作负载。若您无可用工作负载，可参考[创建工作负载](https://support.huaweicloud.com/usermanual-cce-autopilot/cce_11_0673.html)部署工作负载。
- 为上述工作负载配置ClusterIP类型的Service，可参考[集群内访问（ClusterIP）](https://support.huaweicloud.com/usermanual-cce-autopilot/cce_11_0011.html)配置示例Service。
 
#### 添加Nginx Ingress
1. 请参见[通过kubectl连接集群](https://support.huaweicloud.com/usermanual-cce-autopilot/cce_11_0107.html)，使用kubectl连接集群。
2. 创建名为"**ingress-test.yaml** "的YAML文件，此处文件名可自定义。
   
   **vi ingress-test.yaml**
   **以HTTP协议访问为例，YAML文件配置如下。**
   ```
   apiVersion: networking.k8s.io/v1
   kind: Ingress
   metadata:
     name: ingress-test
   spec:
     rules:
       - host: ''
         http:
           paths:
             - path: /
               backend:
                 service:
                   name: <your_service_name>  #替换为您的目标服务名称
                   port:
                     number: <your_service_port>  #替换为您的目标服务端口
               property:
                 ingress.beta.kubernetes.io/url-match-mode: STARTS_WITH
               pathType: ImplementationSpecific
     ingressClassName: nginx   # 表示使用Nginx Ingress
   ```
   表1关键参数说明 
   | 参数                                         | 是否必填 | 参数类型    | 描述                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
   |:---|:---|:---|:---|
   | ingressClassName                           | 是  | String | nginx：表示使用NginxIngress，未安装nginx-ingress插件时无法使用。 创建Nginx Ingress时必须指定该参数，否则默认创建ELB Ingress。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
   | host                                    | 否  | String  | 为服务访问域名配置，默认为""，表示域名全匹配。请确保所填写的域名已注册并备案，一旦配置了域名规则后，必须使用域名访问。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
   | path                                    | 是  | String | 为路由路径，用户自定义设置。所有外部访问请求需要匹配host和path。 说明： - Nginx Ingress的访问路径匹配规则是基于"/"符号分隔的路径前缀匹配，并区分大小写。只要访问路径以"/"符号分隔后的子路径匹配此前缀，均可正常访问，但如果该前缀仅是子路径中的部分字符串，则不会匹配。例如URL设置为/healthz，则匹配/healthz/v1，但不匹配/healthzv1。  - 此处添加的访问路径要求后端应用内存在相同的路径，否则转发无法生效。 例如，Nginx应用默认的Web访问路径为"/usr/share/nginx/html"，在为Ingress转发策略添加"/test"路径时，需要应用的Web访问路径下也包含相同路径，即"/usr/share/nginx/html/test"，否则将返回404。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
   | ingress.beta.kubernetes.io/url-match-mode | 否  | String   | 路由匹配策略。 默认值为"STARTS_WITH"(前缀匹配)。 取值范围： - EQUAL_TO：精确匹配  - STARTS_WITH：前缀匹配                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
   | pathType                                 | 是   | String   | 路径类型。 - ImplementationSpecific: 匹配方法取决于具体Ingress Controller的实现。在CCE中会使用ingress.beta.kubernetes.io/url-match-mode指定的匹配方式。  - Exact：精确匹配 URL 路径，且区分大小写。  - Prefix：前缀匹配，且区分大小写。该方式是将URL路径通过"/"分隔成多个元素 ，并且对元素进行逐个匹配。 如果URL中的每个元素均和路径匹配，则说明该URL的子路径均可以正常路由。 说明： - Prefix匹配时每个元素均需精确匹配，如果URL的最后一个元素是请求路径中最后一个元素的子字符串，则不会匹配 。例如：/foo/bar匹配/foo/bar/baz，但不匹配/foo/barbaz。  - 通过"/"分隔元素时，若URL或请求路径以"/"结尾，将会忽略结尾的"/"。例如：/foo/bar会匹配/foo/bar/。      关于Ingress路径匹配示例，请参见[示例](https://kubernetes.io/zh-cn/docs/concepts/services-networking/ingress/)。 |
      
   
   
3. 创建Ingress。 
   **kubectl create -f ingress-test.yaml**
   回显如下，表示Ingress服务已创建。
   ```
   ingress/ingress-test created
   ```
   查看已创建的Ingress。
   **kubectl get ingress**
   回显如下，表示Ingress服务创建成功，工作负载可访问。
   ```
   NAME             HOSTS     ADDRESS          PORTS   AGE
   ingress-test     *         121.**.**.**     80      10s
   ```
   
   
4. 访问工作负载（例如Nginx工作负载），在浏览器中输入访问地址"http://121.\*\*.\*\*.\*\*:80"进行验证。 
   其中，"121.\*\*.\*\*.\*\*"为统一负载均衡实例的IP地址。
   
   
 
