为什么Kubernetes尝试为服务类型ClusterIP创建负载均衡器?

时间:2017-11-14 22:38:34

标签: amazon-web-services kubernetes

我正在使用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尝试呢?

1 个答案:

答案 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服务帐户。