更新时间:2024-09-29 GMT+08:00

为ELB Ingress配置黑名单/白名单访问策略

使用ELB Ingress时,您可以通过添加白名单和黑名单的方式控制访问负载均衡监听器的IP。

  • 白名单:指定的IP允许访问,而其它IP不能访问。
  • 黑名单:指定的IP不能访问,而其它IP允许访问。

配置黑名单/白名单访问策略后,如果您在CCE控制台删除黑名单/白名单访问策略配置或在YAML中删除对应的annotation,ELB侧的配置将会保留。

前提条件

  • 已创建Kubernetes集群,且集群版本满足以下要求:
    • 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地址组

配置黑名单/白名单访问策略

您可以使用以下方式为Ingress配置黑名单/白名单访问策略。

  1. 登录CCE控制台,单击集群名称进入集群。
  2. 选择左侧导航栏的“服务”,在右侧选择“路由”页签,单击右上角“创建路由”
  3. 设置Ingress参数。

    本示例中展示配置黑名单/白名单访问策略的关键参数,其余参数可按需配置,详情请参见通过控制台创建ELB Ingress

    表1 关键参数说明

    参数

    配置说明

    示例

    名称

    自定义Ingress名称。

    ingress-test

    负载均衡器

    选择对接的ELB实例或自动创建ELB实例。可选择“共享型”“独享型”

    独享型ELB

    监听器配置

    • 前端协议:支持“HTTP”“HTTPS”
    • 对外端口:ELB监听器的端口。
    • 访问控制:
      • 允许所有IP访问:不设置访问控制。
      • 白名单:仅所选IP地址组可以访问ELB地址。
      • 黑名单:所选IP地址组无法访问ELB地址。
    • 前端协议:“HTTP”
    • 对外端口:80
    • 高级配置:

      访问控制:黑名单

    转发策略配置

    • 域名:实际访问的域名地址,不配置时可通过IP地址访问Ingress。请确保所填写的域名已注册并备案,一旦配置了域名规则后,必须使用域名访问。
    • 路径匹配规则:支持前缀匹配精确匹配正则匹配,请按需选择。
    • 路径:后端应用对外提供访问的路径,此处添加的访问路径要求后端应用内存在相同的路径,否则转发无法生效。
    • 目标服务名称:请选择已有Service或新建Service。页面列表中的查询结果已自动过滤不符合要求的Service。
    • 目标服务访问端口:可选择目标Service的访问端口。
    • 域名:无需填写
    • 路径匹配规则:前缀匹配
    • 路径:/
    • 目标服务名称:nginx
    • 目标服务访问端口:80
    图1 配置黑名单/白名单访问策略

  4. 配置完成后,单击“确定”
  1. 请参见通过kubectl连接集群,使用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      
    表2 ELB访问控制注解

    参数

    类型

    描述

    kubernetes.io/elb.acl-id

    String

    • 不填写该参数时:表示CCE不对ELB侧访问控制进行修改。
    • 参数值填写为空值时:表示允许所有IP访问。
    • 参数值填写为ELB的IP地址组ID时:表示开启访问控制,为ELB设置IP地址黑名单或白名单。此时需同时填写kubernetes.io/elb.acl-status和kubernetes.io/elb.acl-type参数。

      获取方法:

      登录控制台后,单击顶部菜单右侧的“网络 > 弹性负载均衡ELB”,在网络控制台中单击“弹性负载均衡 > IP地址组”,复制目标IP地址组的“ID”即可。详情请参见IP地址组

    kubernetes.io/elb.acl-status

    String

    为ELB设置IP地址黑名单或白名单时需填写,取值如下:

    • on:表示开启访问控制。
    • off:表示不开启访问控制。

    kubernetes.io/elb.acl-type

    String

    为ELB设置IP地址黑名单或白名单时需填写,取值如下:

    • black:表示黑名单,所选IP地址组无法访问ELB地址。
    • white:表示白名单,仅所选IP地址组可以访问ELB地址。

  3. 创建Ingress。

    kubectl create -f ingress-test.yaml

    回显如下,表示Ingress服务已创建。

    ingress/ingress-test created

  4. 查看已创建的Ingress。

    kubectl get ingress

    回显如下,表示Ingress服务创建成功。

    NAME          CLASS    HOSTS     ADDRESS          PORTS   AGE
    ingress-test  cce      *         121.**.**.**     80      10s