Kafka 连接 - 无法连接到本地主机端口 8083:连接被拒绝
Kafka connect - Failed to connect to localhost port 8083: Connection refused
我有一个依赖 kafka 服务的应用程序。
使用 Kafka 连接时,我在 Linux VM 上尝试 curl localhost:8083
时遇到错误,即 运行 Kafka 连接的 kubernetes pod。
curl -v localhost:8083
给出:
- 重建 URL 为:localhost:8083/
- 正在尝试 127.0.0.1...
- 连接到 127.0.0.1 端口 8083 失败:连接被拒绝
- 无法连接到本地主机端口 8083:连接被拒绝
- 正在关闭连接 0
curl: (7) 无法连接到本地主机端口 8083:连接被拒绝
kubectl get po -o wide
对于我的 kubernetes 命名空间给出:
当我使用 sudo lsof -i -P -n | grep LISTEN
检查打开的端口时,我没有看到 8083 列出。 kafka connect pod 是 运行,并且在 pod 的日志中没有任何可疑之处。
我认为有一个 kubernetes 清单可能用于设置 Kafka 连接服务,这些是相关部分。我真的很感激任何关于如何弄清楚为什么我不能卷曲的建议 localhost:8083
apiVersion: apps/v1
kind: Deployment
metadata:
name: kafka-connect
namespace: my-namespace
spec:
...
template:
metadata:
labels:
app: connect
spec:
containers:
- name: kafka-connect
image: confluentinc/cp-kafka-connect:3.0.1
ports:
- containerPort: 8083
env:
- name: CONNECT_REST_PORT
value: "8083"
- name: CONNECT_REST_ADVERTISED_HOST_NAME
value: "kafka-connect"
volumes:
- name: connect-plugins
persistentVolumeClaim:
claimName: pvc-connect-plugin
- name: connect-helpers
secret:
secretName: my-kafka-connect-config
---
apiVersion: v1
kind: Service
metadata:
name: kafka-connect
namespace: my-namespace
labels:
app: connect
spec:
ports:
- port: 8083
selector:
app: connect
如果不进行一些修改,您无法从集群外部连接到集群内部的服务 运行。
您有三种可能的解决方案:
使用类型为 NodePort
或 LoadBalancer
的服务使该服务可在集群外访问。
请参阅 services and kubectl expose 文档。
请注意,这可能会将服务暴露给互联网,具体取决于您的环境。
使用代理动词访问:(参见here)
这仅适用于 HTTP/HTTPS。如果您的服务不安全,请使用它
足以暴露在互联网上。
从集群中的 pod 运行 访问。
正如您在评论中注意到的那样,您可以 curl
从广告连播中。您也可以从同一集群中的任何其他 pod 运行 执行此操作。 Pods无需任何额外配置即可相互通信。
Why can I not curl 8083 when I ssh onto the VM?
Pods/services 无法从集群外部访问,如果未使用上述方法(第 1 点或第 2 点)公开。
Why isn't the port exposed on the host VM that has the pods?
它没有暴露在您的 VM 上,而是暴露在您的集群内部。
我强烈建议您阅读 Cluster Networking 文档以了解更多信息。
我有一个依赖 kafka 服务的应用程序。
使用 Kafka 连接时,我在 Linux VM 上尝试 curl localhost:8083
时遇到错误,即 运行 Kafka 连接的 kubernetes pod。
curl -v localhost:8083
给出:
- 重建 URL 为:localhost:8083/
- 正在尝试 127.0.0.1...
- 连接到 127.0.0.1 端口 8083 失败:连接被拒绝
- 无法连接到本地主机端口 8083:连接被拒绝
- 正在关闭连接 0 curl: (7) 无法连接到本地主机端口 8083:连接被拒绝
kubectl get po -o wide
对于我的 kubernetes 命名空间给出:
当我使用 sudo lsof -i -P -n | grep LISTEN
检查打开的端口时,我没有看到 8083 列出。 kafka connect pod 是 运行,并且在 pod 的日志中没有任何可疑之处。
我认为有一个 kubernetes 清单可能用于设置 Kafka 连接服务,这些是相关部分。我真的很感激任何关于如何弄清楚为什么我不能卷曲的建议 localhost:8083
apiVersion: apps/v1
kind: Deployment
metadata:
name: kafka-connect
namespace: my-namespace
spec:
...
template:
metadata:
labels:
app: connect
spec:
containers:
- name: kafka-connect
image: confluentinc/cp-kafka-connect:3.0.1
ports:
- containerPort: 8083
env:
- name: CONNECT_REST_PORT
value: "8083"
- name: CONNECT_REST_ADVERTISED_HOST_NAME
value: "kafka-connect"
volumes:
- name: connect-plugins
persistentVolumeClaim:
claimName: pvc-connect-plugin
- name: connect-helpers
secret:
secretName: my-kafka-connect-config
---
apiVersion: v1
kind: Service
metadata:
name: kafka-connect
namespace: my-namespace
labels:
app: connect
spec:
ports:
- port: 8083
selector:
app: connect
如果不进行一些修改,您无法从集群外部连接到集群内部的服务 运行。
您有三种可能的解决方案:
使用类型为
NodePort
或LoadBalancer
的服务使该服务可在集群外访问。请参阅 services and kubectl expose 文档。
请注意,这可能会将服务暴露给互联网,具体取决于您的环境。使用代理动词访问:(参见here)
这仅适用于 HTTP/HTTPS。如果您的服务不安全,请使用它 足以暴露在互联网上。
从集群中的 pod 运行 访问。
正如您在评论中注意到的那样,您可以
curl
从广告连播中。您也可以从同一集群中的任何其他 pod 运行 执行此操作。 Pods无需任何额外配置即可相互通信。
Why can I not curl 8083 when I ssh onto the VM?
Pods/services 无法从集群外部访问,如果未使用上述方法(第 1 点或第 2 点)公开。
Why isn't the port exposed on the host VM that has the pods?
它没有暴露在您的 VM 上,而是暴露在您的集群内部。
我强烈建议您阅读 Cluster Networking 文档以了解更多信息。