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

上次更新时间:2021 年 8 月 23 日

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

简短描述

如果您创建了一个 type:LoadBalancer 服务,那么默认情况下会允许从源 0.0.0.0/0 进行请求。如果您的负载均衡器位于公有子网中,则可以从互联网上的任何位置将请求路由到工件节点。

解决方法

注意:如果您在运行 AWS Command Line Interface(AWS CLI)命令时遇到错误,请确保您使用的是最新版的 AWS CLI

设置环境

1.    创建 Amazon EKS 集群

2.    创建启动工件节点。

3.    设置 kubectl

4.    设置 AWS CLI

5.    设置 AWS Load Balancer 控制器

注意:对于 LoadBalancer 类型的服务,AWS Load Balancer 控制器支持以下版本的 AWS 网络负载均衡器:NLB ip 模式(2.0.0 或更高版本)和 NLB 实例模式(2.2.0 或更高版本)

重要提示:为 LoadBalancer 类型的服务配置新的网络负载均衡器时,最佳实践是使用 AWS Load Balancer 控制器。使用 AWS Load Balancer 控制器而不是 Kubernetes 树内服务负载均衡器控制器。

限制 CIDR IP 地址

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.    要应用清单文件,请运行以下命令:

$ kubectl apply -f svc.yaml

3.    要确认安全组上的入站规则已修改,请运行以下 AWS CLI 命令:

$ aws ec2 describe-security-groups --group-ids sg-XXXXXXXXXXXXXXXXX
...
    "CidrIp": "143.231.0.0/16"
...

最后,请考虑以下事项:

如果使用 NLB ip 模式,则默认情况下会忽略 .spec.loadBalancerSourceRanges 字段。在这种情况下,请使用以下注释:

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

此注释启用了客户端 IP 保留功能。

对于网络负载均衡器类型的服务,请考虑最高的安全组限制。对于每个节点端口和子网 CIDR 范围,控制器会在工件节点的安全组上创建规则。


这篇文章对您有帮助吗?


您是否需要账单或技术支持?