我正在使用Ingress从Kubernetes集群外部公开我的服务,因此我不需要Kubernetes来配置负载均衡器。因此,我创建了一个ClusterIP服务:
apiVersion: v1
kind: Service
metadata:
name: myapp
namespace: default
spec:
ports:
- port: 80
targetPort: 8080
selector:
app: myapp
type: ClusterIP
此有效 - 我设置了单独的Ingress和部署,我可以正常访问该应用。
但是,Kubernetes坚持尝试创建一个负载均衡器。由于我的AWS账户中没有权限,因此我创建的每项服务都会记录如下错误:
FirstSeen LastSeen Count From SubObjectPath Type Reason Message
--------- -------- ----- ---- ------------- -------- ------ -------
22s 22s 1 service-controller Warning CreatingLoadBalancerFailed Error creating load balancer (will retry): Error getting LB for service default/myapp: AccessDenied: User: -redacted- is not authorized to perform: elasticloadbalancing:DescribeLoadBalancers with an explicit deny
status code: 403, request id: -redacted-
我认为它正在尝试DescribeLoadBalancers,因为它打算创建一个。文档声称只应在you specify service type "LoadBalancer"时创建负载均衡器。我怎么能阻止Kubernetes尝试呢?
答案 0 :(得分:1)
它不是想创造一个。您收到来自service_controller.go:287的错误消息:
func (s *ServiceController) createLoadBalancerIfNeeded(key string, service *v1.Service) (error, bool) {
[...]
if !wantsLoadBalancer(service) {
_, exists, err := s.balancer.GetLoadBalancer(s.clusterName, service)
if err != nil {
return fmt.Errorf("Error getting LB for service %s: %v", key, err), retryable
}
[...]
反过来GetLoadBalancer
正在调用cloudprovider来描述(检查是否存在)。我建议您为此特定操作授权aws服务帐户。