Golang client-go ожидает назначения внешнего IP-адреса сервису Kubernetes

Я работаю над кодом, который требует от меня создания службы Kubernetes с помощью внешнего балансировщика нагрузки с использованием API-интерфейса client-go. Сам сервис создается сразу, но для балансировщика нагрузки назначается 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
}

В идеале я бы использовал условную переменную, как в этом вопросе. Однако я не думаю, что это было бы возможно в этой ситуации, поскольку я не пишу код, в котором установлено значение. Есть ли какой-нибудь лучший способ подождать, пока массив Ingress не будет заполнен без необходимости постоянного цикла? Или кто-то еще имел эту проблему и нашел более хорошее решение?

0 ответов

Другие вопросы по тегам