更新时间:2026-06-18 GMT+08:00
分享

为Nginx Ingress配置客户端IP地址限制

使用Nginx Ingress时,您可以通过以下annotation限制访问的客户端IP:

  • nginx.ingress.kubernetes.io/whitelist-source-range:允许访问的客户端IP范围,支持IP地址或CIDR地址块,多个地址以英文半角逗号(,)分隔。
  • nginx.ingress.kubernetes.io/denylist-source-range:禁止访问的客户端IP范围,支持IP地址或CIDR地址块,多个地址以英文半角逗号(,)分隔。

配置IP地址限制

  1. 请参见通过kubectl连接集群,使用kubectl连接集群。
  2. 创建名为“ingress-test.yaml”的YAML文件,此处文件名可自定义。

    vi ingress-test.yaml
    允许访问的示例如下:
    apiVersion: networking.k8s.io/v1
    kind: Ingress 
    metadata: 
      name: ingress-test
      namespace: default
      annotations:
        nginx.ingress.kubernetes.io/whitelist-source-range: "192.168.1.0/24"  # 允许访问的客户端IP范围
    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

    禁止访问的示例如下:

    apiVersion: networking.k8s.io/v1
    kind: Ingress 
    metadata: 
      name: ingress-test
      namespace: default
      annotations:
        nginx.ingress.kubernetes.io/denylist-source-range: "10.0.0.0/24"  # 禁止访问的客户端IP范围
    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

  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  nginx   *         121.**.**.**     80      10s

  5. 测试访问Ingress。如果配置了示例中允许访问的annotation,则只有192.168.1.0/24网段内IP可以正常访问,其他IP会收到403 Forbidden响应;如果配置了示例中禁止访问的annotation,则10.0.0.0/24网段内IP无法访问,其他IP可以正常访问。

相关文档