如何连接位于私有(private)网络上并可以通过私有(private)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

这两个应用程序都在kubernetes相同的集群,不同的Pod上运行。私有(private)服务可在群集中访问,当我将exec放入前端 pods 时,我可以使用私有(private)ip地址访问graphql端点。

但是,在浏览器上,它没有连接并给出以下错误:ERR_CONNECTION_REFUSED

最佳答案

从外部访问内部kubernetes服务的3种主要方法是: NodePort LoadBalancer Ingress
您可以在这里了解它们之间的一些主要区别https://medium.com/google-cloud/kubernetes-nodeport-vs-loadbalancer-vs-ingress-when-should-i-use-what-922f010849e0

节点端口
将特定范围内的随机或手动选择的高端端口一对一映射到服务。
允许kubernetes随机选择一个高端口,或者从预定义的范围内手动定义一个高端口,默认范围是30000–32767(但可以更改),并以1对1的方式将其映射到内部服务端口。
警告:虽然可以为每个服务手动定义NodePort端口号,但是由于端口冲突等可能的问题,通常不建议使用该端口号。因此,在大多数情况下,应让群集为您随机选择一个NodePort端口号。
来自官方文档:https://kubernetes.io/docs/concepts/services-networking/service/#nodeport


负载均衡器
将服务附加到由IP提供商服务(例如云提供商Public IP Service)提供的外部ip。
此服务类型的功能取决于外部驱动程序/插件。大多数现代云都提供支持以为LoadBalancer定义提供公共(public)IP。但是,如果您正在旋转自定义群集而没有分配公共(public)IP的方法(例如,使用没有IP提供程序插件的Rancher),则可能要做的最好的事情就是将主机IP分配给单个服务。
来自官方文档:https://kubernetes.io/docs/concepts/services-networking/service/#loadbalancer


入口
运行中央应用程序路由器服务,该服务会接收某个端口(或多个端口)上的所有流量,并根据所请求的域和路径等参数将其路由到服务。
要安装它,您必须创建一个应用程序路由器服务(例如nginx),该服务在您的群集中运行并分析所创建的Ingress类型的每个新资源。然后,您可以创建Ingress资源,以定义所需的路由规则,例如侦听哪个DNS请求以及将该请求转发到哪个服务。
尽管为此目的存在多种解决方案,但我还是建议使用Nginx Ingress
https://github.com/helm/charts/tree/master/stable/nginx-ingress https://github.com/kubernetes/ingress-nginx
官方文件:

10-07 19:47
查看更多