
# NGINX Ingress控制器
#### 插件介绍
NGINX Ingress控制器能根据Service中Pod的变化动态地调整配置，结合Nginx的高稳定性、高性能、高并发处理能力等特点，对容器化应用具有灵活的应用层管理能力。
#### 字段说明
表1参数描述 
| 参数     | 是否必选 | 参数类型                                            | 描述             |
|:---|:---|:---|:---|
| basic  | 否    | object                                          | 插件基础配置参数，无需指定。 |
| flavor | 是    | [表2] object      | 插件规格参数         |
| custom | 是    | [表3] object | 插件自定义参数        |
   
 表2flavor 
| 参数        | 是否必选 | 参数类型                                                | 描述              |
|:---|:---|:---|:---|
| replicas  | 是    | String                                              | 实例数，默认为：1       |
| resources | 是    | [resources] object | 容器资源（CPU、内存）配额。 |
   
 表3custom 
| 参数                     | 是否必选 | 参数类型                                             | 描述                                                                                                                                                                       |
|:---|:---|:---|:---|
| ingressClass           | 是    | String                                           | 控制器名称，默认nginx。                                                                                                                                                           |
| namespace              | 是    | String                                           | 插件部署的命名空间，默认kube-system。                                                                                                                                                 |
| service                | 是    | [表8]          | 对外访问service配置                                                                                                                                                            |
| config                 | 否    | Map\<String\>String                              | nginx配置参数，参考社区说明<https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/configmap/>                                                                   |
| admissionWebhooks      | 否    | [表7]          | Ingress资源准入校验配置。                                                                                                                                                         |
| metrics                | 否    | [表9]            | 监控指标配置。                                                                                                                                                                  |
| defaultBackendService  | 否    | String                                           | 默认404服务，按 \<namespace\>/\<service_name\> 格式。                                                                                                                             |
| extraArgs              | 否    | [表10]           | 拓展参数配置                                                                                                                                                                   |
| multiAZEnable          | 否    | bool                                             | 插件中deployment组件多可用部署是否采用强制模式，默认：false。强制模式下插件Deployment实例强制调度到不同可用区的节点上，如集群下节点不满足多可用区，插件实例将无法全部运行。若multiAZEnable与multiAZBalance配置也同时为true，则以multiAZBalance为准使用多可用部署均分模式。 |
| multiAZBalance         | 否    | bool                                             | 插件中deployment组件多可用部署是否采用均分模式，默认：false。插件Deployment实例均匀调度到当前集群下各可用区，增加新的可用区后建议扩容插件实例以实现跨可用区高可用部署；均分模式限制不同可用区间插件实例数相差不超过1，单个可用区资源不足会导致后续其他实例无法调度。                          |
| tolerations            | 否    | Array of [表5]  | 污点容忍配置                                                                                                                                                                   |
| node_match_expressions | 否    | Array of [表6] | 插件实例亲和性配置                                                                                                                                                                |
   
 表4resources字段数据结构说明 
| 参数          | 是否必选 | 参数类型   | 描述                     |
|:---|:---|:---|:---|
| limitsCpu   | 是    | String | CPU大小限制，单位：m           |
| limitsMem   | 是    | String | 内存大小限制，单位：Mi           |
| name        | 是    | String | 插件名称，固定为：nginx-ingress |
| requestsCpu | 是    | String | 申请的CPU大小，单位：m          |
| requestsMem | 是    | String | 申请的内存大小，单位：Mi          |
   
 表5tolerations污点 
| 参数                | 是否必选 | 参数类型   | 描述    |
|:---|:---|:---|:---|
| key               | 否    | String | 污点键   |
| effect            | 否    | String | 污点策略  |
| operator          | 否    | String | 操作符   |
| tolerationSeconds | 否    | Int    | 容忍时间窗 |
   
 表6nodeMatchExpression节点亲和配置 
| 参数       | 是否必选 | 参数类型           | 描述      |
|:---|:---|:---|:---|
| key      | 否    | String         | 污点键     |
| values   | 否    | List\<String\> | 节点亲和的名称 |
| operator | 否    | String         | 操作符     |
   
 表7admissionWebhook配置 
| 参数     | 是否必选 | 参数类型 | 描述                        |
|:---|:---|:---|:---|
| enable | 否    | bool | 是否开启Ingress资源准入校验，默认true。 |
   
 表8service配置 
| 参数             | 是否必选 | 参数类型                | 描述                                                                                                                     |
|:---|:---|:---|:---|
| annotations    | 否    | Map\<String\>String | 对外service的Annotations配置。主要配置ELB相关选项，如"kubernetes.io/elb.class"，"kubernetes.io/elb.id"，"kubernetes.io/elb.pass-through" |
| loadBalancerIP | 否    | String              | service对接ELB时的ELB IP。                                                                                                  |
   
 表9metrics配置 
| 参数                   | 是否必选 | 参数类型   | 描述                                                                                                                                                        |
|:---|:---|:---|:---|
| enable               | 否    | bool   | 是否指标监控，默认true。                                                                                                                                            |
| excludeSocketMetrics | 否    | String | 屏蔽的监控指标，默认值为"nginx_ingress_controller_success,nginx_ingress_controller_header_duration_seconds,nginx_ingress_controller_ingress_upstream_latency_seconds" |
   
 表10extraArg扩展参数配置 
| 参数                      | 是否必选 | 参数类型   | 描述                                                                                                                     |
|:---|:---|:---|:---|
| default-ssl-certificate | 否    | String | 默认证书配置，见[Default SSL Certificate](https://kubernetes.github.io/ingress-nginx/user-guide/tls/#default-ssl-certificate)。 |
   
#### 请求示例
```
{
"kind": "Addon",
"apiVersion": "v3",
"metadata": {
"annotations": {
"addon.install/type": "install"
}
},
"spec": {
"clusterID": "2292498e-**************ac1001ba",
"version": "2.2.52",
"addonTemplateName": "nginx-ingress",
"values": {
                        "basic": {
"basickey":"val"
},
"flavor": {
"replicas": 2,
"resources": [{
"limitsCpu": "8000m",
"limitsMem": "4000Mi",
"name": "nginx-ingress",
"requestsCpu": "8000m",
"requestsMem": "4000Mi"
}]
},
"custom": {
"config": {
"keep-alive-requests": "100"
},
"defaultBackend": {
"enabled": true
},
"defaultBackendService": "",
"extraArgs": {
"default-ssl-certificate": ""
},
"ingressClass": "nginx",
"multiAZBalance": false,
"multiAZEnabled": false,
"namespace": "kube-system",
"node_match_expressions": [],
"service": {
"annotations": {
"kubernetes.io/elb.class": "performance",
"kubernetes.io/elb.id": "8d6bd485-d8ac-4693-815d-9d54d79b0666"
},
"loadBalancerIP": ""
},
"tolerations": [{
"key": "node.kubernetes.io/not-ready",
"operator": "Exists",
"effect": "NoExecute",
"tolerationSeconds": 60
},
{
"key": "node.kubernetes.io/unreachable",
"operator": "Exists",
"effect": "NoExecute",
"tolerationSeconds": 60
}]
}
}
}
}
```
