
# 为ELB Ingress配置黑名单/白名单访问策略
使用ELB Ingress时，您可以通过添加白名单和黑名单的方式控制访问负载均衡监听器的IP。
- 白名单：指定的IP允许访问，而其它IP不能访问。
- 黑名单：指定的IP不能访问，而其它IP允许访问。
#### 前提条件
- 已创建一个CCE Standard或CCE Turbo集群，且集群版本满足以下要求：
  - v1.23集群：v1.23.12-r0及以上版本
  
  - v1.25集群：v1.25.7-r0及以上版本
  
  - v1.27集群：v1.27.4-r0及以上版本
  
  - v1.28集群：v1.28.2-r0及以上版本
  
  - 其他更高版本的集群
   
- 已在ELB控制台创建一个IP地址组，详情请参见[创建IP地址组](https://support.huaweicloud.com/usermanual-elb/elb_ug_ip_0001.html#section2)。
 
#### 约束与限制
- 配置黑名单/白名单访问策略后，如果您在CCE控制台删除黑名单/白名单访问策略配置或在YAML中删除对应的annotation，ELB侧的配置将会保留。
- 多个Ingress使用同一个ELB实例的同一个对外端口时，建议每个Ingress的黑/白名单配置相同，否则将以第一个创建的Ingress配置为准。详情请参见[同一集群中多个Ingress使用同一个ELB的配置说明](https://support.huaweicloud.com/usermanual-cce/cce_10_0954.html)。
 
#### 配置黑名单/白名单访问策略
您可以使用以下方式为Ingress配置黑名单/白名单访问策略。
- [通过控制台配置]
  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)
     本示例中展示配置黑名单/白名单访问策略的关键参数，其余参数可按需配置，详情请参见[通过控制台创建ELB Ingress](https://support.huaweicloud.com/usermanual-cce/cce_10_0251.html)。
     表1关键参数说明 
     | 参数     | 配置说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            | 示例                                                                                                                                                                                                                                                                                                                                                                                                                      |
     |:---|:---|:---|
     | 名称     | 自定义Ingress名称。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   | ingress-test                                                                                                                                                                                                                                                                                                                                                                                                            |
     | 负载均衡器  | 选择对接的ELB实例或自动创建ELB实例。可选择"共享型"或"独享型"。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            | 独享型ELB                                                                                                                                                                                                                                                                                                                                                                                                                  |
     | 监听器配置  | - 前端协议：支持"HTTP"和"HTTPS"。  - 对外端口：ELB监听器的端口。  - 访问控制： - 继承ELB已有配置：CCE不对ELB侧已有的访问控制进行修改。  - 允许所有IP访问：不设置访问控制。  - 白名单：仅所选IP地址组可以访问ELB地址。  - 黑名单：所选IP地址组无法访问ELB地址。   说明： v1.25.16-r10、v1.27.16-r10、v1.28.15-r0、v1.29.10-r0、v1.30.6-r0、v1.31.1-r0及以上版本的集群中，使用独享型ELB时访问控制可同时选择多个IP地址组，最多同时选择5个。    | - 前端协议："HTTP"  - 对外端口：80  - 高级配置： 访问控制：黑名单                                                                                                         |
     | 转发策略配置 | - 域名：实际访问的域名地址，不配置时可通过IP地址访问Ingress。请确保所填写的域名已注册并备案，一旦配置了域名规则后，必须使用域名访问。  - 路径匹配规则：支持前缀匹配、精确匹配、正则匹配，请按需选择。  - 路径：后端应用对外提供访问的路径，此处添加的访问路径要求后端应用内存在相同的路径，否则转发无法生效。  - 目标服务名称：请选择已有Service，页面列表中的查询结果已自动过滤不符合要求的Service。如果没有满足要求的Service请根据[Ingress支持的Service类型](https://support.huaweicloud.com/usermanual-cce/cce_10_0094.html#cce_10_0094__section1674954315446)新建。  - 目标服务访问端口：可选择目标Service的访问端口。         | - 域名：无需填写  - 路径匹配规则：前缀匹配  - 路径：/  - 目标服务名称：nginx  - 目标服务访问端口：80   |
        
     图1配置黑名单/白名单访问策略   
     ![](https://support.huaweicloud.com/usermanual-cce/zh-cn_image_0000002006905305.png "点击放大")
     
     
  
  4. 配置完成后，单击"确定"。
   
- [通过kubectl命令行配置]
  1. 请参见[通过kubectl连接集群](https://support.huaweicloud.com/usermanual-cce/cce_10_0107.html)，使用kubectl连接集群。
  
  2. 创建名为"**ingress-test.yaml** "的YAML文件，此处文件名可自定义。
     
     ```
     vi ingress-test.yaml
     ```
     以使用已有ELB创建Ingress的场景为例，YAML配置示例如下：
     ```
     apiVersion: networking.k8s.io/v1
     kind: Ingress 
     metadata: 
       name: ingress-test
       annotations: 
         kubernetes.io/elb.id: <your_elb_id>                    # ELB ID，替换为实际值
         kubernetes.io/elb.class: performance                   # 负载均衡器类型
         kubernetes.io/elb.port: '80'                           # 负载均衡监听器的对外端口
         kubernetes.io/elb.acl-id: <your_acl_id>               # ELB的IP地址组ID
         kubernetes.io/elb.acl-status: 'on'                    # 开启访问控制
         kubernetes.io/elb.acl-type: 'white'                   # 白名单控制
     spec:
       rules: 
       - host: ''
         http: 
           paths: 
           - path: '/'
             backend: 
               service:
                 name: <your_service_name>  #替换为您的目标服务名称
                 port: 
                   number: 80             #替换为您的目标服务端口
             property:
               ingress.beta.kubernetes.io/url-match-mode: STARTS_WITH
             pathType: ImplementationSpecific
       ingressClassName: cce
     ```
     表2ELB访问控制注解 
     | 参数                           | 类型     | 描述                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
     |:---|:---|:---|
     | kubernetes.io/elb.acl-id     | String | - 不填写该参数时：表示CCE不对ELB侧访问控制进行修改。  - 参数值填写为空值时：表示允许所有IP访问。  - 参数值填写为ELB的IP地址组ID时：表示开启访问控制，为ELB设置IP地址黑名单或白名单。此时需同时填写kubernetes.io/elb.acl-status和kubernetes.io/elb.acl-type参数。 说明： v1.25.16-r10、v1.27.16-r10、v1.28.15-r0、v1.29.10-r0、v1.30.6-r0、v1.31.1-r0及以上版本的集群中，使用独享型ELB时可同时填写多个IP地址组，最多同时填写5个，用英文逗号分隔。 **获取方法：** 登录[ELB控制台](https://console.huaweicloud.com/vpc/#/elb/list/grid)，单击"弹性负载均衡 \> IP地址组"，复制目标IP地址组的"ID"即可。详情请参见[IP地址组](https://support.huaweicloud.com/usermanual-elb/elb_ug_ip_0000.html)。    |
     | kubernetes.io/elb.acl-status | String | 为ELB设置IP地址黑名单或白名单时需填写，取值如下： - on或true：表示开启访问控制。  - off或false：表示不开启访问控制。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
     | kubernetes.io/elb.acl-type   | String | 为ELB设置IP地址黑名单或白名单时需填写，取值如下： - black：表示黑名单，所选IP地址组无法访问ELB地址。  - white：表示白名单，仅所选IP地址组可以访问ELB地址。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
        
     
     
  
  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
     ingress-test  cce      *         121.**.**.**     80      10s
     ```
     
     
   
