在AKS中运行的Node.js应用程序可能无法直接访问RabbitMQ服务器,因此需要使用Kubernetes服务来访问。
首先,在AKS上创建一个Kubernetes服务:
apiVersion: v1
kind: Service
metadata:
name: rabbitmq-service
spec:
type: ClusterIP # 端口类型
ports:
- port: 5672
targetPort: 5672
selector:
app: rabbitmq
然后,在Node.js应用程序中使用Kubernetes服务来连接RabbitMQ服务器:
const amqp = require('amqplib');
const rabbitmqAddr = 'rabbitmq-service.default.svc.cluster.local';
amqp.connect(`amqp://${rabbitmqAddr}`).then(async (conn) => {
const channel = await conn.createChannel();
// ... do something with the channel ...
}).catch((err) => {
console.error('Failed to connect to RabbitMQ:', err);
});
这里,rabbitmq-service
是上面创建的Kubernetes服务的名称,default
是Kubernetes的默认命名空间。
另外,可能还需要在AKS上为Node.js应用程序提供网络策略,以允许它们与Kubernetes服务通信:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-rabbitmq
spec:
podSelector:
matchLabels:
app: node-app
policyTypes:
- Ingress
ingress:
- from:
- podSelector:
matchLabels:
app: rabbitmq
ports:
- port: 5672
protocol: TCP
其中,app:node-app
是Node.js应用程序的标签。这将允许来自Kubernetes服务的5672端口的TCP流量进入标有app:node-app
标签的任何Pod。