【问题标题】:Kubernetes use External Services inside PodKubernetes 在 Pod 中使用外部服务
【发布时间】:2018-10-31 01:48:50
【问题描述】:

我通过 Virtualbox 在 Windows 上运行 Kubernetes (minikube)。我在我的主机服务上运行了一个服务,我不想放在我的 Kubernetes 集群中,我如何从我的 Pod 中访问该服务?

我是 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 上 ==> 可以。

但我无法从我真正需要访问 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

我在上面发布的 Curl 响应来自 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

小伙伴们



编辑:// 我允许每个主机连接到数据库以消除此错误

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

但我的微服务中仍然出现相同的未知主机异常。

【问题讨论】:

  • 我想建议在 linode 上安装便宜的 10 美元 Centos 7 盒。我有一个 3 节点(主节点和 2 个节点)集群,每月只需 30 美元。
  • @JerylCook 我正在为我的学士论文开发一个系统,我不想/可以花钱只是为了测试
  • 知道了。祝你论文顺利!

标签: java docker kubernetes


【解决方案1】:

我认为这里的 Ubuntu 映像测试提供的信息最多。

从错误消息中我认为问题出在 MySQL 配置中。您必须将服务器配置为侦听主机 IP 地址的端口(即不是 localhost 或 socketfile)。

此外,您还必须确保来自 pod 子网的 IP 地址也允许连接。

【讨论】:

  • 我根据您的帖子编辑了底部的问题以添加新信息,我允许每个人(每个主机)连接到数据库仍然得到相同的错误
  • 一定还有Maria配置错误;我在这里找到了相关问题stackoverflow.com/q/1559955/362792
猜你喜欢
  • 2019-11-22
  • 2023-04-03
  • 2020-10-02
  • 2021-11-30
  • 2021-10-27
  • 1970-01-01
  • 2019-02-03
  • 1970-01-01
  • 2020-03-19
相关资源
最近更新 更多