Kubernetes выставить сервис не назначать внешний ip - PullRequest
0 голосов
/ 28 июня 2018

У меня есть внутренний сервис, который создается с помощью первого cmd. Затем я запускаю kubectl expose на том сервисе, который создан.

kubectl -n XXX create -f service.yml
kubectl -n XXX get svc
NAME                                 TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                                                                            AGE
foo                           ClusterIP   10.152.183.41    <none>        8089/TCP


kubectl -n XXX expose service foo --type=NodePort --name=foo-ext
kubectl -n XXX get svc
NAME                                 TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                                                                            AGE
foo                           ClusterIP   10.152.183.41    <none>        8089/TCP                                                                           29m
foo-ext                   NodePort    10.152.183.177   <none>        8089:30406/TCP

Где внешний ip, я бы подумал, что kubectl expose назначил бы внешний ip для внешнего сервиса, есть ли дополнительный флаг, который мне нужно передать?

Ответы [ 2 ]

0 голосов
/ 28 июня 2018

LoadBalacer служба типа «назначает» внешний IP-адрес, но он зависит от поставщика облачных услуг, поэтому он не будет работать. Если у вас нет балансировщика нагрузки, указывающего на кластер (с внешним IP, конечно).

Из других сервисов единственным вариантом будет сервис типа NodePort, который отобразит ваш порт pod на порт на узле, так что он будет доступен из внешнего мира. Некрасивая часть состоит в том, что он будет на порте, подобном 30021 (между 30000-32767).

0 голосов
/ 28 июня 2018

Согласно документам Kubernetes :

Если вы установите поле типа в NodePort, мастер Kubernetes будет выделять порт из диапазона, указанного в флаге --service-node-port-range (по умолчанию: 30000-32767), и каждый узел будет проксировать этот порт ( один и тот же номер порта на каждом узле) в вашем сервисе.

Таким образом, Kubernetes гарантирует, что один и тот же номер порта будет открыт на всех узлах, на которых размещается эта служба. В этом случае внешний IP-адрес - это IP-адрес узла.

Принимая во внимание, что Kubernetes говорит это о Внешние IP-адреса :

Если существуют внешние IP-адреса, которые маршрутизируют к одному или нескольким узлам кластера, службы Kubernetes могут быть выставлены на этих внешних IP-адресах. Трафик, который поступает в кластер с внешним IP-адресом (в качестве IP-адреса назначения) через служебный порт, будет направляться на одну из конечных точек службы. externalIPs не управляются Kubernetes и находятся в ведении администратора кластера.

Недостатком сервиса типа NodePort является то, что он сам по себе не масштабируемый подход и не может быть обнаружен сервисом.

Если вы хотите предоставить сервис через один IP-адрес потребителям за пределами вашего кластера Kubernetes, вы можете рассмотреть тип сервиса LoadBalancer, если у вас есть общедоступное облако или гибридное облако Kubernetes. развертывание, или вы можете посмотреть Ingress, если у вас есть локальное развертывание Kubernetes.

...