首页 文章

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

提问于
浏览
1

我正在使用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 回答

  • 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服务帐户 .

相关问题