我正在尝试在本地 Kubernetes 集群上设置 Ingress NGINX(使用启用了 Kubernetes 的 Windows 版 Docker Desktop)来公开多个微服务,但我遇到了“502 Bad Gateway”错误和“connect() failed (111)” :连接被拒绝)”和“服务‘default/auth-cluster-ip’在入口 NGINX 日志中没有任何活动端点”。
Kubernetes 对象配置是使用 YAML 文件完成的。
这是我的 Ingress NGINX 配置 yaml:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress-service
annotations:
nginx.ingress.kubernetes.io/use-regex: "true"
spec:
ingressClassName: nginx
rules:
- host: instagram-clone.dev
http:
paths:
- path: /v1/auth/?(.*)
pathType: ImplementationSpecific
backend:
service:
name: auth-cluster-ip
port:
number: 3000
- path: /v1/profile/?(.*)
pathType: ImplementationSpecific
backend:
service:
name: profile-cluster-ip
port:
number: 3000
这是 auth 部分的部署和服务配置,供参考:
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: instagram-clone/auth
env:
- name: JWT_SECRET
valueFrom:
secretKeyRef:
name: jwt-secret
key: JWT_SECRET
---
apiVersion: v1
kind: Service
metadata:
name: auth-cluster-ip
spec:
selector:
app: auth
ports:
- name: auth
protocol: TCP
port: 3000
targetPort: 3000
我还用这一行更新了主机文件:127.0.0.1 instagram-clone.dev
这是我的node.js auth微服务index.js:
export const app = express();
app.use(json());
app.use("/", authRouter);
采取的调试步骤:
该错误与我在微服务中定义路径的方式有关。我最初认为与入口文件中定义的基本 URL 匹配的每个请求都会被转发到正确的 pod,而 URL 的其余部分则由微服务本身处理。我只是误解了入口配置中的路由定义实际上是如何工作的。 挂载路由的正确路径定义是:
app.use("/v1/auth", authRouter);
就像 Ingress 配置文件中定义的那样。
希望这对某人有帮助。