如何在 Amazon EKS 中限制 LoadBalancer 类型服务的 CIDR IP 地址?

2 分钟阅读
0

我想在 Amazon Elastic Kubernetes Service (Amazon EKS) 中限制 LoadBalancer 类型服务的 CIDR IP 地址。

简短描述

如果创建了 LoadBalancer 类型的服务,则默认情况下会允许来自源 0.0.0.0/0 的请求。如果您的负载均衡器位于公有子网中,则请求会从互联网上的任何位置路由到 Worker 节点。

要限制非 0.0.0.0/0 的源,请使用 loadBalancerSourceRanges

解决方法

**注意:**如果在运行 AWS 命令行界面(AWS CLI)命令时收到错误,请参阅排查 AWS CLI 错误。此外,确保您使用的是最新版本的 AWS CLI

设置您的环境

要设置您的环境,请完成以下步骤:

  1. 创建 Amazon EKS 集群
  2. 创建启动 Worker 节点。
  3. 设置 kubectl
  4. 设置 AWS CLI
  5. 设置 AWS 负载均衡器控制器
    **注意:**对于 LoadBalancer 类型的服务,AWS 负载均衡器控制器支持网络负载均衡器 (NLB) IP 模式 2.0.0 版或更高版本以及 NLB 实例模式 2.2.0 或更高版本。

**重要事项:**要为 LoadBalancer 类型的服务分配新的网络负载均衡器,最佳做法是使用 AWS 负载均衡器控制器而非 Kubernetes Service 负载均衡器控制器。有关 AWS 均衡器控制器的最新版本,请参阅 GitHub 网站上的 aws-load-balancer-controller

限制 CIDR IP 地址

选择以下一种方法指定 loadBalancerSourceRanges

使用注释

在服务清单文件 (svc.yaml) 中使用注释。

注释示例:

service.beta.kubernetes.io/load-balancer-source-ranges: 143.231.0.0/16

有关更多信息,请参阅 Kubernetes 网站上的 Access control

添加 loadBalancerSourceRanges 字段

  1. 在 svc.yaml 文件中添加 .spec.loadBalancerSourceRanges 字段:

    apiVersion: v1
    kind: Service
    metadata:
      labels:
        app: nginx
      name: nginx
      annotations:
        service.beta.kubernetes.io/aws-load-balancer-type: "external"
        service.beta.kubernetes.io/aws-load-balancer-nlb-target-type: "instance"
        service.beta.kubernetes.io/aws-load-balancer-scheme: "internet-facing"
    spec:
      ports:
      - port: 80
        protocol: TCP
        targetPort: 80
      selector:
        app: nginx
      type: LoadBalancer
      loadBalancerSourceRanges:
      - "143.231.0.0/16"
  2. 运行以下命令以应用 svc.yaml 文件:

    $ kubectl apply -f svc.yaml

    运行以下命令查看 AWS 负载均衡器控制器的容器组(pod)日志:

    $ kubectl logs -f <aws load balancer controller pod> -n <namespace>
  3. AWS 负载均衡器控制器会将配置的负载均衡器源范围添加到安全组的入站规则中。运行以下命令以确认安全组的入站规则已修改:

    $ aws ec2 describe-security-groups --group-ids sg-XXXXXXXXXXXXXXXXX
    ...
        "CidrIp": "143.231.0.0/16"
    ...
  4. 如果在 IP 模式下使用网络负载均衡器,则默认情况下会忽略 .spec.loadBalancerSourceRanges 字段。在这种情况下,请使用以下注释开启客户端 IP 保留

    service.beta.kubernetes.io/aws-load-balancer-target-group-attributes: preserve_client_ip.enabled=true

    对于网络负载均衡器类型的服务,您可能需要提高最大安全组限制。对于各节点端口和子网 CIDR 范围,控制器会在 Worker 节点的安全组上创建规则。有关更多信息,请参阅 Kubernetes 网站上的 Ingress traffic

    **注意:**对于网络负载均衡器类型的服务,您可能需要增加最大安全组配额。对于各节点端口和子网 CIDR 范围,控制器会在 Worker 节点的安全组上创建规则。例如,您的 Worker 节点跨三个可用区。添加一个 loadBalancerSourceRange。在 Worker 节点安全组中创建三条运行状况检查规则(各子网一条)和一条 loadBalancerSourceRange 规则。安全组的默认限制为 60 条规则。您可以增加此配额,但每个网络接口的安全组总数不能超过 1000 个。

相关信息

Allowing users to access your cluster

AWS 官方
AWS 官方已更新 8 个月前