簡體   English   中英

Kafka 連接 - 無法連接到本地主機端口 8083:連接被拒絕

[英]Kafka connect - Failed to connect to localhost port 8083: Connection refused

我有一個依賴 kafka 服務的應用程序。

使用 Kafka 連接時,在運行用於 Kafka 連接的 kube.netes pod 的 Linux VM 上嘗試curl localhost:8083時出現錯誤。

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 for my kube.netes 命名空間給出:

在此處輸入圖像描述

當我使用sudo lsof -i -P -n | grep LISTEN檢查打開的端口時 sudo lsof -i -P -n | grep LISTEN我沒有看到列出的 8083。 kafka connect pod 正在運行,並且該 pod 的日志中沒有任何可疑之處。

我認為有一個 kube.netes 清單可能用於設置 Kafka 連接服務,這些是相關部分。 我非常感謝有關如何弄清楚為什么我不能 curl 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的服務使服務可在集群外訪問。

    請參閱服務kubectl 公開文檔。
    請注意,根據您的環境,這可能會將服務暴露給 inte.net。

  2. 使用代理動詞訪問:(參見此處

    這僅適用於 HTTP/HTTPS。 如果您的服務不夠安全,無法暴露給 inte.net,請使用此選項。

  3. 從集群內運行的 pod 進行訪問。

    正如您在評論中注意到的那樣,您可以從 pod 內部curl 您也可以從同一集群中運行的任何其他 pod 執行此操作。 Pod 無需任何額外配置即可相互通信。


為什么我ssh不能curl 8083到VM上?

如果不使用上述方法(第 1 點或第 2 點)公開,則無法從集群外部訪問 Pod/服務。

為什么沒有在具有 pod 的主機 VM 上公開端口?

它不會暴露在您的 VM 上,而是暴露在您的集群內部。


我強烈建議您閱讀集群網絡文檔以了解更多信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM