【发布时间】:2019-11-22 21:55:10
【问题描述】:
我有一个 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 或手动更改它,但这些更改会在重新部署服务时丢失。
【问题讨论】:
-
确认一下,您正在尝试为不在 Kubernetes 中的东西制作任何内部负载均衡器?因为对于 k8s 中的其他东西,您根本不会使用负载均衡器类型。
-
是的,客户端在 Kubernetes 和 AWS 之外。
标签: amazon-web-services kubernetes amazon-eks