gpt4 book ai didi

docker - Apollo 网关(联邦)无法连接到kubernetes环境中的服务

转载 作者:行者123 更新时间:2023-12-02 11:55:41 25 4
gpt4 key购买 nike

我对graphql有经验,但是这是我第一次尝试阿波罗联盟和kubernetes。

我首先尝试使用阿波罗联盟将我的整体graphql服务器拆分为微服务。
它工作正常(下面是工作代码)。现在,我试图在kubernetes集群中运行这些微服务,但是在apollo网关和其他后端服务之间仍然存在网络问题。

从阿波罗网关服务器(当我尝试在kubernetes上运行它时),出现此错误:
Encountered error when loading auth at auth-cluster-ip-service: Only absolute URLs are supported
这是将我的服务添加到阿波罗网关的部分:

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

我只是在笔记本电脑上的localhost上运行了4个节点应用程序,所以它可以运行!

现在是kubernetes部分。

以下是阿波罗网关的部署配置文件。我怀疑问题出在环境变量之内。如您所见,我将 url替换为相应的环境变量的值,而不是 service name。但是据我了解,kubernetes master将获取此“url”(群集IP名称)并替换为相应容器的IP地址。所以应该没问题。

当我练习kubernetes时,效果很好。在我的实践中,我通过clusterIP名称连接到Redis和Postgres Pod。

阿波罗网关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


样本SERVICE群集IP配置文件
apiVersion: v1
kind: Service
metadata:
name: service1-cluster-ip-service
spec:
type: ClusterIP
selector:
component: service1
ports:
- port: 3051
targetPort: 3051

样本SERVICE部署配置文件
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中包含该端口号。

关于docker - Apollo 网关(联邦)无法连接到kubernetes环境中的服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60883100/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com