Gcloud kubernetes кластер доступ к интернету - PullRequest
0 голосов
/ 30 мая 2019

Pod в кластере gcloud kubernetes не доступен из Интернета.Доступ из kubernetes или облачной оболочки работает нормально.

Существует несколько способов сделать стручок доступным снаружи кластера kubernetes.Я пробовал три разных способа.

Мой кластер kubernetes не является частным, это означает, что команда

kubectl get nodes - o wide 

имеет внешний IP-адрес.IP доступен снаружи проекта gc.

Я создал модуль с использованием yaml модуля Pod, а не с помощью deployConfig.Модуль имеет два порта контейнера:

ports:
  - containerPort: 8500
  - containerPort: 8501

Модуль работает. Порты открыты внутри контейнера.Теперь я создал сервисы по-разному.

Создание разных сервисов.Служба и модуль подключены через селектор

app=myapp

1 NodePort: Использование внешнего IP-адреса из кластера kubernetes.Я создал сервис из типа NodePort.Доступ должен работать через кластер IP:

2 LoadBalancer: создание службы с типом Loadbalanacer создает внешний IP-адрес для службы.

kubectl get service -o wide

kubectl expose pod myapp --port 8500 --target-port=8500 --type=Loadbalancer

Я получил второй внешний IP-адрес.Доступ извне через «ip-адрес: порт» не работает

3 HostPort: порт контейнера будет открыт для внешней сети по адресу:, где hostIP - это IP-адрес узла Kubernetes, гдеконтейнер работает, а hostPort - это порт, запрошенный пользователем.

Использование этого учебного пособия: http://alesnosek.com/blog/2017/02/14/accessing-kubernetes-pods-from-outside-of-the-cluster/

Единственное, что мне помогло, - это использовать порт 80. Я использовал порт 80 дляконечная точка rest, но у меня есть 2 конечных точки rest и grpc, и оба должны быть предоставлены.

В целом я создал правила брандмауэра для портов, которые использовал:

gcloud compute firewall-rules create MY-RULE \
  --allow tcp:8500-8501

У меня ничего не получалось.Теперь я верю, что мне чего-то не хватает.Заранее спасибо.

С наилучшими пожеланиями, Джерн

1 Ответ

0 голосов
/ 31 мая 2019

Давайте сосредоточимся на втором варианте, который вы пробовали (открыть приложение через LoadBalancer):

Я предполагаю, что вы используете GKE (Google Kubernetes Engine)

Прежде всего, я вижу, что в вашей команде 'expose' есть опечатка (типы служб чувствительны к регистру):

изменение:

--type=Loadbalancer

до:

--type=LoadBalancer

Вы не делаете ничего плохого, поэтому служба HTTP (s) должна работать, пожалуйста, быстро проверьте, полностью ли функционирует ваш кластер Kubernetes, с помощью следующих команд:

kubectl create ns demo
kubectl -n demo run myapp --generator=run-pod/v1 --image=nginx
kubectl -n demo expose pod myapp --port 8500 --target-port=80 --type=LoadBalancer

и попробуйте запустить приложение на <EXTERNAL-IP>:<8500>

для grpc-сервисов все усложняется, пожалуйста, следуйте этому руководству о том, как это сделать в GKE.

...