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 给出:

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

如果不进行一些修改,您无法从集群外部连接到集群内部的服务 运行。

您有三种可能的解决方案:

  1. 使用类型为 NodePortLoadBalancer 的服务使该服务可在集群外访问。

    请参阅 services and kubectl expose 文档。
    请注意,这可能会将服务暴露给互联网,具体取决于您的环境。

  2. 使用代理动词访问:(参见here

    这仅适用于 HTTP/HTTPS。如果您的服务不安全,请使用它 足以暴露在互联网上。

  3. 从集群中的 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 文档以了解更多信息。