Golang client-go ожидает назначения внешнего IP-адреса сервису Kubernetes - PullRequest
0 голосов
/ 20 февраля 2019

Я работаю над кодом, который требует от меня создания службы 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 не будет заполнен без необходимости постоянного цикла?Или кто-то еще имел эту проблему и нашел более хорошее решение?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...