Как открыть службу 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}
Надеюсь, что это поможет.