如何连接专用网络上的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)
答案 0 :(得分:1)
从外部访问内部kubernetes服务的3种主要方法是: NodePort , LoadBalancer 和 Ingress 。
了解它们之间的一些主要区别。要么允许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的方法(例如,使用没有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地址是私有的。
您需要设置服务定义,以便将其公开。