从 node.js 连接到 kubernetes 上的 ejabberd 运行 时出错
Error Connecting to ejabberd running on kubernetes from node.js
我正在尝试创建一个聊天应用程序来增强我的投资组合。
为此,我使用 xmpp 作为我的消息服务器。所以,我运行使用以下配置在 kubernetes 上使用 ejabberd
apiVersion: apps/v1
kind: Deployment
metadata:
name: ejabberd-depl
labels:
app: ejabberd
spec:
replicas: 1
selector:
matchLabels:
app: ejabberd
template:
metadata:
labels:
app: ejabberd
spec:
containers:
- name: ejabberd
image: ejabberd/ecs
ports:
- containerPort: 5280
- containerPort: 5222
- containerPort: 5269
---
apiVersion: v1
kind: Service
metadata:
name: ejabberd-srv
spec:
selector:
app: ejabberd
ports:
- name: ejabberd
protocol: TCP
port: 5222
targetPort: 5222
- name: admin
protocol: TCP
port: 5280
targetPort: 5280
- name: encrypted
protocol: TCP
port: 5269
targetPort: 5269
我正在使用该服务向我的整个应用公开 ejabberd。
正在使用包“@xmpp/client”连接到 ejabberd“
import {client, xml, jid} from '@xmpp/client'
const xmpp = client({
service: "wss://ejabberd-srv:5222/xmpp-websocket",
domain: "ejabberd-srv",
username: "username",
password: "password",
})
xmpp.on('online', () => {
console.log("connected to xmpp server");
})
xmpp.on('error', (err) => {
console.log("Connected but error");
})
xmpp.start().catch(() => console.log("error in xmpp start"));
当我 运行 应用程序 node.js 端不断给我错误提示“SSL 错误版本号 /deps/openssl/ssl/record/ssl3_record.c:354:”
但是当我检查 ejabberd 的日志时,它清楚地显示“已接受连接”
我对kubernetes和node.js几乎一无所知,但我有ejabberd和docker的经验,所以也许我可以提供一些有用的提示:
查看您显示的配置,并假设您使用来自 https://github.com/processone/docker-ejabberd/blob/master/ecs/conf/ejabberd.yml#L38
的默认 ejabberd 配置
在该配置文件中说:
- 端口 5222 用于 XMPP C2S 连接
- 5280 用于 HTTP 连接
- 5443用于HTTPS,包括WebSocket, BOSH, web admin...
service: "wss://ejabberd-srv:5222/xmpp-websocket",
在您的情况下,如果您的客户端使用 WebSocket 连接到 ejabberd,您应该在 kubernetes 中打开 5443 端口并告诉您的客户端使用 URL,例如“wss://ejabberd-srv :5443/ws",
我正在尝试创建一个聊天应用程序来增强我的投资组合。 为此,我使用 xmpp 作为我的消息服务器。所以,我运行使用以下配置在 kubernetes 上使用 ejabberd
apiVersion: apps/v1
kind: Deployment
metadata:
name: ejabberd-depl
labels:
app: ejabberd
spec:
replicas: 1
selector:
matchLabels:
app: ejabberd
template:
metadata:
labels:
app: ejabberd
spec:
containers:
- name: ejabberd
image: ejabberd/ecs
ports:
- containerPort: 5280
- containerPort: 5222
- containerPort: 5269
---
apiVersion: v1
kind: Service
metadata:
name: ejabberd-srv
spec:
selector:
app: ejabberd
ports:
- name: ejabberd
protocol: TCP
port: 5222
targetPort: 5222
- name: admin
protocol: TCP
port: 5280
targetPort: 5280
- name: encrypted
protocol: TCP
port: 5269
targetPort: 5269
我正在使用该服务向我的整个应用公开 ejabberd。
正在使用包“@xmpp/client”连接到 ejabberd“
import {client, xml, jid} from '@xmpp/client'
const xmpp = client({
service: "wss://ejabberd-srv:5222/xmpp-websocket",
domain: "ejabberd-srv",
username: "username",
password: "password",
})
xmpp.on('online', () => {
console.log("connected to xmpp server");
})
xmpp.on('error', (err) => {
console.log("Connected but error");
})
xmpp.start().catch(() => console.log("error in xmpp start"));
当我 运行 应用程序 node.js 端不断给我错误提示“SSL 错误版本号 /deps/openssl/ssl/record/ssl3_record.c:354:”
但是当我检查 ejabberd 的日志时,它清楚地显示“已接受连接”
我对kubernetes和node.js几乎一无所知,但我有ejabberd和docker的经验,所以也许我可以提供一些有用的提示:
查看您显示的配置,并假设您使用来自 https://github.com/processone/docker-ejabberd/blob/master/ecs/conf/ejabberd.yml#L38
的默认 ejabberd 配置在该配置文件中说:
- 端口 5222 用于 XMPP C2S 连接
- 5280 用于 HTTP 连接
- 5443用于HTTPS,包括WebSocket, BOSH, web admin...
service: "wss://ejabberd-srv:5222/xmpp-websocket",
在您的情况下,如果您的客户端使用 WebSocket 连接到 ejabberd,您应该在 kubernetes 中打开 5443 端口并告诉您的客户端使用 URL,例如“wss://ejabberd-srv :5443/ws",