如何在 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 集群。
3. 设置 kubectl。
限制 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)。