2016-08-16 2 views
3

Я развернула службу в кластер kubernetes и это выглядит так:Expose существующих и развертывание службы Kubernetes через LoadBalancer

$ kubectl get svc my-service 
NAME    CLUSTER_IP  EXTERNAL_IP PORT(S) SELECTOR    AGE 
my-service   192.168.202.23 <none>  8080/TCP name=my-service   38d 

Спецификация часть YAML конфигурации выглядит так:

"spec": { 
     "ports": [ 
      { 
       "name": "http-port", 
       "protocol": "TCP", 
       "port": 8080, 
       "targetPort": 8080 
      } 
     ], 
     "selector": { 
      "name": "my-service" 
     }, 
     "clusterIP": "192.168.202.23", 
     "type": "ClusterIP", 
     "sessionAffinity": "None" 
    }, 
    "status": { 
     "loadBalancer": {} 
    } 
} 

Теперь я хочу, чтобы эта служба была доступна извне с помощью LoadBalancer. Использование kubectl разоблачить службы выдает ошибку следующим образом:

$ kubectl expose service my-service --type="LoadBalancer" 
Error from server: services "my-service" already exists 

Это не представляется возможным «редактировать» существующего развертывания службы и сделать его доступным извне?

ответ

2

Тип созданной службы: ClusterIP, которая не видна за пределами кластера. Если вы отредактируете услугу и измените поле type либо NodePort, либо LoadBalancer, оно выставит его.

Документация о том, что эти типы услуг и что они означают на: http://kubernetes.io/docs/user-guide/services/#publishing-services---service-types

+0

Я использую платформу gcloud - у меня была эта проблема. Когда я следую вашему ответу - это работает. но по какой-то причине внешний IP отказывается подключаться. любая идея почему? – fay

1

В дополнение к Anirudh ответ (правильный ответ) ... принимать во внимание следующее.

Действительные значения для поля ServiceType являются:

  • ClusterIP: использовать кластерную внутренний IP только - это значение по умолчанию и обсуждено выше. Выбор этого значения означает, что вы хотите, чтобы эта услуга была доступна только изнутри кластера.

  • NodePort: Помимо внутреннего IP-кластера, выставляем службу на порт на каждом узле кластера (тот же порт на каждом узле). Вы сможете связаться с сервисом по любому адресу: NodePort. Это означает, что вы переадресовываете порт узла в порт контейнера, который подвергается воздействию. Проблема. Эти порты должны быть внешне доступны на каждом узле кластера.

  • LoadBalancer: на вершине, имеющие кластерный внутренний IP и обнажая обслуживание на NodePort также, попроси поставщик облака для балансировки нагрузки, который направляет в Службу разоблачена как: NodePort для каждого узла LoadBalancer тип создает внешний поставщик балансировки нагрузки для поставщика облачных вычислений.

    Поддержка внешних балансировщиков зависит от поставщика, как и реализация. Поддерживаются GCE и AWS (не уверен, есть ли еще поддержка облачного провайдера), но если вы хотите установить его в свою собственную инфраструктуру, вам нужно будет установить контейнер HAPROXY или ngnix (или аналогичный) для балансирования трафика, эта функция вам не подходит.

+0

Спасибо! @ferradinand – chetan

Смежные вопросы