簡體   English   中英

Kubernetes在Pod內部使用外部服務

[英]Kubernetes use External Services inside Pod

通過Virtualbox在Windows上運行Kubernetes(minikube)。 我有一個服務在我的主機服務上運行我不想放入我的Kubernetes集群,我如何從Inside my Pods訪問該服務?

我是Kubernetes的新手,我希望這個問題不是愚蠢的問題。

我試圖創建一個Service + Endpoint,但它沒有用:

 kind: Endpoints apiVersion: v1 metadata: name: vetdb subsets: - addresses: - ip: 192.168.99.100 ports: - port: 3307 

 kind: Service apiVersion: v1 metadata: name: vetdb spec: selector: app: vetdb type: ClusterIP ports: - port: 3306 targetPort: 3307 

我在稍后運行pod的同一群集中啟動了一個ubuntu映像並測試了連接:

 $ root@my-shell-7766cd89c6-rtxt2:/# curl vetdb:3307 --output test Host '192.168.99.102' is not allowed to connect to this MariaDB serverroot@my-shell 

這與我運行的輸出相同(除了其他主機IP)

curl 192.168.99.100:3307

在我的主機PC上==> Itworks。

但我無法從我的微服務中訪問主機,我真的需要訪問該URL。

 $ kubectl get pods NAME READY STATUS RESTARTS AGE eureka-77f949499-g2l82 1/1 Running 0 2h my-shell-7766cd89c6-rtxt2 1/1 Running 0 2h vet-ms-54b89f9c86-29psf 1/1 Running 10 18m vet-ms-67c774fd9b-2fnjc 0/1 CrashLoopBackOff 7 18m 

上面發布的卷曲響應來自Pod: my-shell-7766cd89c6-rtxt2但我需要從vet-ms-*訪問vetdb

 $ kubectl logs -f vet-ms-67c774fd9b-2fnjc ... Caused by: java.net.UnknownHostException: vetdb ... 

我試過的Spring URL設置

spring.profiles.datasource.url: jdbc:mysql://vetdb:3307/vetdb?useSSL=false&allowPublicKeyRetrieval=true
 spring.profiles.datasource.url: jdbc:mysql://vetdb:3306/vetdb?useSSL=false&allowPublicKeyRetrieval=true 
spring.profiles.datasource.url: jdbc:mysql://vetdb/vetdb?useSSL=false&allowPublicKeyRetrieval=true

Ty伙計們



編輯://我允許每個主機連接到數據庫以刪除此錯誤

Host '192.168.99.102' is not allowed to connect to this MariaDB

但我仍然在我的微服務中得到相同的未知主機異常。

我認為Ubuntu圖像測試在這里提供的信息最豐富。

從錯誤消息我認為問題出在MySQL配置中。 您必須將服務器配置為偵聽主機IP地址的端口(即不是localhost或socketfile)。

此外,還必須確保允許來自pod子網的IP地址進行連接。

暫無
暫無

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

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