- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我创建了一个 node js TLS 服务器,对它进行了 docker 化,并为它创建了一个 K8S 部署和 ClusterIP 服务。我为 istio-ingressgateway 的 LoadBalancer 服务外部 IP 创建了一个 DNS,我正在使用这个 DNS 尝试使用 istio 访问这个 TLS 服务器,但由于某种原因出现这个错误
[2022-02-10T04:28:38.302Z] "- - -" 0 NR filter_chain_not_found - "-" 0 0 3087 - "-" "-" "-" "-" "-" "-" - - 10.120.22.33:7070 10.101.31.172:44748 - -
节点server.js文件:
const tls = require("tls");
const fs = require("fs");
const options = {
key: fs.readFileSync("server-key.pem"),
cert: fs.readFileSync("server-cert.pem"),
rejectUnauthorized: false,
};
process.env["NODE_TLS_REJECT_UNAUTHORIZED"] = 0;
const server = tls.createServer(options, (socket) => {
console.log(
"server connected",
socket.authorized ? "authorized" : "unauthorized"
);
socket.write("welcome!\n");
socket.setEncoding("utf8");
socket.pipe(socket);
});
server.listen(7070, () => {
console.log("server bound");
});
我用来连接服务器的client.js文件:
const tls = require("tls");
const fs = require("fs");
const options = {
ca: [fs.readFileSync("server-cert.pem", { encoding: "utf-8" })],
};
var socket = tls.connect(
7070,
"HOSTNAME",
options,
() => {
console.log(
"client connected",
socket.authorized ? "authorized" : "unauthorized"
);
process.stdin.pipe(socket);
process.stdin.resume();
}
);
socket.setEncoding("utf8");
socket.on("data", (data) => {
console.log(data);
});
socket.on("end", () => {
console.log("Ended");
});
集群服务.yaml
apiVersion: v1
kind: Service
metadata:
name: nodejs-service
namespace: nodejs-tcp
spec:
ports:
- name: web
port: 7070
protocol: TCP
targetPort: 7070
selector:
app: nodejs
sessionAffinity: None
type: ClusterIP
istio-gateway.yaml
apiVersion: networking.istio.io/v1beta1
kind: Gateway
metadata:
name: nodejs-gw
namespace: nodejs-tcp
spec:
selector:
istio: istio-ingressgateway
servers:
- hosts:
- 'HOSTNAME'
port:
name: tls
number: 7070
protocol: TLS
tls:
credentialName: tls-secret
mode: PASSTHROUGH
在 credentialName 中,我创建了一个通用 key ,其中包含私钥的值和服务器的证书
istio-virtual-service.yaml
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
name: nodejs-vs
namespace: nodejs-tcp
spec:
gateways:
- nodejs-gw
hosts:
- 'HOSTNAME'
tls:
- match:
- port: 7070
sniHosts:
- HOSTNAME
route:
- destination:
host: nodejs-service
port:
number: 7070
我使用的 Istio 版本:
client version: 1.12.2
control plane version: 1.12.2
data plane version: 1.12.2 (159 proxies)
非常感谢您的帮助。提前致谢。
最佳答案
我马上注意到的一件事是您在 istio-gateway
中使用了错误的选择器,它应该是:
spec:
selector:
istio: ingressgateway
一个好的故障排除起点是获取您的 ingressgateway
的路由并验证您是否看到了预期的路由。
kubectl get pods -n <namespace_of_your_app>
NAME READY STATUS RESTARTS AGE
pod/my-nginx-xxxxxxxxx-xxxxx 2/2 Running 0 50m
在我的部署中,它是一个 nginx pod。
istioctl pc routes <your_pod_name>.<namespace>
NOTE: This output only contains routes loaded via RDS.
NAME DOMAINS MATCH VIRTUAL SERVICE
my-nginx.default.svc.cluster.local:443 my-nginx /*
这是主机名“my-nginx”的输出示例。如果输出没有返回路由,通常意味着它不匹配 SNI 和/或找不到特定路由。
关于kubernetes - 使用 istio 连接到 Nodejs TLS 服务器时出现 NR filter_chain_not_found,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71066027/
我正在开发一个 voip 调用应用程序。我需要做的是在接到来电时将 Activity 带到前台。我在应用程序中使用 Twilio,并在收到推送消息时开始调用。 问题是我试图在接到任何电话时显示 Act
我是一名优秀的程序员,十分优秀!