【发布时间】: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