我有一个TCP服务,该服务通过AWS EKS集群上的Kubernetes部署运行,并通过使用以下定义的LoadBalancer类型的服务暴露给Internet
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/aws-load-balancer-type: nlb
service.beta.kubernetes.io/aws-load-balancer-backend-protocol: tcp
name: tcpservice
spec:
selector:
app: tcpapp
type: LoadBalancer
ports:
- port: 4453
targetPort: 4453
name: tcpport
由于负载均衡器类型为NLB,因此必须在应用于节点本身的安全组上明确允许入口流量。安全组是这样创建的:
✔ ~$ aws ec2 describe-security-groups --group-ids sg-2645567125762c6e2 | jq '.SecurityGroups[0].IpPermissions[0]'
{
"FromPort": 32163,
"IpProtocol": "tcp",
"IpRanges": [
{
"CidrIp": "10.20.0.0/20",
"Description": "kubernetes.io/rule/nlb/health=afd5427b6058811ea989512627425a2e"
},
{
"CidrIp": "0.0.0.0/0",
"Description": "kubernetes.io/rule/nlb/client=afd5427b6058811ea989512627425a2e"
}
],
"Ipv6Ranges": [],
"PrefixListIds": [],
"ToPort": 32163,
"UserIdGroupPairs": []
}
因此,现在我需要将“ 0.0.0.0/0”中的CidrIp更改为其他块。如何使用kubernetes清单执行此操作?我看过NetworkPolicy和Calico文档,但这可以控制到Pod而不是服务的流量。我可以使用AWS API或手动进行更改,但是当重新部署服务时,这些更改会丢失。
答案 0 :(得分:2)
您需要在服务清单中添加loadBalancerSourceRanges参数。
来自文档:
为了限制哪些客户端IP可以访问网络负载平衡器,请指定loadBalancerSourceRanges。
spec:
loadBalancerSourceRanges:
- "143.231.0.0/16"
https://v1-13.docs.kubernetes.io/docs/concepts/services-networking/service/
代码的实现方式可以在这里找到: