如何解决与vpc对等的Atlas集群未将docker swarm上的服务列入白名单
环境概述:
- Atlas上与vpc对等的Mongodb集群
- 在VPC中运行的EC2实例
- 在EC2实例内部的docker swarm。
我正在经历什么
- 我能够使用EC2实例中的mongo cli连接到mongo
- 即使我的所有容器都在此EC2实例上运行,它们也无法连接到mongodb
- 一旦我将他们能够连接的EC2实例的公共IP列入白名单,这很奇怪,但是我希望他们能够建立连接,因为他们所运行的实例能够在没有任何特殊白名单的情况下进行连接。
swarm初始化命令:
docker swarm --init --advertise-addr <private ip of the EC2>
当我尝试使用公共IP时它不起作用,当我不向群初始化中添加--advertise-addr
时它也不起作用。
其他有用的信息:
Dockerfile:
FROM node:12-alpine as builder
ENV TZ=Europe/London
RUN npm i npm@latest -g
RUN mkdir /app && chown node:node /app
WORKDIR /app
RUN apk add --no-cache python3 make g++ tini \
&& apk add --update tzdata
USER node
COPY package*.json ./
RUN npm install --no-optional && npm cache clean --force
ENV PATH /app/node_modules/.bin:$PATH
COPY . .
EXPOSE 8080
FROM builder as dev
USER node
CMD ["nodemon","src/services/server/server.js"]
FROM builder as prod
USER node
HEALTHCHECK --interval=30s CMD node healthcheck.js
ENTRYPOINT ["/sbin/tini","--"]
CMD ["node","--max-old-space-size=2048","src/services/server/server.js"]
我不知道为什么会这样,我该如何解决?
解决方法
在与一位高级 DevOps 工程师会面后,我们终于找到了问题所在。 事实证明,运行容器的网络的 CIDR 块与 VPC 的 CIDR 重叠。我们所做的是将以下内容添加到 docker-compose
networks:
wm-net:
driver: overlay
ipam:
driver: default
config:
- subnet: 172.28.0.0/16 #this CIDR doesn't overlap with the VPC
,
您的群集容器在EC2上的单独网络上运行。
如here所述,docker在初始化群时会创建一个特殊的“入口”网络。
为了允许他们连接,您可能需要重新配置docker设置的默认设置,或将docker的入口网络使用的特定网络接口列入白名单。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。