首页 > 解决方案 > EKS 阻止单个 IP

问题描述

请减轻我的痛苦:我正在尝试阻止单个 IP 访问 EKS 上托管的站点之一。我已经尝试了 server-snippet 注释,但它没有用。我也尝试过创建一个网络策略来阻止,没有运气。知道如何设置受限 IP 列表吗?

这是网络策略:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: web-dev-network-policy
  namespace: target_namespace
spec:
  podSelector:
    matchLabels:
      app: php
  policyTypes:
  - Ingress
  ingress:
  - from:
    - ipBlock:
        cidr: source_ip_value/32
    ports:
    - protocol: TCP
      port: 80

这是服务器片段:

nginx.ingress.kubernetes.io/server-snippet: |
  location / {
      deny  source_ip;
    }

编辑:在监视域的传入请求时,我可以看到 CoreDNS 重写请求(我想)以匹配托管站点的服务名称。我想这就是为什么location /不匹配请求并且被允许的原因,例如:

source.ip.address - - [time/date] "HEAD / HTTP/2.0" 200 0 "-" "curl/7.58.0" 54 0.382 [service-name-service-name-80] [] private.ip:80 0 0.384 200 7a06748e7395fbsssceb737723399919

标签: kubernetesiptablesamazon-ekskubernetes-networkpolicyip-restrictions

解决方案


这是一个社区维基答案。随意扩展它。

值得注意的是,根据官方文档

集群入口和出口机制通常需要重写数据包的源 IP 或目标 IP。Service 在发生这种情况的情况下,没有定义这是发生在 NetworkPolicy 处理之前还是之后,并且对于网络插件、云提供商、实现等的不同组合,行为可能会有所不同。

在入口的情况下,这意味着在某些情况下,您可能能够根据实际的原始源 IP 过滤传入的数据包,而在其他情况下,NetworkPolicy 作用的“源 IP”可能是一个LoadBalancer或Pod 的节点等

但是,正如您在评论中已经提到的:

我们暂时搁置了这一点,因为在不启用代理协议的情况下似乎无法过滤客户端 IP 地址,这意味着生产 Ingress 的返工。现在我们必须满足AWS WAF


推荐阅读