Reactjs 连接到专用ip地址-graphql-kubernetes

Reactjs 连接到专用ip地址-graphql-kubernetes,reactjs,kubernetes,graphql,Reactjs,Kubernetes,Graphql,如何连接私有网络上通过私有ip地址访问的graphqlapi。我的前端服务器和api位于VNET上 import { ApolloClient } from 'apollo-client' import { InMemoryCache } from 'apollo-cache-inmemory' import { createUploadLink } from 'apollo-upload-client' const uploadLink = createUploadLink({ ur

如何连接私有网络上通过私有ip地址访问的
graphql
api。我的前端服务器和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
这两个应用程序都运行在同一集群不同的pod上。在集群内可以访问私有服务,当我
exec
进入前端pod时,我可以使用私有ip地址访问
graphql
端点

但是,在浏览器上,它没有连接并出现以下错误:
ERR\u CONNECTION\u densed

前端(公共ip)-->graphql(私有ip)


您似乎回答了自己的问题:该IP地址是私有的。

您需要设置服务定义以便向公众公开。

从外部访问内部kubernetes服务的三种主要方法是:节点端口负载平衡器入口

你可以在这里了解它们之间的一些主要区别


节点端口 将随机或手动选择的高端端口从特定范围以1:1的比例映射到服务。 允许kubernetes随机选择一个高端口,或从预定义范围(默认范围为30000–32767,但可以更改)手动定义一个高端口,并以1:1的方式将其映射到内部服务端口

警告:尽管可以为每个服务手动定义NodePort端口号,但由于可能存在端口冲突等问题,通常不建议使用该端口号。因此,在大多数情况下,您应该让集群为您随机选择一个NodePort端口号

从官方文件:

如果将type字段设置为NodePort,则Kubernetes主机将 从--service node port range指定的范围分配端口 标志(默认值:30000-32767),每个节点将代理该端口( 每个节点上都有相同的端口号)


负载平衡器 将服务附加到ip提供商服务(如云提供商公共ip服务)提供的外部ip。 此服务类型的功能取决于外部驱动程序/插件。大多数现代云都支持为LoadBalancer定义提供公共IP。但是,如果您正在旋转一个定制集群,而没有办法分配公共IP(例如Rancher没有IP提供程序插件),那么您最好将主机的IP分配给单个服务

从官方文件:

在支持外部加载的云提供商上 balancers,将type字段设置为LoadBalancer将提供 为您的服务提供负载平衡器。加载的实际创建 平衡器以异步方式进行,并提供有关配置的信息 平衡器将在服务的.status.loadBalancer中发布 场


进入 运行中央应用程序路由器服务,该服务接收特定端口(或多个端口)上的所有流量,并根据请求的域和路径等参数将其路由到服务。 要安装它,您必须创建一个应用程序路由器服务(如nginx),该服务在集群中运行,并分析创建的每一个入口类型的新资源。然后创建入口资源,定义您想要的路由规则,例如侦听哪个DNS请求以及将请求转发到哪个服务

尽管有多种解决方案可用于此目的,但我建议使用Nginx入口

官方文件:

什么是入口?通常,服务和POD只有IP可路由 通过集群网络。所有到达边缘路由器的流量都是 被丢弃或转发到其他地方。从概念上讲,这可能看起来 比如:

流量、终止SSL、提供基于名称的虚拟主机等等。 用户通过将入口资源发布到API来请求入口 服务器。入口控制器负责完成以下任务: 入口,通常使用负载平衡器,但也可以配置 您的边缘路由器或其他前端可帮助处理网络中的流量 幽默的举止


谢谢你详细的回答。但是,我不想向公众公开私有API。它只能通过前端服务访问。正如您所看到的,我的javascript代码私有服务正在从外部调用。我如何使请求通过集群内的前端应用程序进行路由(前端向外界公开)?许多kubernetes安装包括自动DNS,为创建的每个服务创建DNS条目。您可以通过以下方式引用服务:同一命名空间中的两个服务:
servicename:port
--同一集群中的服务,不同的命名空间:
servicename。命名空间:port
@RonakPatel如果您想访问集群外的集群表单中的任何内容(浏览器)在集群术语(集群外部)中,它被认为是公共的,这意味着您可能需要实现上述解决方案之一才能访问它。您可以反过来限制该方法。例如,如果您在服务器的端口80上运行入口,则可以通过防火墙将所有端口80流量限制到群集计算机
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