Kubernetes在Pod内部使用外部服务

时间:2018-10-30 17:09:49

标签: java docker kubernetes

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

我不是Kubernetes的新手,我希望这个问题不要愚蠢地问。

我尝试创建服务+端点,但是没有用:

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

我在以后应在其上运行的同一集群内启动了一个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

这是我正在运行的相同输出(其他Host-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 Settings

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

但是我仍然在我的微服务中收到相同的未知主机异常。

1 个答案:

答案 0 :(得分:1)

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

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

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