【发布时间】:2018-05-17 10:11:48
【问题描述】:
我有一个用 typescript 编写的小型微服务,在 AKS 上的 kubernetes 集群中运行。 我使用 Helm 生成了入口
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: test-service
labels:
app: test-service
chart: test-service-0.1.0
release: test-service
heritage: Tiller
annotations:
ingress.kubernetes.io/rewrite-target: /
kubernetes.io/ingress.class: nginx
kubernetes.io/tls-acme: "true"
spec:
tls:
- hosts:
- test.xyz
secretName: default-tls
rules:
- host: test.xyz
http:
paths:
- path: /payments
backend:
serviceName: test-service
servicePort: 4040
还有服务
apiVersion: v1
kind: Service
metadata:
name: existing-bumblebee-payments-service
labels:
app: test-service
chart: test-service-0.1.0
release: existing-bumblebee
heritage: Tiller
spec:
type: ClusterIP
ports:
- port: 4040
targetPort: 4040
protocol: TCP
selector:
app: test-service
release: existing-bumblebee
在我的微服务中
export class Server {
private registerRoutes() {
this.app.use("/cards", CardRouter);
this.app.use("/wallets", WalletRouter);
this.app.use("/preauth", PreauthRouter);
this.app.use("/charge", ChargeRouter);
}
}
路由器看起来像这样;
import { Router } from "express";
// other imports
import { checkSchema, check } from "express-validator/check";
const router = Router();
router.get("/", CardController.index);
router.get("/:id", [
check("id")
.isUUID()
.withMessage("Invalid UUID")
], CardController.get);
router.delete("/:id", [
check("id")
.isUUID()
.withMessage("Invalid UUID")
], CardController.remove);
router.post("/", checkSchema(CardCreateRules), CardController.add);
export default router;
但是通过https://test.xyz/payments/cards访问服务会导致express出现404错误
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Error</title>
</head>
<body>
<pre>Cannot GET /payments/cards</pre>
</body>
</html>
我可以判断响应来自快速服务器,因为它具有服务器设置的自定义响应标头。 我真的很困惑出了什么问题,任何帮助将不胜感激。
【问题讨论】:
-
这里没有足够的信息来解决问题。 test.xyz 的 DNS 中的 IP 绝对是您创建的 nginx 入口的 IP,并且仍不指向默认入口吗?
-
@SimonMcClive 是的。该 IP 由 Azure AKS 预配。
-
你有你的服务定义/NodePort定义yaml你可以分享。
-
@SimonMcClive 我已经用服务定义更新了帖子
-
您的路由器是什么样的?你能举个例子吗?
标签: javascript typescript express kubernetes-helm kubernetes-ingress