Следуя этому руководству по гостевой книге.
Ближе к концу они как бы замалчивают, как создать LoadBalancer
или назначить NodePorts
к сервису. Они ссылаются этот документ это описывает различные типы и то, что они делают, но на самом деле не вдавается в подробности о том, как их применить к службе. Есть ли способ обновить работающую службу, создав и подключив балансировщик нагрузки к указанным портам?
Используя Amazon Web Services для размещения нашего кластера, он отлично поддерживает балансировщик нагрузки при создании службы, но я не уверен, как изменить эту службу.
РЕДАКТИРОВАТЬ:
Это привело к ошибке:
$ kubectl предоставляет интерфейс сервиса --port = 80 --type = LoadBalancer
Ошибка сервера: служба "интерфейс" уже существует
Это довольно запутанно, но очевидно kubectl expose
может только создать новую услугу, но не обновить существующую. В нем говорится, что при запуске существующей службы вы должны передать --name
флаг, чтобы указать желаемое имя новой службы, чтобы избежать конфликта, который вы наблюдали.
Чтобы обновить службу на месте, вы должны иметь возможность использовать либо kubectl patch
или kubectl update
. Вероятно, это не оптимальный подход, но я лично склонен делать такие вещи, выполняя kubectl get svc svc-name -o yaml > svc.yaml
, обновляя svc.yaml по желанию (чтобы type: LoadBalancer
в данном случае), то kubectl update -f svc.yaml
.
Я не уверен, подходит ли это для вашего случая, но более радикальным и простым подходом было бы удаление службы (но не развертывания):
kubectl delete service 'service-name'
и повторно выставляем развертывание как LoadBalancer:
kubectl expose deployment/'deployment-name' --type="LoadBalancer"
Вы можете сделать это либо:
kubectl edit <SERVICE_NAME>
и измените тип на "LoadBalancer" в редактореkubectl patch <SERVICE_NAME> -p '{"spec":{"type":"LoadBalancer"}}'