如何解决如何让快速网关在 kubernetes 中工作?
我正在构建一个微服务应用程序,我在其中使用 nginx-ingress 来连接我所有运行良好的服务,但现在我想添加一些高级功能,例如 jwt-authentication。与其在每个服务中都实现它,我想我会使用 API 网关并选择 express-gateway,因为它设置起来似乎很简单。我在本地测试了一切(没有 docker/kubernetes),一切都按预期在不到 5 分钟的时间内运行。
我的问题是我无法让网关将请求传递给实际服务。请求到达网关。我在 Ubuntu 上使用 minikube 并在我的主机文件中添加了一个主机,这样我就不必记住 minikube IP。 通常我会在 https://app.dev/api/users/signup 之前联系我。
这是我的 gateway.config.yaml
http:
port: 8080
apiEndpoints:
auth:
host: '*'
path: '/api/users/*'
serviceEndpoints:
authsrv:
url: 'http://localhost:3000/'
policies:
- basic-auth
- cors
- expression
- key-auth
- log
- oauth2
- proxy
- rate-limit
pipelines:
auth:
apiEndpoints:
- auth
policies:
- proxy:
- action:
serviceEndpoint: authsrv
changeOrigin: true
apiEnpoints 用于配置您调用的路由,而 serviceEndpoints 是网关调用的内容,因此是微服务的内部 IP。我认为这是我不知道实际主机是什么或网关如何获取此信息的问题。当我使用 ingress-nginx 时,我从不需要指定微服务的主机。因为每次你启动它的权利都不一样,所以我不明白我必须在这里做什么。有什么建议吗?遗憾的是,express gateway 没有关于如何使用 kubernetes 进行设置的文档,文档只是说它可能): 这是我的其余配置:my-service-depl.yaml(简单的 NodeJS express 应用程序)
apiVersion: apps/v1
kind: Deployment
metadata:
name: auth-depl
spec:
replicas: 1
selector:
matchLabels:
app: auth
template:
metadata:
labels:
app: auth
spec:
containers:
- name: auth
image: henryfoster/auth
---
apiVersion: v1
kind: Service
metadata:
name: auth-srv
spec:
selector:
app: auth
ports:
- name: auth
protocol: TCP
port: 3000
targetPort: 3000
ingress-srv.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress
spec:
backend:
serviceName: gateway
servicePort: 8080
gateway-depl.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: gateway
spec:
selector:
matchLabels:
app: gateway
replicas: 1
template:
metadata:
labels:
app: gateway
spec:
containers:
- name: gateway
image: henryfoster/gateway
env:
- name: LOG_LEVEL
value: info
---
apiVersion: v1
kind: Service
metadata:
name: gateway
spec:
ports:
- name: http
protocol: TCP
port: 8080
targetPort: 8080
selector:
app: gateway
type: ClusterIP
快速网关:Dockerfile
FROM expressgateway/express-gateway
COPY ./config/ /var/lib/eg/
解决方法
现在我明白了。在 Kubernetes 内部,服务名称是其 IP 的域,因此要在 Kubernetes 内部调用服务,在这种情况下我必须使用服务名称:auth-srv。 而不是:
serviceEndpoints:
authsrv:
url: 'http://localhost:3000/'
使用服务名称作为主机:
serviceEndpoints:
authsrv:
url: 'http://auth-srv:3000/'
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。