【发布时间】:2020-11-19 04:10:39
【问题描述】:
我正在尝试让 https 在 express.js 上为 K8s 部署中的节点工作,但我不知道如何。
快递应用应该是这样工作的:
- 当您访问
/healthz端点时,返回200(http和https请求) - 将任何其他
http流量重定向到https
我面临的问题是应用程序正在侦听两个不同的端口(@987654328@ 和 8443),但 K8s Ingress 仅指向单个端口 - 我正在考虑使用 Nginx 解决这个问题作为反向代理,但是,我如何将两个容器“链接”在一起?
这是我的app.ts:
import express from "express"
import { createServer as httpServer } from "http"
import { createServer as httpsServer } from "https"
import { readFileSync } from "fs"
const app = express()
const options = {
key: readFileSync(`${__dirname}/cert/[company].key`),
cert: readFileSync(`${__dirname}/cert/[company].crt`),
}
app.use("/healthz", (req, res) => {
res.status(200).send("healthy")
})
app.use("*", (req, res) => {
if (!req.secure) {
return res.redirect(["https://", req.get("Host"), req.baseUrl].join(""));
}
})
app.get("/", (req, res) => {
res.status(200).send("Hello from Express!")
})
httpServer(app).listen(8080)
httpsServer(options, app).listen(8443)
这是Dockerfile:
FROM node:14.4.0-alpine
...
EXPOSE 8080 8443
CMD [ "yarn", "start" ]
这是Ingress.yaml:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
...
spec:
tls:
- secretName: [secret-name]
rules:
- host: [company]
http:
paths:
- backend:
serviceName: [service-name]
servicePort: 8080
您能否指出正确的方向,如何解决/解决这个问题?
【问题讨论】:
-
您可以在 express 应用程序内部将所有 http 请求重定向到 https。
标签: node.js express kubernetes https