我有使用graphql的经验,但这是我第一次尝试apollo federation和Kubernetes。
我首先尝试使用apollo Federation将整体graphql服务器拆分为微服务。它工作得很好(下面是工作代码)。现在我试图在kubernetes集群中运行这些微服务,但是apollo网关和其他后端服务之间的网络问题不断。
从apollo网关服务器(当我尝试在kubernetes上运行它时),我得到以下错误:
在auth-cluster-ip-service加载身份验证时遇到错误:仅支持绝对URL
这是将I服务添加到apollo网关的部分:
const gateway = new ApolloGateway({
serviceList: [
{ name: 'service1', url: process.env.SERVICE1_URL },
{ name: 'service2', url: process.env.SERVICE2_URL },
{ name: 'service3', url: process.env.SERVICE3_URL },
],
buildService({ name, url }) {
return new AuthenticatedDataSource({ name, url });
}
});
首先,我尝试使用以下环境变量
(.env)
SERVICE1_URL =http://localhost:3051
SERVICE2_URL =http://localhost:3052
SERVICE3_URL =http://localhost:3053
我只是简单地运行了4个节点应用在本地主机在我的笔记本电脑和它的工作!
现在是库伯内特的部分。
下面是Apollo-Gateway的部署配置文件。我怀疑问题出在环境变量中。正如您所看到的,在相应的环境变量值上有服务名称
而不是URL
。但是根据我所学到的知识,kubernetes master将获取这个“URL”(集群IP名称),并替换为相应POD的IP地址。所以应该没问题。
当我练习库伯内特时效果很好。在我的实践中,我通过集群IP名称连接到redis和postgres Pod。
apollo-gateway deploymant配置文件
apiVersion: apps/v1
kind: Deployment
metadata:
name: gateway-deployment
spec:
replicas: 1
selector:
matchLabels:
component: gateway
template:
metadata:
labels:
component: gateway
spec:
containers:
- name: gateway
image:<docker-id>/gateway
ports:
- containerPort: 4000
env:
- name: ACCESS_TOKEN_SECRET
value: fas69dO2Z15nkev6157
- name: SERVICE1_URL
value: service1-cluster-ip-service
- name: SERVICE2_URL
value: service1-cluster-ip-service
- name: SERVICE3_URL
value: service1-cluster-ip-service
示例服务群集-IP配置文件
apiVersion: v1
kind: Service
metadata:
name: service1-cluster-ip-service
spec:
type: ClusterIP
selector:
component: service1
ports:
- port: 3051
targetPort: 3051
服务部署配置文件示例
apiVersion: apps/v1
kind: Deployment
metadata:
name: service1-deployment
spec:
replicas: 1
selector:
matchLabels:
component: service1
template:
metadata:
labels:
component: service1
spec:
containers:
- name: auth
image:<docker-id>/service1
ports:
- containerPort: 3051
当错误消息显示“仅支持绝对URL”时,这意味着配置的URL需要包括http://
方案部分以及主机名。您可以通过更改环境设置来修复此问题
- name: SERVICE1_URL
value: 'http://service1-cluster-ip-service'
如果服务监听的不是默认HTTP端口80,您还需要在URL中包含该端口号。
我跟踪了服务,当它们部署在localhost中(通过eclipse)时,它们工作得很好。但在部署为单独的docker容器时无法调用rest服务。 我是一个新的docker并且参加了教程来了解这是如何工作的。 祖尔阿皮门路 用户服务 尤里卡注册服务信息 注意:“DE4396A354EA”是“用户服务”的容器id 请提供关于如何解决此问题的指导,并提供任何链接,我可以在这些链接中获得关于在docker
我对kubernetes相当陌生,我正试图在MacBook上使用minikube来编排我的rails应用程序。我的应用程序包括MySQL、Redis和Sidekiq。我在独立的豆荚里运行webapp、sidekiq、redis和数据库。Sidekiq吊舱没有连接到redis吊舱。 sidekiq吊舱的库贝特尔日志是这样说的: 我的webapp.yaml webapp-service.yaml Si
我想连接一个从mqtt设备接收数据的外部网关到我的AWS物联网核心。 在这张图片中,您可以找到(或多或少)该项目的概述。 项目详情 总而言之,我想将上一张图片的物联网网关连接到AWS物联网核心。 我看过很多类似主题的例子,但在其中没有一个能找到我想做的事情。 只有知道我的AWS云帐户的主机名/endpoint并将其放在我的getaway中以向该主机发送数据,才能做到这一点吗? 如何找到我的AWS主
我创建了一个副本zookeeper+kafka集群,使用来自官方孵化器repo的官方kafka图表: 如果我进入动物园管理员舱: 我使用工具测试TCP连通性。我预计会出现通信错误,因为服务器没有使用HTTP,但是如果curl连都不能连接,我不得不用ctrl-C输出,那么TCP连接就不能工作了。 我可以通过访问本地pod: 但是通过服务名连接到Kafka pod不起作用,我必须ctrl-C curl
我试图建立一个Flask应用程序,有Kafka作为一个界面。我使用了一个Python连接器,kafka-python和一个用于Kafka的Docker图像,Spotify/KafkaProxy。 下面是docker-compose文件。 我能够从烧瓶容器运行,并从Kafka容器获取数据包。 当我在本地运行Flask应用程序时,试图通过设置连接到Kafka容器,它可以正常工作。
是什么导致了这个错误,我如何修复它?