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

上次更新时间:2020 年 6 月 10 日

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

简短描述

如果您创建 type:LoadBalancer 的服务,默认情况下允许从源 0.0.0.0/0 进行请求。如果您的负载均衡器处于公共子网中,请求可从互联网上的任何位置路由到工作线程节点。

解决方法

设置您的环境

1.    创建 Amazon EKS 集群

2.    创建启动工作线程节点。

3.    设置 kubectl

4.    设置 AWS 命令行界面 (AWS CLI)

限制 CIDR IP 地址

1.    在您的服务清单文件 (svc.yaml) 中,添加 .spec.loadBalancerSourceRanges 字段。请参阅以下示例:

apiVersion: v1
kind: Service
metadata:
  labels:
    app: nginx
  name: nginx
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"
...

最后,请考虑以下事项:

对于 Kubernetes 版本 1.14 或更早版本,您可以仅通过重新创建 CIDR 范围的服务资源来更新使用网络负载均衡器的一项服务的 .spec.loadBalancerSourceRanges 字段。这些更改会反映在工作线程节点的安全组规则中。

注意:重新创建服务资源会重新预置网络负载均衡器,从而产生负载均衡器的新 IP 地址。

对于具有网络负载均衡器类型的服务,请考虑最高的安全组限制。对于每个节点端口和 CIDR 范围,Kubernetes 控制平面将在工作线程节点的安全组中创建三个规则(用于流量、运行状况和 MTU)。


这篇文章对您有帮助吗?

我们可以改进什么?


需要更多帮助?