Как открыть службу Kubernetes извне с помощью NodePort

Я запускаю кластер CoreOS k8s на Mac OSX, что означает, что он работает внутри VirtualBox + Vagrant

В моем файле service.yaml:

spec:
  type: NodePort

Когда я печатаю:

kubectl get services

Я вижу:

NAME             CLUSTER_IP       EXTERNAL_IP   PORT(S)    SELECTOR                                
kubernetes       10.100.0.1       <none>        443/TCP    <none>                             
my-frontend      10.100.250.90    nodes         8000/TCP   name=my-app

Каков внешний IP-адрес? Как получить доступ к внешнему интерфейсу извне?

Ответы

Ответ 1

В дополнение к типам услуг "NodePort" есть несколько дополнительных способов взаимодействия с службами кубернетов извне кластера:

  • Использовать тип сервиса "LoadBalancer". Он работает только для некоторых облачных провайдеров и не будет работать для виртуального бокса, но я думаю, что будет хорошо знать об этой функции. Ссылка на документацию
  • Используйте одну из последних функций, называемую "вход". Вот описание из руководства "Ingress - это набор правил, позволяющих входящим соединениям обращаться к службам кластера. Он может быть настроен на предоставление сервисов, доступных для доступа к внешним ресурсам, трафик с балансировкой нагрузки, завершение SSL, предоставление виртуального хостинга на основе имени и др." . Ссылка на документацию
  • Если kubernetes не является строгим требованием, и вы можете переключиться на новейшую начальную начальную позицию (которая является "кубернетами на стероидах" ), вы можете использовать функцию происхождения, называемую "маршрутизатор".

Ответ 2

Я предполагаю, что вы используете MiniKube для Kubernetes. В этом случае для идентификации вашего IP-адреса node используйте следующую команду:

.\minikube.exe ip

Если открытая служба имеет тип = Nodeport, для проверки открытого порта используйте следующую команду:

.\kubectl.exe describe service <service-name>

Проверьте результат node в результате. Кроме того, если вы хотите получить все эти данные с помощью приятного пользовательского интерфейса, вы можете запустить панель приборов Kubernetes по следующему адресу:

<Node-ip>:30000

Ответ 3

Самый простой способ получить порты хоста - kubectl describe services my-frontend. Откроется порт node.

Также вы можете проверить api:

  • api/v1/namespaces/{namespace_name}/services/{service_name}

или перечислить все:

  • api/v1/namespaces/default/services

Наконец, вы можете выбрать фиксированный nodePort в service.yml

Ответ 4

Вот документ на адресах node: http://kubernetes.io/docs/admin/node/#addresses

Вы можете указать номер порта nodePort при указании службы. Если вы не указали вручную порт, система выделит его для вас. Вы можете kubectl get services -o yaml и найти порт в spec.ports [*]. NodePort, как предлагается в документе: https://github.com/kubernetes/kubernetes/blob/master/docs/user-guide/services.md#type-nodeport

И вы можете получить доступ к своему интерфейсу на внешних адресах {nodes]: {nodePort}

Надеюсь, что это поможет.