kubernetes - Kubernetes pod 无法连接到本地运行的 rabbit mq 实例
问题描述
我正在将我的应用程序从 docker 移动到 kubernetes \ helm - 到目前为止,我已经成功,除了设置传入 \ 传出连接。
我面临的一个特殊问题是我无法连接到另一个 docker 容器上我的机器上本地运行的 rabbitmq 实例。
app-deployment.yaml:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: jks
labels:
app: myapp
spec:
replicas: 1
template:
metadata:
labels:
app: myapp
spec:
imagePullSecrets:
- name: ivsecret
containers:
- env:
- name: JOBQUEUE
value: jks_jobqueue
- name: PORT
value: "80"
image: repo.url
name: jks
ports:
- containerPort: 80
volumeMounts:
- name: config-vol
mountPath: /etc/sys0
volumes:
- name: config-vol
configMap:
name: config
restartPolicy: Always
------------
app-service.yaml:
apiVersion: v1
kind: Service
metadata:
name: jks
spec:
ports:
- name: "80"
port: 80
targetPort: 80
selector:
app: myapp
我在容器上看到错误,抱怨它无法连接到我的机器。我尝试从容器内部卷曲:
curl 10.2.10.122:5672
curl: (7) Failed to connect to 10.20.11.11 port 5672: Connection timed out
但是当我部署为 docker 容器时,同样的工作正常 - 我能够连接到在我的机器上运行的 rabbit mq 实例的端口 5672。
我需要做些什么来建立从 pod 到我的本地机器的连接吗?
解决方案
您正在为 pod 和服务公开端口 80。然后你在端口 5672 上卷曲。
要么暴露 pod 的 5672 端口并直接 curl ,要么暴露服务的 5672 端口并在 pod 上保留 80 端口,并在服务的 5672 端口上 curl。
这将是如何击中吊舱的高级“草图”:
you -curl-> service1(80:80) -> pod1(80)
you -curl-> service2(80:5672) -> pod2(5672)
所以说你有两个豆荚。其中一个在端口 80 上提供服务,另一个在端口 5672 上提供服务。您可以创建两个服务;他们每个人都针对一个吊舱。服务可以在端口 80 上运行,并将请求映射到 Pod 的端口 80 和 5672。
现在您不能让一项服务同时进行两种转发。每个 pod 需要一个服务。可以是一个部署,也可以是一组 pod,但它们需要在同一个端口上提供服务。
推荐阅读
- javascript - 用于求解类似于 Mathway.com 或 Symbolab.com 的代数表达式的节点包?
- java - 如何从 GoDaddy SSL 证书创建 Java JKS 文件
- linux - 如何替换括号之间的换行符
- javascript - 如何通过点击事件向输入框添加文本?
- laravel - 如何在 Redis pub/sub 上运行 phpunit 测试?
- java - RestTemplate 结果无法反序列化
- python - validate_on_submit() 在 Flask 中不起作用。我应该怎么办?
- kubernetes - 将日志文件写入慢速磁盘或将 Tomcat 访问日志发送到 ElasticSearch?
- python - 给定pandas DataFrame中一列中的值列表,如何从同一行中的另一列输出值?
- javascript - 如何将前六个月放入数组