连接到私有IP地址-graphql-kubernetes

时间:2018-09-26 21:38:37

标签: reactjs kubernetes graphql

如何连接专用网络上的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相同集群的不同Pod上运行。可以在群集中访问私有服务,并且当我exec进入前端窗格时,我可以使用私有IP地址访问graphql端点。

但是,在浏览器上,它没有连接并显示此错误:ERR_CONNECTION_REFUSED

  

前端(公共ip)-> graphql(专用ip)

2 个答案:

答案 0 :(得分:1)

从外部访问内部kubernetes服务的3种主要方法是: 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提供商服务(例如云提供商Public IP Service)提供的外部ip。

此服务类型的功能取决于外部驱动程序/插件。大多数现代云都提供支持以为LoadBalancer定义提供公共IP。但是,如果您正在旋转一个自定义群集而没有分配公共IP的方法(例如,使用没有IP提供程序插件的Rancher),那么您可能要做的最好的事情就是将主机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?通常,服务和Pod仅具有可路由的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   服务器。入口控制器负责实现   入口,通常使用负载均衡器,但也可以配置   您的边缘路由器或其他前端,以帮助处理流量   高可用性方式。

答案 1 :(得分:0)

您似乎在回答自己的问题:IP地址是私有的。
您需要设置服务定义,以便将其公开。