Golang客户端运行,正在等待将外部IP地址分配给Kubernetes服务

时间:2019-02-20 05:33:54

标签: go kubernetes client-go

我正在编写一些代码,这些代码需要我使用client-go API使用外部负载均衡器创建Kubernetes服务。该服务本身是立即创建的,但是为负载均衡器分配IP地址需要花费几秒钟的时间。分配IP地址后,它将被写入服务结构的Status.LoadBalancer.Ingress数组中。

当前,我的代码如下(为简洁起见,删除了一些细节):

func createService(id string) error {
    servicesClient := c.clientset.CoreV1().Services(apiv1.NamespaceDefault)
    service := &apiv1.Service{
    ObjectMeta: metav1.ObjectMeta{
            Name: serviceNamePrefix + id,
        },
        Spec: apiv1.ServiceSpec{
            Type:     apiv1.ServiceTypeLoadBalancer,
            Selector: map[string]string{"app": id},
        },
    }

    service, err = servicesClient.Create(service)
    if err != nil {
        return err
    }

    go func() {
        for len(service.Status.LoadBalancer.Ingress) == 0 {
            time.Sleep(1 * time.Second)
        }
        db.UpdateServiceURL(id, service.Status.LoadBalancer.Ingress[0])
    }

    return nil
}

理想情况下,我会像在this问题中那样使用条件变量。但是,我认为在这种情况下这是不可能的,因为我没有编写设置该值的代码。有没有更好的方法可以等待Ingress数组填充而不必不断循环?还是其他人遇到了这个问题并找到了更好的解决方案?

0 个答案:

没有答案