Подключиться к частному IP-адресу - graphql - kubernetes - PullRequest
0 голосов
/ 27 сентября 2018

Как подключить graphql API, который находится в частной сети и доступен через частный IP-адрес.Мой внешний сервер и API-интерфейс находятся на VNET.

import { ApolloClient } from 'apollo-client'
import { InMemoryCache } from 'apollo-cache-inmemory'
import { createUploadLink } from 'apollo-upload-client'

const uploadLink = createUploadLink({
    uri: 'http://10.0.0.10:3000'+'/api'
})

const client = new ApolloClient({
    link: uploadLink,
    cache: new InMemoryCache()
})
export default client

Оба приложения работают на kubernetes разных кластерах одного и того же кластера.Частные службы доступны в кластере, и когда я exec в интерфейсном модуле, я могу получить доступ к конечной точке graphql с частным IP-адресом.

Но, в браузере, это не соединяется и выдает эту ошибку: ERR_CONNECTION_REFUSED

внешний интерфейс (публичный ip) -> graphql (частный ip)

Ответы [ 2 ]

0 голосов
/ 27 сентября 2018

3 основных метода доступа к внутреннему сервису kubernetes: NodePort , LoadBalancer и Ingress .

. Вы можетео некоторых основных различиях между ними читайте здесь https://medium.com/google-cloud/kubernetes-nodeport-vs-loadbalancer-vs-ingress-when-should-i-use-what-922f010849e0


NodePort

Отображение произвольно или вручную выбранного высокого порта из определенного диапазона в службу от 1 до 1.

Либо разрешите kubernetes случайным образом выбрать высокий порт, либо вручную определите высокий порт из предварительно определенного диапазона, который по умолчанию составляет 30000–32767 (но его можно изменить), и сопоставьте его с внутренним сервисным портом наот 1 до 1.

Предупреждение. Хотя можно вручную определить номер порта NodePort для каждой службы, обычно это не рекомендуется из-за возможных проблем, таких как конфликты портов.Поэтому в большинстве случаев вы должны позволить кластеру случайным образом выбрать номер порта NodePort для вас.

Из официальных документов: https://kubernetes.io/docs/concepts/services-networking/service/#nodeport

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


LoadBalancer

Присоединение службы к внешнему IP-провайдеру, предоставляемому службой IP-провайдера, такой как облачная служба Public IP Service.

Функциональностьэтот тип сервиса зависит от внешних драйверов / плагинов.Большинство современных облаков предлагают поддержку для предоставления общедоступных IP-адресов для определений LoadBalancer.Но если вы вращаете пользовательский кластер без средств для назначения общедоступных IP-адресов (например, с помощью Rancher без плагинов для провайдеров IP-адресов), лучшее, что вы можете сделать с этим, - это назначить IP-адрес хост-машины одной службе.

Из официальных документов: https://kubernetes.io/docs/concepts/services-networking/service/#loadbalancer

В облачных провайдерах, которые поддерживают внешние балансировщики нагрузки, установка поля типа в LoadBalancer обеспечит балансировщик нагрузки для вашей службы.Фактическое создание балансировщика нагрузки происходит асинхронно, и информация о подготовленном балансировщике будет опубликована в поле службы .status.loadBalancer.


Вход

Запустить централизованное управлениеслужба приложения-маршрутизатора, которая получает весь трафик через определенный порт (или порты) и направляет его в службы на основе параметров, таких как запрашиваемый домен и путь.

Чтобы установить его, необходимо создать службу-маршрутизатор приложения (например, nginx).), который работает в вашем кластере и анализирует каждый новый созданный ресурс типа Ingress.Затем вы создаете ресурс Ingress, который определяет правила маршрутизации, которые вы хотели бы, например, какой DNS-запрос прослушивать и какой службе пересылать запрос.

Хотя для этой цели существует несколько решений, я рекомендую Nginx Ingress

https://github.com/helm/charts/tree/master/stable/nginx-ingress https://github.com/kubernetes/ingress-nginx

Официальные документы:

Что такое Ingress?Как правило, сервисы и модули имеют IP-адреса, маршрутизируемые только сетью кластера.Весь трафик, который заканчивается на пограничном маршрутизаторе, либо отбрасывается, либо перенаправляется в другое место.Концептуально это может выглядеть так:

internet
    |   ------------   [ Services ] An Ingress is a collection of rules that allow inbound connections to reach the cluster services.

internet
    |    [ Ingress ]    --|-----|--    [ Services ] It can be configured to give services externally-reachable URLs, load balance

трафик, прекращение SSL, виртуальный хостинг на основе имени и многое другое.Пользователи запрашивают вход, размещая ресурс Ingress на сервере API.Контроллер Ingress отвечает за выполнение Ingress, как правило, с помощью балансировщика нагрузки, хотя он также может настраивать ваш пограничный маршрутизатор или дополнительные интерфейсы, чтобы помочь обработать трафик способом HA.

0 голосов
/ 27 сентября 2018

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...