我正在尝试使用loadBalancer
类型的服务向外界公开服务。
为此,我一直在跟踪这位医生
https://aws.amazon.com/premiumsupport/knowledge-center/eks-kubernetes-services-cluster/
我的loadbalancer.yaml
看起来像这样
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
type: LoadBalancer
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: 80
但是负载均衡器没有按预期创建,我得到以下错误
Warning SyncLoadBalancerFailed 8s (x3 over 23s) service-controller Error syncing load balancer: failed to ensure load balancer: could not find any suitable subnets for creating the ELB
似乎是因为子网标签中的一些问题需要解决,但我的网络中有所需的标签。
kubernetes.io/cluster/<cluster-name>. owned
kubernetes.io/role/elb 1
但是,我仍然得到错误could not find any suitable subnets for creating the ELB
7条答案
按热度按时间jucafojl1#
默认情况下,AWS EKS仅将负载均衡器附加到公共服务器。为了在私有子网中启动它,你不仅需要标记你的负载均衡器(看起来你已经做了),还需要注解你的负载均衡器-
service.beta.kubernetes.io/aws-load-balancer-internal:“true”
您可以找到更多信息here。
dsekswqp2#
对于可能达到这个问题的人,我也面临过同样的错误,但问题真的很简单。
关键字为**kubernetes.io/cluster/**的标记具有错误的集群名称,因为部署它的自动化是错误的。
anhgbhbe3#
在EKS 1.16中,我需要面向互联网的NLB。
EKS中的根本原因是您在创建集群时没有选择公共子网。
创建群集后,EKS将不允许从现在起更新here
为了解决这个问题,我执行了以下步骤
1.在EKS的同一vpc中创建了
public subnet
1.在新创建的公共路由表中附加
IGW
1.在公共文件夹中的
tags
下方添加kubernetes.io/cluster/<EKSClusterName>
:shared
**注意:**在第4步中,替换占位符
EKSClusterName
中的EKS集群名称gj3fmq9x4#
除了Robert的回答之外,您还可以使用以下
kubectl
命令来注解服务:3zwjbxry5#
解决办法我的问题解决了。
为了识别集群的集群,Kubernetes Cloud Controller Manager(cloud-controller-manager)和AWS负载均衡器控制器(aws-load-balancer-controller)通过使用以下标记作为过滤器来查询集群的集群的集群:
选择适当的选项来标记您的电子邮件:
对于负载均衡资源使用的公有和私有队列使用以下键值对标记您的集群用于负载均衡资源的所有公有和私有队列:
Key:kubernetes.io/cluster/cluster-name Value:shared
cluster-name值适用于Amazon EKS群集。共享值允许多个群集使用子网。
对于内部负载均衡器使用的私有队列要允许Kubernetes将您的私有队列用于内部负载均衡器,请使用以下键值对标记您VPC中的所有私有队列:
Key:kubernetes.io/role/internal-elb Value:1
对于外部负载均衡器使用的公共队列若要允许Kubernetes仅对外部负载均衡器使用标记队列,请使用以下键值对标记您VPC中的所有公共队列:
Key:kubernetes.io/role/elb Value:1
注意:请使用前面的标记,而不要在每个可用区中使用公共子网。
参考:https://aws.amazon.com/premiumsupport/knowledge-center/eks-vpc-subnet-discovery/
nvbavucw6#
可能你的子网不是公共子网,也就是说。可从互联网访问。这将需要您的Loadbalancer接受来自外部世界的流量。为了将其公开,您需要将Internet网关连接到您的VPC。查看更多文档。
ktca8awb7#
通常,这个问题可以通过提供标签来解决,但是您也可以在服务中添加注解。例如:如果您将Loadbalancer公开给公众,您可以给予以下注解,这将解决这个问题。