使rabbitmq群集可公开访问

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使rabbitmq群集可公开访问相关的知识,希望对你有一定的参考价值。

我正在使用这个头盔图在k8s集群上配置rabbitmq:https://github.com/helm/charts/tree/master/stable/rabbitmq

如何通过公共端点使群集可访问?目前,我有一个具有以下配置的群集。我能够通过给定的主机名访问管理门户(公共端点,这很好)。但是,当我在内部检查时,管理门户集群可以通过内部IP和/或主机名访问,即:rabbit@rabbitmq-0.rabbitmq-headless.default.svc.cluster.localrabbit@<private_ip>。我想让群集公开,所以VNET之外的所有其他服务都可以连接到它。

helm install stable/rabbitmq --name rabbitmq 
  --set rabbitmq.username=xxx 
  --set rabbitmq.password=xxx 
  --set rabbitmq.erlangCookie=secretcookie 
  --set rbacEnabled=true 
  --set ingress.enabled=true 
  --set ingress.hostName=rabbitmq.xxx.com 
  --set ingress.annotations."kubernetes.io/ingress.class"="nginx" 
  --set resources.limits.memory="256Mi" 
  --set resources.limits.cpu="100m"
答案

我没有尝试使用Helm,但我是直接从.yaml配置文件构建并部署到Kubernetes。所以我只跟着Template of Helm

用于从群集中发布RabbitMQ服务

1,你需要一个外部IP:

如果您使用Google Cloud,请运行以下命令:

gcloud compute addresses create rabbitmq-service-ip --region asia-southeast1
gcloud compute addresses describe rabbitmq-service-ip --region asia-southeast1
>address: 35.240.xxx.xxx

rabbitmq-service-ip更改为您想要的名称,并将region更改为您自己的名称。

2,配置Helm参数

service.type=LoadBalancer

service.loadBalancerSourceRanges=35.240.xxx.xxx/32#您从gcloud获得的IP地址

service.port=5672

3,部署并尝试telnet到您的RabbitMQ服务

telnet 35.240.xxx.xxx 5672
Trying 35.240.xxx.xxx...
Connected to 149.185.xxx.xxx.bc.googleusercontent.com.
Escape character is '^]'.

疑难杂症!它奏效了

供参考:

如果要创建.yaml并在没有Helm的情况下部署,这是基本模板

service.yaml

---
apiVersion: v1
kind: Service
metadata:
  name: rabbitmq
  labels:
    name: rabbitmq
  namespace: smart-office
spec:
  type: LoadBalancer
  loadBalancerIP: 35.xxx.xxx.xx
  ports:
    # the port that this service should serve on
  - port: 5672
    name: rabbitmq
    targetPort: 5672
    nodePort: 32672
  selector:
    name: rabbitmq

deployment.yaml

---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: rabbitmq
  labels:
    name: rabbitmq
  namespace: smart-office
spec:
  replicas: 1
  template:
    metadata:
      labels:
        name: rabbitmq
      annotations:
        prometheus.io/scrape: "false"
    spec:
      containers:
      - name: rabbitmq
        image: rabbitmq:3.6.8-management
        ports:
        - containerPort: 5672
          name: rabbitmq
        securityContext:
          capabilities:
            drop:
              - all
            add:
              - CHOWN
              - SETGID
              - SETUID
              - DAC_OVERRIDE
          readOnlyRootFilesystem: true
      - name: rabbitmq-exporter
        image: kbudde/rabbitmq-exporter
        ports:
        - containerPort: 9090
          name: exporter
      nodeSelector:
        beta.kubernetes.io/os: linux

希望这有帮助!

另一答案

从您传递的Helm值开始,我看到您已经使用Nginx Ingress配置了RabbitMQ服务。

您应该创建一个DNS记录,其中ingress.hostName(rabbitmq.xxx.com)指向您的nginx-ingress负载均衡器的入口IP(如果是GCP)或CNAME(如果是AWS)。 DNS主机名(rabbitmq.xx.com)是您访问RabbitMQ服务的公共端点。

确保您的nginx-ingress控制器在群集中运行,以使入口正常工作。如果您不熟悉入口: - Official Ingress Docs - Nginx Ingress installation guide - Nginx Ingress helm chart

希望这可以帮助!

以上是关于使rabbitmq群集可公开访问的主要内容,如果未能解决你的问题,请参考以下文章

如何使 Localhost 节点 js Api 可公开访问

使 Sonatype Nexus 存储库可公开访问,以便能够下载带有 maven Central 等 URL 的工件

在 aws-cdk 上的 aws-rds 上,使数据库可公开访问的设置在哪里?

如何使用 iText 7 使下划线文本可访问

Rabbitmq群集部署

#导入MD文档图片# RabbitMQ 群集安装